From e9b11b431308f4766b73cda93e38ec930c912122 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Wed, 8 Jul 2009 19:03:57 +0000 Subject: [PATCH] Switch GlobalVariable ctors to a sane API, where *either* a context or a module is required. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75025 91177308-0d34-0410-b5e6-96231b3b80d8 --- examples/BrainF/BrainF.cpp | 5 +- include/llvm/GlobalVariable.h | 17 ++++--- include/llvm/Support/IRBuilder.h | 43 ++++++++--------- lib/Analysis/DebugInfo.cpp | 48 +++++++++---------- lib/AsmParser/LLParser.cpp | 13 +++-- lib/Bitcode/Reader/BitcodeReader.cpp | 2 +- lib/CodeGen/ShadowStackGC.cpp | 9 ++-- lib/Linker/LinkModules.cpp | 16 +++---- lib/Transforms/IPO/ExtractGV.cpp | 4 +- lib/Transforms/IPO/GlobalOpt.cpp | 37 +++++++------- .../Instrumentation/BlockProfiling.cpp | 8 ++-- .../Instrumentation/EdgeProfiling.cpp | 4 +- .../Instrumentation/RSProfiling.cpp | 10 ++-- lib/Transforms/Scalar/SimplifyLibCalls.cpp | 5 +- lib/Transforms/Utils/CloneModule.cpp | 4 +- lib/Transforms/Utils/LowerInvoke.cpp | 15 +++--- lib/VMCore/Core.cpp | 6 +-- lib/VMCore/Globals.cpp | 17 +++---- lib/VMCore/Module.cpp | 16 +++---- tools/bugpoint/ExtractFunction.cpp | 8 ++-- tools/bugpoint/Miscompilation.cpp | 11 ++--- 21 files changed, 134 insertions(+), 164 deletions(-) diff --git a/examples/BrainF/BrainF.cpp b/examples/BrainF/BrainF.cpp index 7ae268f5929..058ef8c72de 100644 --- a/examples/BrainF/BrainF.cpp +++ b/examples/BrainF/BrainF.cpp @@ -128,13 +128,12 @@ void BrainF::header(LLVMContext& C) { get("Error: The head has left the tape.", true); GlobalVariable *aberrormsg = new GlobalVariable( - module->getContext(), + *module, msg_0->getType(), true, GlobalValue::InternalLinkage, msg_0, - "aberrormsg", - module); + "aberrormsg"); //declare i32 @puts(i8 *) Function *puts_func = cast(module-> diff --git a/include/llvm/GlobalVariable.h b/include/llvm/GlobalVariable.h index a6505ad9cba..28eaa624e9d 100644 --- a/include/llvm/GlobalVariable.h +++ b/include/llvm/GlobalVariable.h @@ -26,9 +26,9 @@ namespace llvm { -class LLVMContext; class Module; class Constant; +class LLVMContext; template class SymbolTableListTraits; @@ -50,17 +50,16 @@ public: } /// GlobalVariable ctor - If a parent module is specified, the global is /// automatically inserted into the end of the specified modules global list. - GlobalVariable(LLVMContext &Context, const Type *Ty, - bool isConstant, LinkageTypes Linkage, + GlobalVariable(LLVMContext &Context, const Type *Ty, bool isConstant, + LinkageTypes Linkage, Constant *Initializer = 0, const std::string &Name = "", - Module *Parent = 0, bool ThreadLocal = false, - unsigned AddressSpace = 0); + bool ThreadLocal = false, unsigned AddressSpace = 0); /// GlobalVariable ctor - This creates a global and inserts it before the /// specified other global. - GlobalVariable(LLVMContext &Context, const Type *Ty, - bool isConstant, LinkageTypes Linkage, - Constant *Initializer, const std::string &Name, - GlobalVariable *InsertBefore, bool ThreadLocal = false, + GlobalVariable(Module &M, const Type *Ty, bool isConstant, + LinkageTypes Linkage, Constant *Initializer, + const std::string &Name, + GlobalVariable *InsertBefore = 0, bool ThreadLocal = false, unsigned AddressSpace = 0); ~GlobalVariable() { diff --git a/include/llvm/Support/IRBuilder.h b/include/llvm/Support/IRBuilder.h index f92f8654a57..0f4e471e05a 100644 --- a/include/llvm/Support/IRBuilder.h +++ b/include/llvm/Support/IRBuilder.h @@ -20,7 +20,6 @@ #include "llvm/GlobalAlias.h" #include "llvm/GlobalVariable.h" #include "llvm/Function.h" -#include "llvm/LLVMContext.h" #include "llvm/Support/ConstantFolder.h" namespace llvm { @@ -43,16 +42,12 @@ template class IRBuilder{ BasicBlock *BB; BasicBlock::iterator InsertPt; T Folder; - LLVMContext& Context; public: - IRBuilder(const T& F = T(), LLVMContext &C = getGlobalContext()) : - Folder(F), Context(C) { ClearInsertionPoint(); } - explicit IRBuilder(BasicBlock *TheBB, const T& F = T(), - LLVMContext &C = getGlobalContext()) : - Folder(F), Context(C) { SetInsertPoint(TheBB); } - IRBuilder(BasicBlock *TheBB, BasicBlock::iterator IP, const T& F = T(), - LLVMContext &C = getGlobalContext()) - : Folder(F), Context(C) { SetInsertPoint(TheBB, IP); } + IRBuilder(const T& F = T()) : Folder(F) { ClearInsertionPoint(); } + explicit IRBuilder(BasicBlock *TheBB, const T& F = T()) + : Folder(F) { SetInsertPoint(TheBB); } + IRBuilder(BasicBlock *TheBB, BasicBlock::iterator IP, const T& F = T()) + : Folder(F) { SetInsertPoint(TheBB, IP); } /// getFolder - Get the constant folder being used. const T& getFolder() { return Folder; } @@ -130,7 +125,7 @@ public: /// ReturnInst *CreateAggregateRet(Value * const* retVals, unsigned N) { const Type *RetType = BB->getParent()->getReturnType(); - Value *V = Context.getUndef(RetType); + Value *V = UndefValue::get(RetType); for (unsigned i = 0; i != N; ++i) V = CreateInsertValue(V, retVals[i], i, "mrv"); return Insert(ReturnInst::Create(V)); @@ -354,7 +349,7 @@ public: return Insert(GetElementPtrInst::Create(Ptr, Idx), Name); } Value *CreateConstGEP1_32(Value *Ptr, unsigned Idx0, const char *Name = "") { - Value *Idx = Context.getConstantInt(Type::Int32Ty, Idx0); + Value *Idx = ConstantInt::get(Type::Int32Ty, Idx0); if (Constant *PC = dyn_cast(Ptr)) return Folder.CreateGetElementPtr(PC, &Idx, 1); @@ -364,8 +359,8 @@ public: Value *CreateConstGEP2_32(Value *Ptr, unsigned Idx0, unsigned Idx1, const char *Name = "") { Value *Idxs[] = { - Context.getConstantInt(Type::Int32Ty, Idx0), - Context.getConstantInt(Type::Int32Ty, Idx1) + ConstantInt::get(Type::Int32Ty, Idx0), + ConstantInt::get(Type::Int32Ty, Idx1) }; if (Constant *PC = dyn_cast(Ptr)) @@ -374,7 +369,7 @@ public: return Insert(GetElementPtrInst::Create(Ptr, Idxs, Idxs+2), Name); } Value *CreateConstGEP1_64(Value *Ptr, uint64_t Idx0, const char *Name = "") { - Value *Idx = Context.getConstantInt(Type::Int64Ty, Idx0); + Value *Idx = ConstantInt::get(Type::Int64Ty, Idx0); if (Constant *PC = dyn_cast(Ptr)) return Folder.CreateGetElementPtr(PC, &Idx, 1); @@ -384,8 +379,8 @@ public: Value *CreateConstGEP2_64(Value *Ptr, uint64_t Idx0, uint64_t Idx1, const char *Name = "") { Value *Idxs[] = { - Context.getConstantInt(Type::Int64Ty, Idx0), - Context.getConstantInt(Type::Int64Ty, Idx1) + ConstantInt::get(Type::Int64Ty, Idx0), + ConstantInt::get(Type::Int64Ty, Idx1) }; if (Constant *PC = dyn_cast(Ptr)) @@ -397,21 +392,21 @@ public: return CreateConstGEP2_32(Ptr, 0, Idx, Name); } Value *CreateGlobalString(const char *Str = "", const char *Name = "") { - Constant *StrConstant = Context.getConstantArray(Str, true); - GlobalVariable *gv = new GlobalVariable(Context, + Constant *StrConstant = ConstantArray::get(Str, true); + GlobalVariable *gv = new GlobalVariable(*BB->getParent()->getParent(), StrConstant->getType(), true, GlobalValue::InternalLinkage, StrConstant, "", - BB->getParent()->getParent(), + 0, false); gv->setName(Name); return gv; } Value *CreateGlobalStringPtr(const char *Str = "", const char *Name = "") { Value *gv = CreateGlobalString(Str, Name); - Value *zero = Context.getConstantInt(Type::Int32Ty, 0); + Value *zero = ConstantInt::get(Type::Int32Ty, 0); Value *Args[] = { zero, zero }; return CreateGEP(gv, Args, Args+2, Name); } @@ -688,13 +683,13 @@ public: /// CreateIsNull - Return an i1 value testing if \arg Arg is null. Value *CreateIsNull(Value *Arg, const char *Name = "") { - return CreateICmpEQ(Arg, Context.getNullValue(Arg->getType()), + return CreateICmpEQ(Arg, Constant::getNullValue(Arg->getType()), Name); } /// CreateIsNotNull - Return an i1 value testing if \arg Arg is not null. Value *CreateIsNotNull(Value *Arg, const char *Name = "") { - return CreateICmpNE(Arg, Context.getNullValue(Arg->getType()), + return CreateICmpNE(Arg, Constant::getNullValue(Arg->getType()), Name); } @@ -709,7 +704,7 @@ public: Value *RHS_int = CreatePtrToInt(RHS, Type::Int64Ty); Value *Difference = CreateSub(LHS_int, RHS_int); return CreateSDiv(Difference, - Context.getConstantExprSizeOf(ArgType->getElementType()), + ConstantExpr::getSizeOf(ArgType->getElementType()), Name); } }; diff --git a/lib/Analysis/DebugInfo.cpp b/lib/Analysis/DebugInfo.cpp index 363ecabaf2b..491cc3f2028 100644 --- a/lib/Analysis/DebugInfo.cpp +++ b/lib/Analysis/DebugInfo.cpp @@ -490,9 +490,9 @@ Constant *DIFactory::GetStringConstant(const std::string &String) { Constant *ConstStr = VMContext.getConstantArray(String); // Otherwise create and return a new string global. - GlobalVariable *StrGV = new GlobalVariable(VMContext,ConstStr->getType(), true, + GlobalVariable *StrGV = new GlobalVariable(M, ConstStr->getType(), true, GlobalVariable::InternalLinkage, - ConstStr, ".str", &M); + ConstStr, ".str"); StrGV->setSection("llvm.metadata"); return Slot = VMContext.getConstantExprBitCast(StrGV, DestTy); } @@ -516,9 +516,9 @@ DIArray DIFactory::GetOrCreateArray(DIDescriptor *Tys, unsigned NumTys) { DIDescriptor &Entry = SimpleConstantCache[Init]; if (!Entry.isNull()) return DIArray(Entry.getGV()); - GlobalVariable *GV = new GlobalVariable(VMContext, Init->getType(), true, + GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true, GlobalValue::InternalLinkage, - Init, "llvm.dbg.array", &M); + Init, "llvm.dbg.array"); GV->setSection("llvm.metadata"); Entry = DIDescriptor(GV); return DIArray(GV); @@ -542,9 +542,9 @@ DISubrange DIFactory::GetOrCreateSubrange(int64_t Lo, int64_t Hi) { M.addTypeName("llvm.dbg.subrange.type", Init->getType()); - GlobalVariable *GV = new GlobalVariable(VMContext, Init->getType(), true, + GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true, GlobalValue::InternalLinkage, - Init, "llvm.dbg.subrange", &M); + Init, "llvm.dbg.subrange"); GV->setSection("llvm.metadata"); Entry = DIDescriptor(GV); return DISubrange(GV); @@ -579,9 +579,9 @@ DICompileUnit DIFactory::CreateCompileUnit(unsigned LangID, sizeof(Elts)/sizeof(Elts[0])); M.addTypeName("llvm.dbg.compile_unit.type", Init->getType()); - GlobalVariable *GV = new GlobalVariable(VMContext, Init->getType(), true, + GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true, GlobalValue::LinkOnceAnyLinkage, - Init, "llvm.dbg.compile_unit", &M); + Init, "llvm.dbg.compile_unit"); GV->setSection("llvm.metadata"); return DICompileUnit(GV); } @@ -598,9 +598,9 @@ DIEnumerator DIFactory::CreateEnumerator(const std::string &Name, uint64_t Val){ sizeof(Elts)/sizeof(Elts[0])); M.addTypeName("llvm.dbg.enumerator.type", Init->getType()); - GlobalVariable *GV = new GlobalVariable(VMContext, Init->getType(), true, + GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true, GlobalValue::InternalLinkage, - Init, "llvm.dbg.enumerator", &M); + Init, "llvm.dbg.enumerator"); GV->setSection("llvm.metadata"); return DIEnumerator(GV); } @@ -632,9 +632,9 @@ DIBasicType DIFactory::CreateBasicType(DIDescriptor Context, sizeof(Elts)/sizeof(Elts[0])); M.addTypeName("llvm.dbg.basictype.type", Init->getType()); - GlobalVariable *GV = new GlobalVariable(VMContext, Init->getType(), true, + GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true, GlobalValue::InternalLinkage, - Init, "llvm.dbg.basictype", &M); + Init, "llvm.dbg.basictype"); GV->setSection("llvm.metadata"); return DIBasicType(GV); } @@ -668,9 +668,9 @@ DIDerivedType DIFactory::CreateDerivedType(unsigned Tag, sizeof(Elts)/sizeof(Elts[0])); M.addTypeName("llvm.dbg.derivedtype.type", Init->getType()); - GlobalVariable *GV = new GlobalVariable(VMContext, Init->getType(), true, + GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true, GlobalValue::InternalLinkage, - Init, "llvm.dbg.derivedtype", &M); + Init, "llvm.dbg.derivedtype"); GV->setSection("llvm.metadata"); return DIDerivedType(GV); } @@ -708,9 +708,9 @@ DICompositeType DIFactory::CreateCompositeType(unsigned Tag, sizeof(Elts)/sizeof(Elts[0])); M.addTypeName("llvm.dbg.composite.type", Init->getType()); - GlobalVariable *GV = new GlobalVariable(VMContext, Init->getType(), true, + GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true, GlobalValue::InternalLinkage, - Init, "llvm.dbg.composite", &M); + Init, "llvm.dbg.composite"); GV->setSection("llvm.metadata"); return DICompositeType(GV); } @@ -746,9 +746,9 @@ DISubprogram DIFactory::CreateSubprogram(DIDescriptor Context, sizeof(Elts)/sizeof(Elts[0])); M.addTypeName("llvm.dbg.subprogram.type", Init->getType()); - GlobalVariable *GV = new GlobalVariable(VMContext, Init->getType(), true, + GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true, GlobalValue::LinkOnceAnyLinkage, - Init, "llvm.dbg.subprogram", &M); + Init, "llvm.dbg.subprogram"); GV->setSection("llvm.metadata"); return DISubprogram(GV); } @@ -780,9 +780,9 @@ DIFactory::CreateGlobalVariable(DIDescriptor Context, const std::string &Name, sizeof(Elts)/sizeof(Elts[0])); M.addTypeName("llvm.dbg.global_variable.type", Init->getType()); - GlobalVariable *GV = new GlobalVariable(VMContext, Init->getType(), true, + GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true, GlobalValue::LinkOnceAnyLinkage, - Init, "llvm.dbg.global_variable", &M); + Init, "llvm.dbg.global_variable"); GV->setSection("llvm.metadata"); return DIGlobalVariable(GV); } @@ -806,9 +806,9 @@ DIVariable DIFactory::CreateVariable(unsigned Tag, DIDescriptor Context, sizeof(Elts)/sizeof(Elts[0])); M.addTypeName("llvm.dbg.variable.type", Init->getType()); - GlobalVariable *GV = new GlobalVariable(VMContext, Init->getType(), true, + GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true, GlobalValue::InternalLinkage, - Init, "llvm.dbg.variable", &M); + Init, "llvm.dbg.variable"); GV->setSection("llvm.metadata"); return DIVariable(GV); } @@ -826,9 +826,9 @@ DIBlock DIFactory::CreateBlock(DIDescriptor Context) { sizeof(Elts)/sizeof(Elts[0])); M.addTypeName("llvm.dbg.block.type", Init->getType()); - GlobalVariable *GV = new GlobalVariable(VMContext, Init->getType(), true, + GlobalVariable *GV = new GlobalVariable(M, Init->getType(), true, GlobalValue::InternalLinkage, - Init, "llvm.dbg.block", &M); + Init, "llvm.dbg.block"); GV->setSection("llvm.metadata"); return DIBlock(GV); } diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index 8c30ab5a701..3927cf1e9e9 100644 --- a/lib/AsmParser/LLParser.cpp +++ b/lib/AsmParser/LLParser.cpp @@ -516,9 +516,8 @@ bool LLParser::ParseGlobal(const std::string &Name, LocTy NameLoc, } if (GV == 0) { - GV = new GlobalVariable(Context, Ty, false, - GlobalValue::ExternalLinkage, 0, Name, - M, false, AddrSpace); + GV = new GlobalVariable(*M, Ty, false, GlobalValue::ExternalLinkage, 0, + Name, 0, false, AddrSpace); } else { if (GV->getType()->getElementType() != Ty) return Error(TyLoc, @@ -608,8 +607,8 @@ GlobalValue *LLParser::GetGlobalVal(const std::string &Name, const Type *Ty, FwdVal = Function::Create(FT, GlobalValue::ExternalWeakLinkage, Name, M); } else { - FwdVal = new GlobalVariable(Context, PTy->getElementType(), false, - GlobalValue::ExternalWeakLinkage, 0, Name, M); + FwdVal = new GlobalVariable(*M, PTy->getElementType(), false, + GlobalValue::ExternalWeakLinkage, 0, Name); } ForwardRefVals[Name] = std::make_pair(FwdVal, Loc); @@ -652,8 +651,8 @@ GlobalValue *LLParser::GetGlobalVal(unsigned ID, const Type *Ty, LocTy Loc) { } FwdVal = Function::Create(FT, GlobalValue::ExternalWeakLinkage, "", M); } else { - FwdVal = new GlobalVariable(Context, PTy->getElementType(), false, - GlobalValue::ExternalWeakLinkage, 0, "", M); + FwdVal = new GlobalVariable(*M, PTy->getElementType(), false, + GlobalValue::ExternalWeakLinkage, 0, ""); } ForwardRefValIDs[ID] = std::make_pair(FwdVal, Loc); diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp index 78f1c8fd8b8..d69895e0cc4 100644 --- a/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/lib/Bitcode/Reader/BitcodeReader.cpp @@ -1254,7 +1254,7 @@ bool BitcodeReader::ParseModule(const std::string &ModuleID) { isThreadLocal = Record[7]; GlobalVariable *NewGV = - new GlobalVariable(Context, Ty, isConstant, Linkage, 0, "", TheModule, + new GlobalVariable(*TheModule, Ty, isConstant, Linkage, 0, "", 0, isThreadLocal, AddressSpace); NewGV->setAlignment(Alignment); if (!Section.empty()) diff --git a/lib/CodeGen/ShadowStackGC.cpp b/lib/CodeGen/ShadowStackGC.cpp index efe7c0a6a9d..10d0109d57c 100644 --- a/lib/CodeGen/ShadowStackGC.cpp +++ b/lib/CodeGen/ShadowStackGC.cpp @@ -229,10 +229,9 @@ Constant *ShadowStackGC::GetFrameMap(Function &F) { // to be a ModulePass (which means it cannot be in the 'llc' pipeline // (which uses a FunctionPassManager (which segfaults (not asserts) if // provided a ModulePass))). - Constant *GV = new GlobalVariable(*F.getContext(), FrameMap->getType(), true, + Constant *GV = new GlobalVariable(*F.getParent(), FrameMap->getType(), true, GlobalVariable::InternalLinkage, - FrameMap, "__gc_" + F.getName(), - F.getParent()); + FrameMap, "__gc_" + F.getName()); Constant *GEPIndices[2] = { ConstantInt::get(Type::Int32Ty, 0), ConstantInt::get(Type::Int32Ty, 0) }; @@ -292,10 +291,10 @@ bool ShadowStackGC::initializeCustomLowering(Module &M) { if (!Head) { // If the root chain does not exist, insert a new one with linkonce // linkage! - Head = new GlobalVariable(M.getContext(), StackEntryPtrTy, false, + Head = new GlobalVariable(M, StackEntryPtrTy, false, GlobalValue::LinkOnceAnyLinkage, Constant::getNullValue(StackEntryPtrTy), - "llvm_gc_root_chain", &M); + "llvm_gc_root_chain"); } else if (Head->hasExternalLinkage() && Head->isDeclaration()) { Head->setInitializer(Constant::getNullValue(StackEntryPtrTy)); Head->setLinkage(GlobalValue::LinkOnceAnyLinkage); diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp index cb2b9e46b6a..a69f724bcce 100644 --- a/lib/Linker/LinkModules.cpp +++ b/lib/Linker/LinkModules.cpp @@ -573,9 +573,9 @@ static bool LinkGlobals(Module *Dest, const Module *Src, // symbol over in the dest module... the initializer will be filled in // later by LinkGlobalInits. GlobalVariable *NewDGV = - new GlobalVariable(Context, SGV->getType()->getElementType(), + new GlobalVariable(*Dest, SGV->getType()->getElementType(), SGV->isConstant(), SGV->getLinkage(), /*init*/0, - SGV->getName(), Dest, false, + SGV->getName(), 0, false, SGV->getType()->getAddressSpace()); // Propagate alignment, visibility and section info. CopyGVAttributes(NewDGV, SGV); @@ -606,9 +606,9 @@ static bool LinkGlobals(Module *Dest, const Module *Src, // AppendingVars map. The name is cleared out so that no linkage is // performed. GlobalVariable *NewDGV = - new GlobalVariable(Context, SGV->getType()->getElementType(), + new GlobalVariable(*Dest, SGV->getType()->getElementType(), SGV->isConstant(), SGV->getLinkage(), /*init*/0, - "", Dest, false, + "", 0, false, SGV->getType()->getAddressSpace()); // Set alignment allowing CopyGVAttributes merge it with alignment of SGV. @@ -634,9 +634,9 @@ static bool LinkGlobals(Module *Dest, const Module *Src, // we are replacing may be a function (if a prototype, weak, etc) or a // global variable. GlobalVariable *NewDGV = - new GlobalVariable(Context, SGV->getType()->getElementType(), + new GlobalVariable(*Dest, SGV->getType()->getElementType(), SGV->isConstant(), NewLinkage, /*init*/0, - DGV->getName(), Dest, false, + DGV->getName(), 0, false, SGV->getType()->getAddressSpace()); // Propagate alignment, section, and visibility info. @@ -1157,8 +1157,8 @@ static bool LinkAppendingVars(Module *M, // Create the new global variable... GlobalVariable *NG = - new GlobalVariable(Context, NewType, G1->isConstant(), G1->getLinkage(), - /*init*/0, First->first, M, G1->isThreadLocal(), + new GlobalVariable(*M, NewType, G1->isConstant(), G1->getLinkage(), + /*init*/0, First->first, 0, G1->isThreadLocal(), G1->getType()->getAddressSpace()); // Propagate alignment, visibility and section info. diff --git a/lib/Transforms/IPO/ExtractGV.cpp b/lib/Transforms/IPO/ExtractGV.cpp index e26bd3a2a0a..b7c5ca3e6e0 100644 --- a/lib/Transforms/IPO/ExtractGV.cpp +++ b/lib/Transforms/IPO/ExtractGV.cpp @@ -108,9 +108,9 @@ namespace { } ArrayType *AT = Context->getArrayType(SBP, AUGs.size()); Constant *Init = Context->getConstantArray(AT, AUGs); - GlobalValue *gv = new GlobalVariable(M.getContext(), AT, false, + GlobalValue *gv = new GlobalVariable(M, AT, false, GlobalValue::AppendingLinkage, - Init, "llvm.used", &M); + Init, "llvm.used"); gv->setSection("llvm.metadata"); } diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp index eb13067ff0c..2cd8b6b79a0 100644 --- a/lib/Transforms/IPO/GlobalOpt.cpp +++ b/lib/Transforms/IPO/GlobalOpt.cpp @@ -490,11 +490,10 @@ static GlobalVariable *SRAGlobal(GlobalVariable *GV, const TargetData &TD, Context->getConstantInt(Type::Int32Ty, i), Context); assert(In && "Couldn't get element of initializer?"); - GlobalVariable *NGV = new GlobalVariable(*Context, STy->getElementType(i), - false, + GlobalVariable *NGV = new GlobalVariable(*Context, + STy->getElementType(i), false, GlobalVariable::InternalLinkage, In, GV->getName()+"."+utostr(i), - (Module *)NULL, GV->isThreadLocal(), GV->getType()->getAddressSpace()); Globals.insert(GV, NGV); @@ -527,13 +526,12 @@ static GlobalVariable *SRAGlobal(GlobalVariable *GV, const TargetData &TD, Context); assert(In && "Couldn't get element of initializer?"); - GlobalVariable *NGV = new GlobalVariable(*Context, STy->getElementType(), - false, + GlobalVariable *NGV = new GlobalVariable(*Context, + STy->getElementType(), false, GlobalVariable::InternalLinkage, In, GV->getName()+"."+utostr(i), - (Module *)NULL, GV->isThreadLocal(), - GV->getType()->getAddressSpace()); + GV->getType()->getAddressSpace()); Globals.insert(GV, NGV); NewGlobals.push_back(NGV); @@ -842,18 +840,17 @@ static GlobalVariable *OptimizeGlobalAddressOfMalloc(GlobalVariable *GV, // Create the new global variable. The contents of the malloc'd memory is // undefined, so initialize with an undef value. - Constant *Init = Context->getUndef(MI->getAllocatedType()); - GlobalVariable *NewGV = new GlobalVariable(*Context, MI->getAllocatedType(), - false, - GlobalValue::InternalLinkage, Init, - GV->getName()+".body", - (Module *)NULL, - GV->isThreadLocal()); // FIXME: This new global should have the alignment returned by malloc. Code // could depend on malloc returning large alignment (on the mac, 16 bytes) but // this would only guarantee some lower alignment. - GV->getParent()->getGlobalList().insert(GV, NewGV); - + Constant *Init = Context->getUndef(MI->getAllocatedType()); + GlobalVariable *NewGV = new GlobalVariable(*GV->getParent(), + MI->getAllocatedType(), false, + GlobalValue::InternalLinkage, Init, + GV->getName()+".body", + GV, + GV->isThreadLocal()); + // Anything that used the malloc now uses the global directly. MI->replaceAllUsesWith(NewGV); @@ -868,7 +865,7 @@ static GlobalVariable *OptimizeGlobalAddressOfMalloc(GlobalVariable *GV, new GlobalVariable(*Context, Type::Int1Ty, false, GlobalValue::InternalLinkage, Context->getConstantIntFalse(), GV->getName()+".init", - (Module *)NULL, GV->isThreadLocal()); + GV->isThreadLocal()); bool InitBoolUsed = false; // Loop over all uses of GV, processing them in turn. @@ -1286,8 +1283,8 @@ static GlobalVariable *PerformHeapAllocSRoA(GlobalVariable *GV, MallocInst *MI, const Type *PFieldTy = Context->getPointerTypeUnqual(FieldTy); GlobalVariable *NGV = - new GlobalVariable(*Context, PFieldTy, false, - GlobalValue::InternalLinkage, + new GlobalVariable(*GV->getParent(), + PFieldTy, false, GlobalValue::InternalLinkage, Context->getNullValue(PFieldTy), GV->getName() + ".f" + utostr(FieldNo), GV, GV->isThreadLocal()); @@ -1587,7 +1584,6 @@ static bool TryToShrinkGlobalToBoolean(GlobalVariable *GV, Constant *OtherVal, GlobalVariable *NewGV = new GlobalVariable(*Context, Type::Int1Ty, false, GlobalValue::InternalLinkage, Context->getConstantIntFalse(), GV->getName()+".b", - (Module *)NULL, GV->isThreadLocal()); GV->getParent()->getGlobalList().insert(GV, NewGV); @@ -1982,7 +1978,6 @@ static GlobalVariable *InstallGlobalCtors(GlobalVariable *GCL, GlobalVariable *NGV = new GlobalVariable(*Context, CA->getType(), GCL->isConstant(), GCL->getLinkage(), CA, "", - (Module *)NULL, GCL->isThreadLocal()); GCL->getParent()->getGlobalList().insert(GCL, NGV); NGV->takeName(GCL); diff --git a/lib/Transforms/Instrumentation/BlockProfiling.cpp b/lib/Transforms/Instrumentation/BlockProfiling.cpp index 6dfcc0b0512..440f59b37d7 100644 --- a/lib/Transforms/Instrumentation/BlockProfiling.cpp +++ b/lib/Transforms/Instrumentation/BlockProfiling.cpp @@ -65,8 +65,8 @@ bool FunctionProfiler::runOnModule(Module &M) { const Type *ATy = Context->getArrayType(Type::Int32Ty, NumFunctions); GlobalVariable *Counters = - new GlobalVariable(M.getContext(), ATy, false, GlobalValue::InternalLinkage, - Context->getNullValue(ATy), "FuncProfCounters", &M); + new GlobalVariable(M, ATy, false, GlobalValue::InternalLinkage, + Context->getNullValue(ATy), "FuncProfCounters"); // Instrument all of the functions... unsigned i = 0; @@ -110,8 +110,8 @@ bool BlockProfiler::runOnModule(Module &M) { const Type *ATy = Context->getArrayType(Type::Int32Ty, NumBlocks); GlobalVariable *Counters = - new GlobalVariable(M.getContext(), ATy, false, GlobalValue::InternalLinkage, - Context->getNullValue(ATy), "BlockProfCounters", &M); + new GlobalVariable(M, ATy, false, GlobalValue::InternalLinkage, + Context->getNullValue(ATy), "BlockProfCounters"); // Instrument all of the blocks... unsigned i = 0; diff --git a/lib/Transforms/Instrumentation/EdgeProfiling.cpp b/lib/Transforms/Instrumentation/EdgeProfiling.cpp index b625341273a..c3ec4b92f07 100644 --- a/lib/Transforms/Instrumentation/EdgeProfiling.cpp +++ b/lib/Transforms/Instrumentation/EdgeProfiling.cpp @@ -66,8 +66,8 @@ bool EdgeProfiler::runOnModule(Module &M) { const Type *ATy = Context->getArrayType(Type::Int32Ty, NumEdges); GlobalVariable *Counters = - new GlobalVariable(M.getContext(), ATy, false, GlobalValue::InternalLinkage, - Context->getNullValue(ATy), "EdgeProfCounters", &M); + new GlobalVariable(M, ATy, false, GlobalValue::InternalLinkage, + Context->getNullValue(ATy), "EdgeProfCounters"); // Instrument all of the edges... unsigned i = 0; diff --git a/lib/Transforms/Instrumentation/RSProfiling.cpp b/lib/Transforms/Instrumentation/RSProfiling.cpp index 0999a279ef0..51012209539 100644 --- a/lib/Transforms/Instrumentation/RSProfiling.cpp +++ b/lib/Transforms/Instrumentation/RSProfiling.cpp @@ -198,9 +198,8 @@ GlobalRandomCounter::GlobalRandomCounter(Module& M, const IntegerType* t, uint64_t resetval) : T(t) { ConstantInt* Init = M.getContext().getConstantInt(T, resetval); ResetValue = Init; - Counter = new GlobalVariable(M.getContext(), T, false, - GlobalValue::InternalLinkage, - Init, "RandomSteeringCounter", &M); + Counter = new GlobalVariable(M, T, false, GlobalValue::InternalLinkage, + Init, "RandomSteeringCounter"); } GlobalRandomCounter::~GlobalRandomCounter() {} @@ -238,9 +237,8 @@ GlobalRandomCounterOpt::GlobalRandomCounterOpt(Module& M, const IntegerType* t, : AI(0), T(t) { ConstantInt* Init = M.getContext().getConstantInt(T, resetval); ResetValue = Init; - Counter = new GlobalVariable(M.getContext(), T, false, - GlobalValue::InternalLinkage, - Init, "RandomSteeringCounter", &M); + Counter = new GlobalVariable(M, T, false, GlobalValue::InternalLinkage, + Init, "RandomSteeringCounter"); } GlobalRandomCounterOpt::~GlobalRandomCounterOpt() {} diff --git a/lib/Transforms/Scalar/SimplifyLibCalls.cpp b/lib/Transforms/Scalar/SimplifyLibCalls.cpp index 72308c80af3..80ef96a9025 100644 --- a/lib/Transforms/Scalar/SimplifyLibCalls.cpp +++ b/lib/Transforms/Scalar/SimplifyLibCalls.cpp @@ -1290,9 +1290,8 @@ struct VISIBILITY_HIDDEN PrintFOpt : public LibCallOptimization { // pass to be run after this pass, to merge duplicate strings. FormatStr.erase(FormatStr.end()-1); Constant *C = Context->getConstantArray(FormatStr, true); - C = new GlobalVariable(*Context, C->getType(), - true, GlobalVariable::InternalLinkage, - C, "str", Callee->getParent()); + C = new GlobalVariable(*Callee->getParent(), C->getType(), true, + GlobalVariable::InternalLinkage, C, "str"); EmitPutS(C, B); return CI->use_empty() ? (Value*)CI : Context->getConstantInt(CI->getType(), FormatStr.size()+1); diff --git a/lib/Transforms/Utils/CloneModule.cpp b/lib/Transforms/Utils/CloneModule.cpp index afebd5bd5d1..bb5f3e6f6eb 100644 --- a/lib/Transforms/Utils/CloneModule.cpp +++ b/lib/Transforms/Utils/CloneModule.cpp @@ -56,11 +56,11 @@ Module *llvm::CloneModule(const Module *M, // for (Module::const_global_iterator I = M->global_begin(), E = M->global_end(); I != E; ++I) { - GlobalVariable *GV = new GlobalVariable(M->getContext(), + GlobalVariable *GV = new GlobalVariable(*New, I->getType()->getElementType(), false, GlobalValue::ExternalLinkage, 0, - I->getName(), New); + I->getName()); GV->setAlignment(I->getAlignment()); ValueMap[I] = GV; } diff --git a/lib/Transforms/Utils/LowerInvoke.cpp b/lib/Transforms/Utils/LowerInvoke.cpp index 1eefdc4b3ca..8ef060a1f4a 100644 --- a/lib/Transforms/Utils/LowerInvoke.cpp +++ b/lib/Transforms/Utils/LowerInvoke.cpp @@ -139,11 +139,10 @@ bool LowerInvoke::doInitialization(Module &M) { // Now that we've done that, insert the jmpbuf list head global, unless it // already exists. if (!(JBListHead = M.getGlobalVariable("llvm.sjljeh.jblist", PtrJBList))) { - JBListHead = new GlobalVariable(M.getContext(), - PtrJBList, false, + JBListHead = new GlobalVariable(M, PtrJBList, false, GlobalValue::LinkOnceAnyLinkage, Context->getNullValue(PtrJBList), - "llvm.sjljeh.jblist", &M); + "llvm.sjljeh.jblist"); } // VisualStudio defines setjmp as _setjmp via #include / , @@ -183,10 +182,9 @@ void LowerInvoke::createAbortMessage(Module *M) { Context->getConstantArray("ERROR: Exception thrown, but not caught!\n"); AbortMessageLength = Msg->getNumOperands()-1; // don't include \0 - GlobalVariable *MsgGV = new GlobalVariable(M->getContext(), - Msg->getType(), true, + GlobalVariable *MsgGV = new GlobalVariable(*M, Msg->getType(), true, GlobalValue::InternalLinkage, - Msg, "abortmsg", M); + Msg, "abortmsg"); std::vector GEPIdx(2, Context->getNullValue(Type::Int32Ty)); AbortMessage = Context->getConstantExprGetElementPtr(MsgGV, &GEPIdx[0], 2); } else { @@ -197,10 +195,9 @@ void LowerInvoke::createAbortMessage(Module *M) { "Recompile program with -enable-correct-eh-support.\n"); AbortMessageLength = Msg->getNumOperands()-1; // don't include \0 - GlobalVariable *MsgGV = new GlobalVariable(M->getContext(), - Msg->getType(), true, + GlobalVariable *MsgGV = new GlobalVariable(*M, Msg->getType(), true, GlobalValue::InternalLinkage, - Msg, "abortmsg", M); + Msg, "abortmsg"); std::vector GEPIdx(2, Context->getNullValue(Type::Int32Ty)); AbortMessage = ConstantExpr::getGetElementPtr(MsgGV, &GEPIdx[0], 2); } diff --git a/lib/VMCore/Core.cpp b/lib/VMCore/Core.cpp index 1ac66ed660b..54773c3ee73 100644 --- a/lib/VMCore/Core.cpp +++ b/lib/VMCore/Core.cpp @@ -700,10 +700,8 @@ void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes) { /*--.. Operations on global variables ......................................--*/ LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name) { - LLVMContext &Context = unwrap(M)->getContext(); - return wrap(new GlobalVariable(Context, unwrap(Ty), false, - GlobalValue::ExternalLinkage, 0, Name, - unwrap(M))); + return wrap(new GlobalVariable(*unwrap(M), unwrap(Ty), false, + GlobalValue::ExternalLinkage, 0, Name)); } LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name) { diff --git a/lib/VMCore/Globals.cpp b/lib/VMCore/Globals.cpp index f8c10710529..b3087f7cc43 100644 --- a/lib/VMCore/Globals.cpp +++ b/lib/VMCore/Globals.cpp @@ -97,8 +97,7 @@ void GlobalValue::copyAttributesFrom(const GlobalValue *Src) { GlobalVariable::GlobalVariable(LLVMContext &Context, const Type *Ty, bool constant, LinkageTypes Link, Constant *InitVal, const std::string &Name, - Module *ParentModule, bool ThreadLocal, - unsigned AddressSpace) + bool ThreadLocal, unsigned AddressSpace) : GlobalValue(Context.getPointerType(Ty, AddressSpace), Value::GlobalVariableVal, OperandTraits::op_begin(this), @@ -111,18 +110,14 @@ GlobalVariable::GlobalVariable(LLVMContext &Context, const Type *Ty, } LeakDetector::addGarbageObject(this); - - if (ParentModule) - ParentModule->getGlobalList().push_back(this); } -GlobalVariable::GlobalVariable(LLVMContext &Context, const Type *Ty, - bool constant, LinkageTypes Link, - Constant *InitVal, const std::string &Name, +GlobalVariable::GlobalVariable(Module &M, const Type *Ty, bool constant, + LinkageTypes Link, Constant *InitVal, + const std::string &Name, GlobalVariable *Before, bool ThreadLocal, unsigned AddressSpace) - : GlobalValue(Context.getPointerType(Ty, AddressSpace), - Value::GlobalVariableVal, + : GlobalValue(PointerType::get(Ty, AddressSpace), Value::GlobalVariableVal, OperandTraits::op_begin(this), InitVal != 0, Link, Name), isConstantGlobal(constant), isThreadLocalSymbol(ThreadLocal) { @@ -136,6 +131,8 @@ GlobalVariable::GlobalVariable(LLVMContext &Context, const Type *Ty, if (Before) Before->getParent()->getGlobalList().insert(Before, this); + else + M.getGlobalList().push_back(this); } void GlobalVariable::setParent(Module *parent) { diff --git a/lib/VMCore/Module.cpp b/lib/VMCore/Module.cpp index 6f3de0257e4..87398489616 100644 --- a/lib/VMCore/Module.cpp +++ b/lib/VMCore/Module.cpp @@ -28,20 +28,17 @@ using namespace llvm; //===----------------------------------------------------------------------===// // Methods to implement the globals and functions lists. -// NOTE: It is ok to allocate the globals used for these methods from the -// global context, because all we ever do is use them to compare for equality. // GlobalVariable *ilist_traits::createSentinel() { - GlobalVariable *Ret = new GlobalVariable(getGlobalContext(), - Type::Int32Ty, false, - GlobalValue::ExternalLinkage); + GlobalVariable *Ret = new GlobalVariable(getGlobalContext(), Type::Int32Ty, + false, GlobalValue::ExternalLinkage); // This should not be garbage monitored. LeakDetector::removeGarbageObject(Ret); return Ret; } GlobalAlias *ilist_traits::createSentinel() { - GlobalAlias *Ret = new GlobalAlias(Type::Int32Ty, + GlobalAlias *Ret = new GlobalAlias(Type::Int32Ty, GlobalValue::ExternalLinkage); // This should not be garbage monitored. LeakDetector::removeGarbageObject(Ret); @@ -273,10 +270,9 @@ Constant *Module::getOrInsertGlobal(const std::string &Name, const Type *Ty) { if (GV == 0) { // Nope, add it GlobalVariable *New = - new GlobalVariable(getContext(), Ty, false, - GlobalVariable::ExternalLinkage, 0, Name); - GlobalList.push_back(New); - return New; // Return the new declaration. + new GlobalVariable(*this, Ty, false, GlobalVariable::ExternalLinkage, + 0, Name); + return New; // Return the new declaration. } // If the variable exists but has the wrong type, return a bitcast to the diff --git a/tools/bugpoint/ExtractFunction.cpp b/tools/bugpoint/ExtractFunction.cpp index 84eb1e7f743..6cd2d19b4f3 100644 --- a/tools/bugpoint/ExtractFunction.cpp +++ b/tools/bugpoint/ExtractFunction.cpp @@ -236,9 +236,9 @@ static void SplitStaticCtorDtor(const char *GlobalName, Module *M1, Module *M2, GV->eraseFromParent(); if (!M1Tors.empty()) { Constant *M1Init = GetTorInit(M1Tors); - new GlobalVariable(M1->getContext(), M1Init->getType(), false, + new GlobalVariable(*M1, M1Init->getType(), false, GlobalValue::AppendingLinkage, - M1Init, GlobalName, M1); + M1Init, GlobalName); } GV = M2->getNamedGlobal(GlobalName); @@ -248,9 +248,9 @@ static void SplitStaticCtorDtor(const char *GlobalName, Module *M1, Module *M2, GV->eraseFromParent(); if (!M2Tors.empty()) { Constant *M2Init = GetTorInit(M2Tors); - new GlobalVariable(M2->getContext(), M2Init->getType(), false, + new GlobalVariable(*M2, M2Init->getType(), false, GlobalValue::AppendingLinkage, - M2Init, GlobalName, M2); + M2Init, GlobalName); } } diff --git a/tools/bugpoint/Miscompilation.cpp b/tools/bugpoint/Miscompilation.cpp index 369f25a5161..a24ea777811 100644 --- a/tools/bugpoint/Miscompilation.cpp +++ b/tools/bugpoint/Miscompilation.cpp @@ -703,10 +703,9 @@ static void CleanupAndPrepareModules(BugDriver &BD, Module *&Test, // 1. Add a string constant with its name to the global file Constant *InitArray = ConstantArray::get(F->getName()); GlobalVariable *funcName = - new GlobalVariable(Safe->getContext(), - InitArray->getType(), true /*isConstant*/, + new GlobalVariable(*Safe, InitArray->getType(), true /*isConstant*/, GlobalValue::InternalLinkage, InitArray, - F->getName() + "_name", Safe); + F->getName() + "_name"); // 2. Use `GetElementPtr *funcName, 0, 0' to convert the string to an // sbyte* so it matches the signature of the resolver function. @@ -723,9 +722,9 @@ static void CleanupAndPrepareModules(BugDriver &BD, Module *&Test, // Create a new global to hold the cached function pointer. Constant *NullPtr = ConstantPointerNull::get(F->getType()); GlobalVariable *Cache = - new GlobalVariable(F->getParent()->getContext(), - F->getType(), false,GlobalValue::InternalLinkage, - NullPtr,F->getName()+".fpcache", F->getParent()); + new GlobalVariable(*F->getParent(), F->getType(), + false, GlobalValue::InternalLinkage, + NullPtr,F->getName()+".fpcache"); // Construct a new stub function that will re-route calls to F const FunctionType *FuncTy = F->getFunctionType();