From: Owen Anderson Date: Mon, 13 Jul 2009 04:10:07 +0000 (+0000) Subject: Update for LLVM API change. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=69243825cb5c91ec7207256aa57ae327cfaf8cb2;p=clang Update for LLVM API change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@75446 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp index 42b55f79bf..efc58f823f 100644 --- a/lib/CodeGen/CGBlocks.cpp +++ b/lib/CodeGen/CGBlocks.cpp @@ -501,7 +501,7 @@ BlockModule::GetAddrOfGlobalBlock(const BlockExpr *BE, const char * n) { llvm::Constant *DescriptorFields[2]; // Reserved - DescriptorFields[0] = llvm::Constant::getNullValue(UnsignedLongTy); + DescriptorFields[0] = getModule().getContext().getNullValue(UnsignedLongTy); // Block literal size. For global blocks we just use the size of the generic // block literal struct. @@ -542,7 +542,7 @@ BlockModule::GetAddrOfGlobalBlock(const BlockExpr *BE, const char * n) { llvm::ConstantInt::get(IntTy, BLOCK_IS_GLOBAL | BLOCK_HAS_DESCRIPTOR); // Reserved - LiteralFields[2] = llvm::Constant::getNullValue(IntTy); + LiteralFields[2] = getModule().getContext().getNullValue(IntTy); // Function LiteralFields[3] = Fn; diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index a919dfa2e3..f250bac63e 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -103,7 +103,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD, Value *NegOp = Builder.CreateNeg(ArgValue, "neg"); Value *CmpResult = - Builder.CreateICmpSGE(ArgValue, Constant::getNullValue(ArgValue->getType()), + Builder.CreateICmpSGE(ArgValue, + getLLVMContext().getNullValue(ArgValue->getType()), "abscond"); Value *Result = Builder.CreateSelect(CmpResult, ArgValue, NegOp, "abs"); @@ -150,7 +151,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD, const llvm::Type *ResultType = ConvertType(E->getType()); Value *Tmp = Builder.CreateAdd(Builder.CreateCall(F, ArgValue, "tmp"), ConstantInt::get(ArgType, 1), "tmp"); - Value *Zero = llvm::Constant::getNullValue(ArgType); + Value *Zero = getLLVMContext().getNullValue(ArgType); Value *IsZero = Builder.CreateICmpEQ(ArgValue, Zero, "iszero"); Value *Result = Builder.CreateSelect(IsZero, Zero, Tmp, "ffs"); if (Result->getType() != ResultType) @@ -505,7 +506,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD, Value *Ptr = EmitScalarExpr(E->getArg(0)); const llvm::Type *ElTy = cast(Ptr->getType())->getElementType(); - Builder.CreateStore(llvm::Constant::getNullValue(ElTy), Ptr, true); + Builder.CreateStore(getLLVMContext().getNullValue(ElTy), Ptr, true); return RValue::get(0); } diff --git a/lib/CodeGen/CGCXX.cpp b/lib/CodeGen/CGCXX.cpp index d3c1cd5659..47cb4fa553 100644 --- a/lib/CodeGen/CGCXX.cpp +++ b/lib/CodeGen/CGCXX.cpp @@ -40,7 +40,7 @@ CodeGenFunction::GenerateStaticCXXBlockVarDeclInit(const VarDecl &D, llvm::GlobalValue *GuardV = new llvm::GlobalVariable(CGM.getModule(), llvm::Type::Int64Ty, false, GV->getLinkage(), - llvm::Constant::getNullValue(llvm::Type::Int64Ty), + getLLVMContext().getNullValue(llvm::Type::Int64Ty), GuardVName.c_str()); // Load the first byte of the guard variable. @@ -49,7 +49,7 @@ CodeGenFunction::GenerateStaticCXXBlockVarDeclInit(const VarDecl &D, "tmp"); // Compare it against 0. - llvm::Value *nullValue = llvm::Constant::getNullValue(llvm::Type::Int8Ty); + llvm::Value *nullValue = getLLVMContext().getNullValue(llvm::Type::Int8Ty); llvm::Value *ICmp = Builder.CreateICmpEQ(V, nullValue , "tobool"); llvm::BasicBlock *InitBlock = createBasicBlock("init"); @@ -267,7 +267,7 @@ llvm::Value *CodeGenFunction::EmitCXXNewExpr(const CXXNewExpr *E) { llvm::Value *IsNull = Builder.CreateICmpEQ(NewPtr, - llvm::Constant::getNullValue(NewPtr->getType()), + getLLVMContext().getNullValue(NewPtr->getType()), "isnull"); Builder.CreateCondBr(IsNull, NewNull, NewNotNull); @@ -308,7 +308,7 @@ llvm::Value *CodeGenFunction::EmitCXXNewExpr(const CXXNewExpr *E) { llvm::PHINode *PHI = Builder.CreatePHI(NewPtr->getType()); PHI->reserveOperandSpace(2); PHI->addIncoming(NewPtr, NewNotNull); - PHI->addIncoming(llvm::Constant::getNullValue(NewPtr->getType()), NewNull); + PHI->addIncoming(getLLVMContext().getNullValue(NewPtr->getType()), NewNull); NewPtr = PHI; } diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp index 8278e66e6d..d9766d6af7 100644 --- a/lib/CodeGen/CGDecl.cpp +++ b/lib/CodeGen/CGDecl.cpp @@ -106,7 +106,7 @@ CodeGenFunction::CreateStaticBlockVarDecl(const VarDecl &D, const llvm::Type *LTy = CGM.getTypes().ConvertTypeForMem(Ty); return new llvm::GlobalVariable(CGM.getModule(), LTy, Ty.isConstant(getContext()), Linkage, - llvm::Constant::getNullValue(LTy), Name, + getLLVMContext().getNullValue(LTy), Name, 0, D.isThreadSpecified(), Ty.getAddressSpace()); } diff --git a/lib/CodeGen/CGExprAgg.cpp b/lib/CodeGen/CGExprAgg.cpp index 46ccdd8a7d..39351d850c 100644 --- a/lib/CodeGen/CGExprAgg.cpp +++ b/lib/CodeGen/CGExprAgg.cpp @@ -360,7 +360,7 @@ void AggExprEmitter::EmitInitializationToLValue(Expr* E, LValue LV) { void AggExprEmitter::EmitNullInitializationToLValue(LValue LV, QualType T) { if (!CGF.hasAggregateLLVMType(T)) { // For non-aggregates, we can store zero - llvm::Value *Null = llvm::Constant::getNullValue(CGF.ConvertType(T)); + llvm::Value *Null = CGF.getLLVMContext().getNullValue(CGF.ConvertType(T)); CGF.EmitStoreThroughLValue(RValue::get(Null), LV, T); } else { // Otherwise, just memset the whole thing to zero. This is legal diff --git a/lib/CodeGen/CGExprComplex.cpp b/lib/CodeGen/CGExprComplex.cpp index 3555c8c9b6..c4aaa1f288 100644 --- a/lib/CodeGen/CGExprComplex.cpp +++ b/lib/CodeGen/CGExprComplex.cpp @@ -181,13 +181,15 @@ public: ComplexPairTy VisitCXXZeroInitValueExpr(CXXZeroInitValueExpr *E) { assert(E->getType()->isAnyComplexType() && "Expected complex type!"); QualType Elem = E->getType()->getAsComplexType()->getElementType(); - llvm::Constant *Null = llvm::Constant::getNullValue(CGF.ConvertType(Elem)); + llvm::Constant *Null = + CGF.getLLVMContext().getNullValue(CGF.ConvertType(Elem)); return ComplexPairTy(Null, Null); } ComplexPairTy VisitImplicitValueInitExpr(ImplicitValueInitExpr *E) { assert(E->getType()->isAnyComplexType() && "Expected complex type!"); QualType Elem = E->getType()->getAsComplexType()->getElementType(); - llvm::Constant *Null = llvm::Constant::getNullValue(CGF.ConvertType(Elem)); + llvm::Constant *Null = + CGF.getLLVMContext().getNullValue(CGF.ConvertType(Elem)); return ComplexPairTy(Null, Null); } @@ -312,7 +314,8 @@ ComplexPairTy ComplexExprEmitter::VisitExpr(Expr *E) { ComplexPairTy ComplexExprEmitter:: VisitImaginaryLiteral(const ImaginaryLiteral *IL) { llvm::Value *Imag = CGF.EmitScalarExpr(IL->getSubExpr()); - return ComplexPairTy(llvm::Constant::getNullValue(Imag->getType()), Imag); + return + ComplexPairTy(CGF.getLLVMContext().getNullValue(Imag->getType()), Imag); } @@ -359,7 +362,7 @@ ComplexPairTy ComplexExprEmitter::EmitCast(Expr *Op, QualType DestTy) { Elt = CGF.EmitScalarConversion(Elt, Op->getType(), DestTy); // Return (realval, 0). - return ComplexPairTy(Elt, llvm::Constant::getNullValue(Elt->getType())); + return ComplexPairTy(Elt, CGF.getLLVMContext().getNullValue(Elt->getType())); } ComplexPairTy ComplexExprEmitter::VisitPrePostIncDec(const UnaryOperator *E, @@ -694,7 +697,7 @@ ComplexPairTy ComplexExprEmitter::VisitInitListExpr(InitListExpr *E) { // Empty init list intializes to null QualType Ty = E->getType()->getAsComplexType()->getElementType(); const llvm::Type* LTy = CGF.ConvertType(Ty); - llvm::Value* zeroConstant = llvm::Constant::getNullValue(LTy); + llvm::Value* zeroConstant = CGF.getLLVMContext().getNullValue(LTy); return ComplexPairTy(zeroConstant, zeroConstant); } diff --git a/lib/CodeGen/CGExprConstant.cpp b/lib/CodeGen/CGExprConstant.cpp index 090e314fa3..a8e700678f 100644 --- a/lib/CodeGen/CGExprConstant.cpp +++ b/lib/CodeGen/CGExprConstant.cpp @@ -106,7 +106,7 @@ public: // Initialize remaining array elements. // FIXME: This doesn't handle member pointers correctly! for (; i < NumElements; ++i) - Elts.push_back(llvm::Constant::getNullValue(ElemTy)); + Elts.push_back(CGM.getLLVMContext().getNullValue(ElemTy)); if (RewriteType) { // FIXME: Try to avoid packing the array @@ -193,7 +193,7 @@ public: // FIXME: This doesn't handle member pointers correctly! for (unsigned i = 0; i < SType->getNumElements(); ++i) { const llvm::Type *FieldTy = SType->getElementType(i); - Elts.push_back(llvm::Constant::getNullValue(FieldTy)); + Elts.push_back(CGM.getLLVMContext().getNullValue(FieldTy)); } // Copy initializer elements. Skip padding fields. @@ -242,7 +242,7 @@ public: unsigned CurSize = CGM.getTargetData().getTypeAllocSize(C->getType()); unsigned TotalSize = CGM.getTargetData().getTypeAllocSize(Ty); while (CurSize < TotalSize) { - Elts.push_back(llvm::Constant::getNullValue(llvm::Type::Int8Ty)); + Elts.push_back(CGM.getLLVMContext().getNullValue(llvm::Type::Int8Ty)); Types.push_back(llvm::Type::Int8Ty); CurSize++; } @@ -268,13 +268,14 @@ public: Field != FieldEnd; ++Field) assert(Field->isUnnamedBitfield() && "Only unnamed bitfields allowed"); #endif - return llvm::Constant::getNullValue(Ty); + return CGM.getLLVMContext().getNullValue(Ty); } if (curField->isBitField()) { // Create a dummy struct for bit-field insertion unsigned NumElts = CGM.getTargetData().getTypeAllocSize(Ty); - llvm::Constant* NV = llvm::Constant::getNullValue(llvm::Type::Int8Ty); + llvm::Constant* NV = + CGM.getLLVMContext().getNullValue(llvm::Type::Int8Ty); std::vector Elts(NumElts, NV); InsertBitfieldIntoStruct(Elts, curField, ILE->getInit(0)); @@ -314,7 +315,7 @@ public: } for (; i < NumElements; ++i) - Elts.push_back(llvm::Constant::getNullValue(ElemTy)); + Elts.push_back(CGM.getLLVMContext().getNullValue(ElemTy)); return llvm::ConstantVector::get(VType, Elts); } @@ -582,5 +583,5 @@ llvm::Constant *CodeGenModule::EmitConstantExpr(const Expr *E, llvm::Constant *CodeGenModule::EmitNullConstant(QualType T) { // Always return an LLVM null constant for now; this will change when we // get support for IRGen of member pointers. - return llvm::Constant::getNullValue(getTypes().ConvertType(T)); + return getLLVMContext().getNullValue(getTypes().ConvertType(T)); } diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index 94d0789a6f..23b68c3cc8 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/lib/CodeGen/CGExprScalar.cpp @@ -119,10 +119,10 @@ public: return llvm::ConstantInt::get(ConvertType(E->getType()), E->getValue()); } Value *VisitCXXZeroInitValueExpr(const CXXZeroInitValueExpr *E) { - return llvm::Constant::getNullValue(ConvertType(E->getType())); + return CGF.getLLVMContext().getNullValue(ConvertType(E->getType())); } Value *VisitGNUNullExpr(const GNUNullExpr *E) { - return llvm::Constant::getNullValue(ConvertType(E->getType())); + return CGF.getLLVMContext().getNullValue(ConvertType(E->getType())); } Value *VisitTypesCompatibleExpr(const TypesCompatibleExpr *E) { return llvm::ConstantInt::get(ConvertType(E->getType()), @@ -211,7 +211,7 @@ public: // Emit remaining default initializers for (/* Do not initialize i*/; i < NumVectorElements; ++i) { Value *Idx = llvm::ConstantInt::get(llvm::Type::Int32Ty, i); - llvm::Value *NewV = llvm::Constant::getNullValue(ElementType); + llvm::Value *NewV = CGF.getLLVMContext().getNullValue(ElementType); V = Builder.CreateInsertElement(V, NewV, Idx); } @@ -219,7 +219,7 @@ public: } Value *VisitImplicitValueInitExpr(const ImplicitValueInitExpr *E) { - return llvm::Constant::getNullValue(ConvertType(E->getType())); + return CGF.getLLVMContext().getNullValue(ConvertType(E->getType())); } Value *VisitImplicitCastExpr(const ImplicitCastExpr *E); Value *VisitCastExpr(const CastExpr *E) { @@ -385,7 +385,7 @@ Value *ScalarExprEmitter::EmitConversionToBool(Value *Src, QualType SrcType) { if (SrcType->isRealFloatingType()) { // Compare against 0.0 for fp scalars. - llvm::Value *Zero = llvm::Constant::getNullValue(Src->getType()); + llvm::Value *Zero = CGF.getLLVMContext().getNullValue(Src->getType()); return Builder.CreateFCmpUNE(Src, Zero, "tobool"); } @@ -408,7 +408,7 @@ Value *ScalarExprEmitter::EmitConversionToBool(Value *Src, QualType SrcType) { } // Compare against an integer or pointer null. - llvm::Value *Zero = llvm::Constant::getNullValue(Src->getType()); + llvm::Value *Zero = CGF.getLLVMContext().getNullValue(Src->getType()); return Builder.CreateICmpNE(Src, Zero, "tobool"); } @@ -808,7 +808,7 @@ Value *ScalarExprEmitter::VisitUnaryImag(const UnaryOperator *E) { CGF.EmitLValue(Op); else CGF.EmitScalarExpr(Op, true); - return llvm::Constant::getNullValue(ConvertType(E->getType())); + return CGF.getLLVMContext().getNullValue(ConvertType(E->getType())); } Value *ScalarExprEmitter::VisitUnaryOffsetOf(const UnaryOperator *E) @@ -1279,7 +1279,7 @@ Value *ScalarExprEmitter::VisitBinLAnd(const BinaryOperator *E) { // 0 && RHS: If it is safe, just elide the RHS, and return 0. if (!CGF.ContainsLabel(E->getRHS())) - return llvm::Constant::getNullValue(CGF.LLVMIntTy); + return CGF.getLLVMContext().getNullValue(CGF.LLVMIntTy); } llvm::BasicBlock *ContBlock = CGF.createBasicBlock("land.end"); diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp index 5d378410f8..4777bc77ea 100644 --- a/lib/CodeGen/CGObjC.cpp +++ b/lib/CodeGen/CGObjC.cpp @@ -488,7 +488,7 @@ void CodeGenFunction::EmitObjCForCollectionStmt(const ObjCForCollectionStmt &S){ llvm::BasicBlock *SetStartMutations = createBasicBlock("setstartmutations"); llvm::Value *Limit = Builder.CreateLoad(LimitPtr); - llvm::Value *Zero = llvm::Constant::getNullValue(UnsignedLongLTy); + llvm::Value *Zero = getLLVMContext().getNullValue(UnsignedLongLTy); llvm::Value *IsZero = Builder.CreateICmpEQ(Limit, Zero, "iszero"); Builder.CreateCondBr(IsZero, NoElements, SetStartMutations); @@ -618,7 +618,7 @@ void CodeGenFunction::EmitObjCForCollectionStmt(const ObjCForCollectionStmt &S){ LValue LV = EmitLValue(cast(S.getElement())); // Set the value to null. - Builder.CreateStore(llvm::Constant::getNullValue(ConvertType(ElementTy)), + Builder.CreateStore(getLLVMContext().getNullValue(ConvertType(ElementTy)), LV.getAddress()); } diff --git a/lib/CodeGen/CGObjCGNU.cpp b/lib/CodeGen/CGObjCGNU.cpp index a75b39af20..978b56aef9 100644 --- a/lib/CodeGen/CGObjCGNU.cpp +++ b/lib/CodeGen/CGObjCGNU.cpp @@ -1049,7 +1049,7 @@ llvm::Function *CGObjCGNU::ModuleInitFunction() { llvm::ArrayType::get(StaticsListPtrTy, 2); Elements.clear(); Elements.push_back(Statics); - Elements.push_back(llvm::Constant::getNullValue(StaticsListPtrTy)); + Elements.push_back(TheModule.getContext().getNullValue(StaticsListPtrTy)); Statics = MakeGlobal(StaticsListArrayTy, Elements, ".objc_statics_ptr"); Statics = llvm::ConstantExpr::getBitCast(Statics, PtrTy); } diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index 699fb9aa19..d3a0fc6e54 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/lib/CodeGen/CGObjCMac.cpp @@ -23,6 +23,7 @@ #include "clang/Basic/LangOptions.h" #include "llvm/Intrinsics.h" +#include "llvm/LLVMContext.h" #include "llvm/Module.h" #include "llvm/ADT/DenseSet.h" #include "llvm/Target/TargetData.h" @@ -764,6 +765,7 @@ public: protected: CodeGen::CodeGenModule &CGM; + llvm::LLVMContext &VMContext; // FIXME! May not be needing this after all. unsigned ObjCABI; @@ -925,7 +927,8 @@ protected: virtual void MergeMetadataGlobals(std::vector &UsedArray); public: - CGObjCCommonMac(CodeGen::CodeGenModule &cgm) : CGM(cgm) + CGObjCCommonMac(CodeGen::CodeGenModule &cgm) : + CGM(cgm), VMContext(cgm.getLLVMContext()) { } virtual llvm::Constant *GenerateConstantString(const ObjCStringLiteral *SL); @@ -1718,7 +1721,7 @@ CGObjCMac::EmitProtocolExtension(const ObjCProtocolDecl *PD, // Return null if no extension bits are used. if (Values[1]->isNullValue() && Values[2]->isNullValue() && Values[3]->isNullValue()) - return llvm::Constant::getNullValue(ObjCTypes.ProtocolExtensionPtrTy); + return VMContext.getNullValue(ObjCTypes.ProtocolExtensionPtrTy); llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.ProtocolExtensionTy, Values); @@ -1747,14 +1750,14 @@ CGObjCMac::EmitProtocolList(const std::string &Name, // Just return null for empty protocol lists if (ProtocolRefs.empty()) - return llvm::Constant::getNullValue(ObjCTypes.ProtocolListPtrTy); + return VMContext.getNullValue(ObjCTypes.ProtocolListPtrTy); // This list is null terminated. - ProtocolRefs.push_back(llvm::Constant::getNullValue(ObjCTypes.ProtocolPtrTy)); + ProtocolRefs.push_back(VMContext.getNullValue(ObjCTypes.ProtocolPtrTy)); std::vector Values(3); // This field is only used by the runtime. - Values[0] = llvm::Constant::getNullValue(ObjCTypes.ProtocolListPtrTy); + Values[0] = VMContext.getNullValue(ObjCTypes.ProtocolListPtrTy); Values[1] = llvm::ConstantInt::get(ObjCTypes.LongTy, ProtocolRefs.size() - 1); Values[2] = llvm::ConstantArray::get(llvm::ArrayType::get(ObjCTypes.ProtocolPtrTy, @@ -1796,7 +1799,7 @@ llvm::Constant *CGObjCCommonMac::EmitPropertyList(const std::string &Name, // Return null for empty list. if (Properties.empty()) - return llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy); + return VMContext.getNullValue(ObjCTypes.PropertyListPtrTy); unsigned PropertySize = CGM.getTargetData().getTypeAllocSize(ObjCTypes.PropertyTy); @@ -1838,7 +1841,7 @@ llvm::Constant *CGObjCMac::EmitMethodDescList(const std::string &Name, const ConstantVector &Methods) { // Return null for empty list. if (Methods.empty()) - return llvm::Constant::getNullValue(ObjCTypes.MethodDescriptionListPtrTy); + return VMContext.getNullValue(ObjCTypes.MethodDescriptionListPtrTy); std::vector Values(2); Values[0] = llvm::ConstantInt::get(ObjCTypes.IntTy, Methods.size()); @@ -1907,7 +1910,7 @@ void CGObjCMac::GenerateCategory(const ObjCCategoryImplDecl *OCD) { Category->protocol_begin(), Category->protocol_end()); } else { - Values[4] = llvm::Constant::getNullValue(ObjCTypes.ProtocolListPtrTy); + Values[4] = VMContext.getNullValue(ObjCTypes.ProtocolListPtrTy); } Values[5] = llvm::ConstantInt::get(ObjCTypes.IntTy, Size); @@ -1916,7 +1919,7 @@ void CGObjCMac::GenerateCategory(const ObjCCategoryImplDecl *OCD) { Values[6] = EmitPropertyList(std::string("\01l_OBJC_$_PROP_LIST_") + ExtName, OCD, Category, ObjCTypes); } else { - Values[6] = llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy); + Values[6] = VMContext.getNullValue(ObjCTypes.PropertyListPtrTy); } llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.CategoryTy, @@ -2016,7 +2019,7 @@ void CGObjCMac::GenerateClass(const ObjCImplementationDecl *ID) { llvm::ConstantExpr::getBitCast(GetClassName(Super->getIdentifier()), ObjCTypes.ClassPtrTy); } else { - Values[ 1] = llvm::Constant::getNullValue(ObjCTypes.ClassPtrTy); + Values[ 1] = VMContext.getNullValue(ObjCTypes.ClassPtrTy); } Values[ 2] = GetClassName(ID->getIdentifier()); // Version is always 0. @@ -2029,7 +2032,7 @@ void CGObjCMac::GenerateClass(const ObjCImplementationDecl *ID) { "__OBJC,__inst_meth,regular,no_dead_strip", InstanceMethods); // cache is always NULL. - Values[ 8] = llvm::Constant::getNullValue(ObjCTypes.CachePtrTy); + Values[ 8] = VMContext.getNullValue(ObjCTypes.CachePtrTy); Values[ 9] = Protocols; Values[10] = BuildIvarLayout(ID, true); Values[11] = EmitClassExtension(ID); @@ -2068,7 +2071,7 @@ llvm::Constant *CGObjCMac::EmitMetaClass(const ObjCImplementationDecl *ID, llvm::ConstantExpr::getBitCast(GetClassName(Super->getIdentifier()), ObjCTypes.ClassPtrTy); } else { - Values[ 1] = llvm::Constant::getNullValue(ObjCTypes.ClassPtrTy); + Values[ 1] = VMContext.getNullValue(ObjCTypes.ClassPtrTy); } Values[ 2] = GetClassName(ID->getIdentifier()); // Version is always 0. @@ -2081,12 +2084,12 @@ llvm::Constant *CGObjCMac::EmitMetaClass(const ObjCImplementationDecl *ID, "__OBJC,__cls_meth,regular,no_dead_strip", Methods); // cache is always NULL. - Values[ 8] = llvm::Constant::getNullValue(ObjCTypes.CachePtrTy); + Values[ 8] = VMContext.getNullValue(ObjCTypes.CachePtrTy); Values[ 9] = Protocols; // ivar_layout for metaclass is always NULL. - Values[10] = llvm::Constant::getNullValue(ObjCTypes.Int8PtrTy); + Values[10] = VMContext.getNullValue(ObjCTypes.Int8PtrTy); // The class extension is always unused for metaclasses. - Values[11] = llvm::Constant::getNullValue(ObjCTypes.ClassExtensionPtrTy); + Values[11] = VMContext.getNullValue(ObjCTypes.ClassExtensionPtrTy); llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.ClassTy, Values); @@ -2157,7 +2160,7 @@ CGObjCMac::EmitClassExtension(const ObjCImplementationDecl *ID) { // Return null if no extension bits are used. if (Values[1]->isNullValue() && Values[2]->isNullValue()) - return llvm::Constant::getNullValue(ObjCTypes.ClassExtensionPtrTy); + return VMContext.getNullValue(ObjCTypes.ClassExtensionPtrTy); llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.ClassExtensionTy, Values); @@ -2188,7 +2191,7 @@ llvm::Constant *CGObjCMac::EmitIvarList(const ObjCImplementationDecl *ID, // the cleanest solution would be to make up an ObjCInterfaceDecl // for the class. if (ForClass) - return llvm::Constant::getNullValue(ObjCTypes.IvarListPtrTy); + return VMContext.getNullValue(ObjCTypes.IvarListPtrTy); ObjCInterfaceDecl *OID = const_cast(ID->getClassInterface()); @@ -2210,7 +2213,7 @@ llvm::Constant *CGObjCMac::EmitIvarList(const ObjCImplementationDecl *ID, // Return null for empty list. if (Ivars.empty()) - return llvm::Constant::getNullValue(ObjCTypes.IvarListPtrTy); + return VMContext.getNullValue(ObjCTypes.IvarListPtrTy); std::vector Values(2); Values[0] = llvm::ConstantInt::get(ObjCTypes.IntTy, Ivars.size()); @@ -2269,10 +2272,10 @@ llvm::Constant *CGObjCMac::EmitMethodList(const std::string &Name, const ConstantVector &Methods) { // Return null for empty list. if (Methods.empty()) - return llvm::Constant::getNullValue(ObjCTypes.MethodListPtrTy); + return VMContext.getNullValue(ObjCTypes.MethodListPtrTy); std::vector Values(3); - Values[0] = llvm::Constant::getNullValue(ObjCTypes.Int8PtrTy); + Values[0] = VMContext.getNullValue(ObjCTypes.Int8PtrTy); Values[1] = llvm::ConstantInt::get(ObjCTypes.IntTy, Methods.size()); llvm::ArrayType *AT = llvm::ArrayType::get(ObjCTypes.MethodTy, Methods.size()); @@ -2889,11 +2892,11 @@ llvm::Constant *CGObjCMac::EmitModuleSymbols() { // Return null if no symbols were defined. if (!NumClasses && !NumCategories) - return llvm::Constant::getNullValue(ObjCTypes.SymtabPtrTy); + return VMContext.getNullValue(ObjCTypes.SymtabPtrTy); std::vector Values(5); Values[0] = llvm::ConstantInt::get(ObjCTypes.LongTy, 0); - Values[1] = llvm::Constant::getNullValue(ObjCTypes.SelectorPtrTy); + Values[1] = VMContext.getNullValue(ObjCTypes.SelectorPtrTy); Values[2] = llvm::ConstantInt::get(ObjCTypes.ShortTy, NumClasses); Values[3] = llvm::ConstantInt::get(ObjCTypes.ShortTy, NumCategories); @@ -2973,7 +2976,7 @@ llvm::Constant *CGObjCCommonMac::GetClassName(IdentifierInfo *Ident) { /// ivar layout bitmap. llvm::Constant *CGObjCCommonMac::GetIvarLayoutName(IdentifierInfo *Ident, const ObjCCommonTypesHelper &ObjCTypes) { - return llvm::Constant::getNullValue(ObjCTypes.Int8PtrTy); + return VMContext.getNullValue(ObjCTypes.Int8PtrTy); } static QualType::GCAttrTypes GetGCAttrTypeForType(ASTContext &Ctx, @@ -3178,7 +3181,7 @@ llvm::Constant *CGObjCCommonMac::BuildIvarLayout( unsigned int WordsToScan, WordsToSkip; const llvm::Type *PtrTy = llvm::PointerType::getUnqual(llvm::Type::Int8Ty); if (CGM.getLangOptions().getGCMode() == LangOptions::NonGC) - return llvm::Constant::getNullValue(PtrTy); + return VMContext.getNullValue(PtrTy); llvm::SmallVector RecFields; const ObjCInterfaceDecl *OI = OMD->getClassInterface(); @@ -3191,14 +3194,14 @@ llvm::Constant *CGObjCCommonMac::BuildIvarLayout( RecFields.push_back(cast(Ivars[k])); if (RecFields.empty()) - return llvm::Constant::getNullValue(PtrTy); + return VMContext.getNullValue(PtrTy); SkipIvars.clear(); IvarsInfo.clear(); BuildAggrIvarLayout(OMD, 0, 0, RecFields, 0, ForStrongLayout, hasUnion); if (IvarsInfo.empty()) - return llvm::Constant::getNullValue(PtrTy); + return VMContext.getNullValue(PtrTy); // Sort on byte position in case we encounterred a union nested in // the ivar list. @@ -3339,7 +3342,7 @@ llvm::Constant *CGObjCCommonMac::BuildIvarLayout( // if ivar_layout bitmap is all 1 bits (nothing skipped) then use NULL as // final layout. if (ForStrongLayout && !BytesSkipped) - return llvm::Constant::getNullValue(PtrTy); + return VMContext.getNullValue(PtrTy); llvm::GlobalVariable * Entry = CreateMetadataVar("\01L_OBJC_CLASS_NAME_", llvm::ConstantArray::get(BitMap.c_str()), "__TEXT,__cstring,cstring_literals", @@ -3464,11 +3467,11 @@ void CGObjCMac::FinishModule() { continue; std::vector Values(5); - Values[0] = llvm::Constant::getNullValue(ObjCTypes.ProtocolExtensionPtrTy); + Values[0] = VMContext.getNullValue(ObjCTypes.ProtocolExtensionPtrTy); Values[1] = GetClassName(i->first); - Values[2] = llvm::Constant::getNullValue(ObjCTypes.ProtocolListPtrTy); + Values[2] = VMContext.getNullValue(ObjCTypes.ProtocolListPtrTy); Values[3] = Values[4] = - llvm::Constant::getNullValue(ObjCTypes.MethodDescriptionListPtrTy); + VMContext.getNullValue(ObjCTypes.MethodDescriptionListPtrTy); i->second->setLinkage(llvm::GlobalValue::InternalLinkage); i->second->setInitializer(llvm::ConstantStruct::get(ObjCTypes.ProtocolTy, Values)); @@ -4241,13 +4244,13 @@ llvm::GlobalVariable * CGObjCNonFragileABIMac::BuildClassRoTInitializer( OID->protocol_end()); if (flags & CLS_META) - Values[ 7] = llvm::Constant::getNullValue(ObjCTypes.IvarListnfABIPtrTy); + Values[ 7] = VMContext.getNullValue(ObjCTypes.IvarListnfABIPtrTy); else Values[ 7] = EmitIvarList(ID); Values[ 8] = (flags & CLS_META) ? GetIvarLayoutName(0, ObjCTypes) : BuildIvarLayout(ID, false); if (flags & CLS_META) - Values[ 9] = llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy); + Values[ 9] = VMContext.getNullValue(ObjCTypes.PropertyListPtrTy); else Values[ 9] = EmitPropertyList( @@ -4289,7 +4292,7 @@ llvm::GlobalVariable * CGObjCNonFragileABIMac::BuildClassMetaData( Values[0] = IsAGV; Values[1] = SuperClassGV ? SuperClassGV - : llvm::Constant::getNullValue(ObjCTypes.ClassnfABIPtrTy); + : VMContext.getNullValue(ObjCTypes.ClassnfABIPtrTy); Values[2] = ObjCEmptyCacheVar; // &ObjCEmptyCacheVar Values[3] = ObjCEmptyVtableVar; // &ObjCEmptyVtableVar Values[4] = ClassRoGV; // &CLASS_RO_GV @@ -4524,8 +4527,8 @@ void CGObjCNonFragileABIMac::GenerateCategory(const ObjCCategoryImplDecl *OCD) { OCD, Category, ObjCTypes); } else { - Values[4] = llvm::Constant::getNullValue(ObjCTypes.ProtocolListnfABIPtrTy); - Values[5] = llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy); + Values[4] = VMContext.getNullValue(ObjCTypes.ProtocolListnfABIPtrTy); + Values[5] = VMContext.getNullValue(ObjCTypes.PropertyListPtrTy); } llvm::Constant *Init = @@ -4580,7 +4583,7 @@ llvm::Constant *CGObjCNonFragileABIMac::EmitMethodList( const ConstantVector &Methods) { // Return null for empty list. if (Methods.empty()) - return llvm::Constant::getNullValue(ObjCTypes.MethodListnfABIPtrTy); + return VMContext.getNullValue(ObjCTypes.MethodListnfABIPtrTy); std::vector Values(3); // sizeof(struct _objc_method) @@ -4709,7 +4712,7 @@ llvm::Constant *CGObjCNonFragileABIMac::EmitIvarList( } // Return null for empty list. if (Ivars.empty()) - return llvm::Constant::getNullValue(ObjCTypes.IvarListnfABIPtrTy); + return VMContext.getNullValue(ObjCTypes.IvarListnfABIPtrTy); std::vector Values(3); unsigned Size = CGM.getTargetData().getTypeAllocSize(ObjCTypes.IvarnfABITy); Values[0] = llvm::ConstantInt::get(ObjCTypes.IntTy, Size); @@ -4807,7 +4810,7 @@ llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocol( std::vector Values(10); // isa is NULL - Values[0] = llvm::Constant::getNullValue(ObjCTypes.ObjectPtrTy); + Values[0] = VMContext.getNullValue(ObjCTypes.ObjectPtrTy); Values[1] = GetClassName(PD->getIdentifier()); Values[2] = EmitProtocolList( "\01l_OBJC_$_PROTOCOL_REFS_" + PD->getNameAsString(), @@ -4835,7 +4838,7 @@ llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocol( uint32_t Size = CGM.getTargetData().getTypeAllocSize(ObjCTypes.ProtocolnfABITy); Values[8] = llvm::ConstantInt::get(ObjCTypes.IntTy, Size); - Values[9] = llvm::Constant::getNullValue(ObjCTypes.IntTy); + Values[9] = VMContext.getNullValue(ObjCTypes.IntTy); llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.ProtocolnfABITy, Values); @@ -4888,7 +4891,7 @@ CGObjCNonFragileABIMac::EmitProtocolList(const std::string &Name, // Just return null for empty protocol lists if (begin == end) - return llvm::Constant::getNullValue(ObjCTypes.ProtocolListnfABIPtrTy); + return VMContext.getNullValue(ObjCTypes.ProtocolListnfABIPtrTy); // FIXME: We shouldn't need to do this lookup here, should we? llvm::GlobalVariable *GV = CGM.getModule().getGlobalVariable(Name, true); @@ -4900,7 +4903,7 @@ CGObjCNonFragileABIMac::EmitProtocolList(const std::string &Name, ProtocolRefs.push_back(GetProtocolRef(*begin)); // Implemented??? // This list is null terminated. - ProtocolRefs.push_back(llvm::Constant::getNullValue( + ProtocolRefs.push_back(VMContext.getNullValue( ObjCTypes.ProtocolnfABIPtrTy)); std::vector Values(2); @@ -4937,7 +4940,7 @@ CGObjCNonFragileABIMac::GetMethodDescriptionConstant(const ObjCMethodDecl *MD) { ObjCTypes.SelectorPtrTy); Desc[1] = GetMethodVarType(MD); // Protocol methods have no implementation. So, this entry is always NULL. - Desc[2] = llvm::Constant::getNullValue(ObjCTypes.Int8PtrTy); + Desc[2] = VMContext.getNullValue(ObjCTypes.Int8PtrTy); return llvm::ConstantStruct::get(ObjCTypes.MethodTy, Desc); } @@ -5439,7 +5442,7 @@ CGObjCNonFragileABIMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF, // catch(...) always matches. if (!CatchDecl) { // Use i8* null here to signal this is a catch all, not a cleanup. - llvm::Value *Null = llvm::Constant::getNullValue(ObjCTypes.Int8PtrTy); + llvm::Value *Null = VMContext.getNullValue(ObjCTypes.Int8PtrTy); SelectorArgs.push_back(Null); HasCatchAll = true; break; diff --git a/lib/CodeGen/CodeGenFunction.cpp b/lib/CodeGen/CodeGenFunction.cpp index 7b08216bab..4f85e8dc5a 100644 --- a/lib/CodeGen/CodeGenFunction.cpp +++ b/lib/CodeGen/CodeGenFunction.cpp @@ -414,7 +414,7 @@ void CodeGenFunction::EmitMemSetToZero(llvm::Value *DestPtr, QualType Ty) { const llvm::Type *IntPtr = llvm::IntegerType::get(LLVMPointerWidth); Builder.CreateCall4(CGM.getMemSetFn(), DestPtr, - llvm::ConstantInt::getNullValue(llvm::Type::Int8Ty), + getLLVMContext().getNullValue(llvm::Type::Int8Ty), // TypeInfo.first describes size in bits. llvm::ConstantInt::get(IntPtr, TypeInfo.first/8), llvm::ConstantInt::get(llvm::Type::Int32Ty, @@ -579,7 +579,7 @@ CodeGenFunction::CleanupBlockInfo CodeGenFunction::PopCleanupBlock() // If we had a current basic block, we also need to emit an instruction // to initialize the cleanup destination. - Builder.CreateStore(llvm::Constant::getNullValue(llvm::Type::Int32Ty), + Builder.CreateStore(getLLVMContext().getNullValue(llvm::Type::Int32Ty), DestCodePtr); } else Builder.ClearInsertionPoint(); diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h index afa0f9c8d5..2c4d311ac2 100644 --- a/lib/CodeGen/CodeGenFunction.h +++ b/lib/CodeGen/CodeGenFunction.h @@ -22,6 +22,7 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/Support/ValueHandle.h" #include +#include "CodeGenModule.h" #include "CGBlocks.h" #include "CGBuilder.h" #include "CGCall.h" @@ -30,6 +31,7 @@ namespace llvm { class BasicBlock; + class LLVMContext; class Module; class SwitchInst; class Value; @@ -292,6 +294,8 @@ public: llvm::BasicBlock *getInvokeDest() { return InvokeDest; } void setInvokeDest(llvm::BasicBlock *B) { InvokeDest = B; } + llvm::LLVMContext &getLLVMContext() { return CGM.getLLVMContext(); } + //===--------------------------------------------------------------------===// // Objective-C //===--------------------------------------------------------------------===// diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 041480f76c..b516da9a72 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -804,7 +804,7 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) { // exists. A use may still exists, however, so we still may need // to do a RAUW. assert(!ASTTy->isIncompleteType() && "Unexpected incomplete type"); - Init = llvm::Constant::getNullValue(getTypes().ConvertTypeForMem(ASTTy)); + Init = getLLVMContext().getNullValue(getTypes().ConvertTypeForMem(ASTTy)); } else { Init = EmitConstantExpr(D->getInit(), D->getType()); if (!Init) { @@ -1184,7 +1184,7 @@ static void appendFieldAndPadding(CodeGenModule &CGM, // Append padding for (int i = StructFieldNo + 1; i < NextStructFieldNo; i++) { llvm::Constant *C = - llvm::Constant::getNullValue(STy->getElementType(StructFieldNo + 1)); + CGM.getLLVMContext().getNullValue(STy->getElementType(StructFieldNo + 1)); Fields.push_back(C); } @@ -1232,7 +1232,7 @@ GetAddrOfConstantCFString(const StringLiteral *Literal) { if (llvm::Constant *C = Entry.getValue()) return C; - llvm::Constant *Zero = llvm::Constant::getNullValue(llvm::Type::Int32Ty); + llvm::Constant *Zero = getLLVMContext().getNullValue(llvm::Type::Int32Ty); llvm::Constant *Zeros[] = { Zero, Zero }; if (!CFConstantStringClassRef) { diff --git a/lib/CodeGen/CodeGenModule.h b/lib/CodeGen/CodeGenModule.h index ba9f1b28a0..894001a3cc 100644 --- a/lib/CodeGen/CodeGenModule.h +++ b/lib/CodeGen/CodeGenModule.h @@ -21,6 +21,7 @@ #include "CGCall.h" #include "CGCXX.h" #include "CodeGenTypes.h" +#include "llvm/Module.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringSet.h" @@ -34,6 +35,7 @@ namespace llvm { class GlobalValue; class TargetData; class FunctionType; + class LLVMContext; } namespace clang { @@ -202,6 +204,7 @@ public: CodeGenTypes &getTypes() { return Types; } Diagnostic &getDiags() const { return Diags; } const llvm::TargetData &getTargetData() const { return TheTargetData; } + llvm::LLVMContext &getLLVMContext() { return TheModule.getContext(); } /// getDeclVisibilityMode - Compute the visibility of the decl \arg D. LangOptions::VisibilityMode getDeclVisibilityMode(const Decl *D) const;