diff options
author | Chris Lattner <sabre@nondot.org> | 2012-01-31 06:13:55 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2012-01-31 06:13:55 +0000 |
commit | ff8f9ec8336c62b5e3504e2a394f4b25c0cb1963 (patch) | |
tree | c6c339de102a4da0ced97f924199633114d10844 /lib/CodeGen/CodeGenModule.cpp | |
parent | fdba18263ffd624846701ad115d35edb3e2ee0a7 (diff) |
ConstantArray::get() (for strings) is going away, use
ConstantDataArray::getString instead.
Many instances of ConstantArray::get() could be moved to
use more efficient ConstantDataArray methods that avoid a ton
of intermediate Constant*'s for each element (e.g.
GetConstantArrayFromStringLiteral). I don't plan on doing this
in the short-term though.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149363 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | lib/CodeGen/CodeGenModule.cpp | 51 |
1 files changed, 26 insertions, 25 deletions
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 67059016f7..196ab5dd39 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -689,7 +689,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); @@ -1853,7 +1853,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) @@ -1985,7 +1986,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; @@ -2081,29 +2083,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<llvm::ArrayType>(getTypes().ConvertType(E->getType())); - llvm::Type *ElemTy = AType->getElementType(); - unsigned NumElements = AType->getNumElements(); - std::vector<llvm::Constant*> Elts; - Elts.reserve(NumElements); - - for(unsigned i=0;i<E->getLength();++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<NumElements;++i) { - llvm::Constant *C = llvm::ConstantInt::get(ElemTy,0,false); - Elts.push_back(C); - } - - return llvm::ConstantArray::get(AType, Elts); } - + + llvm::ArrayType *AType = + cast<llvm::ArrayType>(getTypes().ConvertType(E->getType())); + llvm::Type *ElemTy = AType->getElementType(); + unsigned NumElements = AType->getNumElements(); + std::vector<llvm::Constant*> Elts; + Elts.reserve(NumElements); + + for(unsigned i=0;i<E->getLength();++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<NumElements;++i) { + llvm::Constant *C = llvm::ConstantInt::get(ElemTy,0,false); + Elts.push_back(C); + } + + return llvm::ConstantArray::get(AType, Elts); } /// GetAddrOfConstantStringFromLiteral - Return a pointer to a @@ -2152,7 +2153,7 @@ static llvm::GlobalVariable *GenerateStringLiteral(StringRef str, unsigned Alignment) { // Create Constant for this string literal. Don't add a '\0'. llvm::Constant *C = - llvm::ConstantArray::get(CGM.getLLVMContext(), str, false); + llvm::ConstantDataArray::getString(CGM.getLLVMContext(), str, false); // Create a global variable for this string llvm::GlobalVariable *GV = |