From 5d3a4bb13dfad72c89df09bce70351175ecd19dc Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Wed, 1 Feb 2012 06:36:49 +0000 Subject: [PATCH] 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 --- lib/CodeGen/CGExprConstant.cpp | 2 +- lib/CodeGen/CGObjCGNU.cpp | 2 +- lib/CodeGen/CGObjCMac.cpp | 18 ++++++------ lib/CodeGen/CGRTTI.cpp | 3 +- lib/CodeGen/CodeGenAction.cpp | 7 +++-- lib/CodeGen/CodeGenModule.cpp | 51 +++++++++++++++++----------------- 6 files changed, 42 insertions(+), 41 deletions(-) diff --git a/lib/CodeGen/CGExprConstant.cpp b/lib/CodeGen/CGExprConstant.cpp index aa21bd37bd..d95a37c584 100644 --- a/lib/CodeGen/CGExprConstant.cpp +++ b/lib/CodeGen/CGExprConstant.cpp @@ -811,7 +811,7 @@ public: // Resize the string to the right size, adding zeros at the end, or // truncating as needed. Str.resize(CAT->getSize().getZExtValue(), '\0'); - return llvm::ConstantDataArray::getString(VMContext, Str, false); + return llvm::ConstantArray::get(VMContext, Str, false); } llvm::Constant *VisitUnaryExtension(const UnaryOperator *E) { diff --git a/lib/CodeGen/CGObjCGNU.cpp b/lib/CodeGen/CGObjCGNU.cpp index 82c478d4fe..4911e0e297 100644 --- a/lib/CodeGen/CGObjCGNU.cpp +++ b/lib/CodeGen/CGObjCGNU.cpp @@ -186,7 +186,7 @@ protected: std::string name = prefix + Str; llvm::Constant *ConstStr = TheModule.getGlobalVariable(name); if (!ConstStr) { - llvm::Constant *value = llvm::ConstantDataArray::getString(VMContext,Str); + llvm::Constant *value = llvm::ConstantArray::get(VMContext, Str, true); ConstStr = new llvm::GlobalVariable(TheModule, value->getType(), true, llvm::GlobalValue::LinkOnceODRLinkage, value, prefix + Str); } diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index 3bc595ca44..3152db2bec 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/lib/CodeGen/CGObjCMac.cpp @@ -3719,8 +3719,8 @@ llvm::Constant *CGObjCCommonMac::GetClassName(IdentifierInfo *Ident) { if (!Entry) Entry = CreateMetadataVar("\01L_OBJC_CLASS_NAME_", - llvm::ConstantDataArray::getString(VMContext, - Ident->getNameStart()), + llvm::ConstantArray::get(VMContext, + Ident->getNameStart()), ((ObjCABI == 2) ? "__TEXT,__objc_classname,cstring_literals" : "__TEXT,__cstring,cstring_literals"), @@ -3928,7 +3928,7 @@ void CGObjCCommonMac::BuildAggrIvarLayout(const ObjCImplementationDecl *OI, /// the given argument BitMap string container. Routine reads /// two containers, IvarsInfo and SkipIvars which are assumed to be /// filled already by the caller. -llvm::Constant *CGObjCCommonMac::BuildIvarLayoutBitmap(std::string &BitMap) { +llvm::Constant *CGObjCCommonMac::BuildIvarLayoutBitmap(std::string& BitMap) { unsigned int WordsToScan, WordsToSkip; llvm::Type *PtrTy = llvm::Type::getInt8PtrTy(VMContext); @@ -4045,7 +4045,7 @@ llvm::Constant *CGObjCCommonMac::BuildIvarLayoutBitmap(std::string &BitMap) { llvm::GlobalVariable * Entry = CreateMetadataVar("\01L_OBJC_CLASS_NAME_", - llvm::ConstantDataArray::getString(VMContext, BitMap,false), + llvm::ConstantArray::get(VMContext, BitMap.c_str()), ((ObjCABI == 2) ? "__TEXT,__objc_classname,cstring_literals" : "__TEXT,__cstring,cstring_literals"), @@ -4134,7 +4134,7 @@ llvm::Constant *CGObjCCommonMac::GetMethodVarName(Selector Sel) { // FIXME: Avoid std::string copying. if (!Entry) Entry = CreateMetadataVar("\01L_OBJC_METH_VAR_NAME_", - llvm::ConstantDataArray::getString(VMContext, Sel.getAsString()), + llvm::ConstantArray::get(VMContext, Sel.getAsString()), ((ObjCABI == 2) ? "__TEXT,__objc_methname,cstring_literals" : "__TEXT,__cstring,cstring_literals"), @@ -4156,7 +4156,7 @@ llvm::Constant *CGObjCCommonMac::GetMethodVarType(const FieldDecl *Field) { if (!Entry) Entry = CreateMetadataVar("\01L_OBJC_METH_VAR_TYPE_", - llvm::ConstantDataArray::getString(VMContext, TypeStr), + llvm::ConstantArray::get(VMContext, TypeStr), ((ObjCABI == 2) ? "__TEXT,__objc_methtype,cstring_literals" : "__TEXT,__cstring,cstring_literals"), @@ -4177,7 +4177,7 @@ llvm::Constant *CGObjCCommonMac::GetMethodVarType(const ObjCMethodDecl *D, if (!Entry) Entry = CreateMetadataVar("\01L_OBJC_METH_VAR_TYPE_", - llvm::ConstantDataArray::getString(VMContext, TypeStr), + llvm::ConstantArray::get(VMContext, TypeStr), ((ObjCABI == 2) ? "__TEXT,__objc_methtype,cstring_literals" : "__TEXT,__cstring,cstring_literals"), @@ -4192,8 +4192,8 @@ llvm::Constant *CGObjCCommonMac::GetPropertyName(IdentifierInfo *Ident) { if (!Entry) Entry = CreateMetadataVar("\01L_OBJC_PROP_NAME_ATTR_", - llvm::ConstantDataArray::getString(VMContext, - Ident->getNameStart()), + llvm::ConstantArray::get(VMContext, + Ident->getNameStart()), "__TEXT,__cstring,cstring_literals", 1, true); diff --git a/lib/CodeGen/CGRTTI.cpp b/lib/CodeGen/CGRTTI.cpp index a5883f61d6..120e711e84 100644 --- a/lib/CodeGen/CGRTTI.cpp +++ b/lib/CodeGen/CGRTTI.cpp @@ -125,8 +125,7 @@ RTTIBuilder::GetAddrOfTypeName(QualType Ty, // We know that the mangled name of the type starts at index 4 of the // mangled name of the typename, so we can just index into it in order to // get the mangled name of the type. - llvm::Constant *Init = llvm::ConstantDataArray::getString(VMContext, - Name.substr(4)); + llvm::Constant *Init = llvm::ConstantArray::get(VMContext, Name.substr(4)); llvm::GlobalVariable *GV = CGM.CreateOrReplaceCXXRuntimeVariable(Name, Init->getType(), Linkage); diff --git a/lib/CodeGen/CodeGenAction.cpp b/lib/CodeGen/CodeGenAction.cpp index 2ac9a6fddf..eedfc57a10 100644 --- a/lib/CodeGen/CodeGenAction.cpp +++ b/lib/CodeGen/CodeGenAction.cpp @@ -220,15 +220,18 @@ void BackendConsumer::InlineAsmDiagHandler2(const llvm::SMDiagnostic &D, SourceLocation LocCookie) { // There are a couple of different kinds of errors we could get here. First, // we re-format the SMDiagnostic in terms of a clang diagnostic. + + // Strip "error: " off the start of the message string. StringRef Message = D.getMessage(); + if (Message.startswith("error: ")) + Message = Message.substr(7); // If the SMDiagnostic has an inline asm source location, translate it. FullSourceLoc Loc; if (D.getLoc() != SMLoc()) Loc = ConvertBackendLocation(D, Context->getSourceManager()); - - // FIXME: Propagate ranges up as well. + // If this problem has clang-level source location information, report the // issue as being an error in the source with a note showing the instantiated // code. 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(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