summaryrefslogtreecommitdiffstats
path: root/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-02-01 06:36:49 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-02-01 06:36:49 +0000
commit5d3a4bb13dfad72c89df09bce70351175ecd19dc (patch)
tree5a284eb1a218bb05296e38846263f0f9959bf00b /lib/CodeGen/CodeGenModule.cpp
parentc221411ad52edf93659392058341dfec4cdae4fa (diff)
Revert r149363 which was part a series of commits that were reverted in llvm
commit 149470. This fixes test/CodeGen/PR3589-freestanding-libcalls.c. Original log: 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@149477 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenModule.cpp')
-rw-r--r--lib/CodeGen/CodeGenModule.cpp51
1 files changed, 25 insertions, 26 deletions
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index 576209f366..fc1c3be39a 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::ConstantDataArray::getString(getLLVMContext(), Str);
+ llvm::Constant *s = llvm::ConstantArray::get(getLLVMContext(), Str, true);
llvm::GlobalValue *gv = new llvm::GlobalVariable(getModule(), s->getType(),
true, llvm::GlobalValue::PrivateLinkage, s, ".str");
gv->setSection(AnnotationSection);
@@ -1853,8 +1853,7 @@ CodeGenModule::GetAddrOfConstantCFString(const StringLiteral *Literal) {
llvm::ConstantInt::get(Ty, 0x07C8);
// String pointer.
- llvm::Constant *C = llvm::ConstantDataArray::getString(VMContext,
- Entry.getKey());
+ llvm::Constant *C = llvm::ConstantArray::get(VMContext, Entry.getKey().str());
llvm::GlobalValue::LinkageTypes Linkage;
if (isUTF16)
@@ -1986,8 +1985,7 @@ CodeGenModule::GetAddrOfConstantString(const StringLiteral *Literal) {
Fields[0] = ConstantStringClassRef;
// String pointer.
- llvm::Constant *C =
- llvm::ConstantDataArray::getString(VMContext, Entry.getKey());
+ llvm::Constant *C = llvm::ConstantArray::get(VMContext, Entry.getKey().str());
llvm::GlobalValue::LinkageTypes Linkage;
bool isConstant;
@@ -2083,28 +2081,29 @@ 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::ConstantDataArray::getString(VMContext,
+ return llvm::ConstantArray::get(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
@@ -2153,7 +2152,7 @@ static llvm::GlobalVariable *GenerateStringLiteral(StringRef str,
unsigned Alignment) {
// Create Constant for this string literal. Don't add a '\0'.
llvm::Constant *C =
- llvm::ConstantDataArray::getString(CGM.getLLVMContext(), str, false);
+ llvm::ConstantArray::get(CGM.getLLVMContext(), str, false);
// Create a global variable for this string
llvm::GlobalVariable *GV =