зеркало из https://github.com/microsoft/clang-1.git
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
This commit is contained in:
Родитель
c221411ad5
Коммит
5d3a4bb13d
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 =
|
||||
|
|
Загрузка…
Ссылка в новой задаче