From 9c81833c8dbe3d903d6df71a62c705c06a2f0e9a Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 5 Feb 2012 02:30:40 +0000 Subject: reapply the patches reverted in r149477, which enable ConstantDataArray. llvm-svn: 149801 --- clang/lib/CodeGen/CodeGenModule.cpp | 51 +++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 25 deletions(-) (limited to 'clang/lib/CodeGen/CodeGenModule.cpp') diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index a35cd7e..af6381b 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -696,7 +696,7 @@ llvm::Constant *CodeGenModule::EmitAnnotationString(llvm::StringRef Str) { return i->second; // Not found yet, create a new global. - llvm::Constant *s = llvm::ConstantArray::get(getLLVMContext(), Str, true); + llvm::Constant *s = llvm::ConstantDataArray::getString(getLLVMContext(), Str); llvm::GlobalValue *gv = new llvm::GlobalVariable(getModule(), s->getType(), true, llvm::GlobalValue::PrivateLinkage, s, ".str"); gv->setSection(AnnotationSection); @@ -1852,7 +1852,8 @@ CodeGenModule::GetAddrOfConstantCFString(const StringLiteral *Literal) { llvm::ConstantInt::get(Ty, 0x07C8); // String pointer. - llvm::Constant *C = llvm::ConstantArray::get(VMContext, Entry.getKey().str()); + llvm::Constant *C = llvm::ConstantDataArray::getString(VMContext, + Entry.getKey()); llvm::GlobalValue::LinkageTypes Linkage; if (isUTF16) @@ -1984,7 +1985,8 @@ CodeGenModule::GetAddrOfConstantString(const StringLiteral *Literal) { Fields[0] = ConstantStringClassRef; // String pointer. - llvm::Constant *C = llvm::ConstantArray::get(VMContext, Entry.getKey().str()); + llvm::Constant *C = + llvm::ConstantDataArray::getString(VMContext, Entry.getKey()); llvm::GlobalValue::LinkageTypes Linkage; bool isConstant; @@ -2080,29 +2082,28 @@ CodeGenModule::GetConstantArrayFromStringLiteral(const StringLiteral *E) { // Don't emit it as the address of the string, emit the string data itself // as an inline array. if (E->getCharByteWidth()==1) { - return llvm::ConstantArray::get(VMContext, + return llvm::ConstantDataArray::getString(VMContext, GetStringForStringLiteral(E), false); - } else { - llvm::ArrayType *AType = - cast(getTypes().ConvertType(E->getType())); - llvm::Type *ElemTy = AType->getElementType(); - unsigned NumElements = AType->getNumElements(); - std::vector Elts; - Elts.reserve(NumElements); - - for(unsigned i=0;igetLength();++i) { - unsigned value = E->getCodeUnit(i); - llvm::Constant *C = llvm::ConstantInt::get(ElemTy,value,false); - Elts.push_back(C); - } - for(unsigned i=E->getLength();i(getTypes().ConvertType(E->getType())); + llvm::Type *ElemTy = AType->getElementType(); + unsigned NumElements = AType->getNumElements(); + std::vector Elts; + Elts.reserve(NumElements); + + for(unsigned i=0;igetLength();++i) { + unsigned value = E->getCodeUnit(i); + llvm::Constant *C = llvm::ConstantInt::get(ElemTy,value,false); + Elts.push_back(C); + } + for(unsigned i=E->getLength();i