From 725ad31086e3d6c41afa10c43db44f2e7060a961 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Sat, 31 Jan 2009 02:19:00 +0000 Subject: [PATCH] Kill off CGCallInfo, always use CGFunctionInfo for encapsulating function/call info. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63466 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGCall.cpp | 51 ++++++++++++++--------------------- lib/CodeGen/CGCall.h | 14 ++-------- lib/CodeGen/CGObjCMac.cpp | 4 +-- lib/CodeGen/CodeGenModule.cpp | 3 +-- lib/CodeGen/CodeGenModule.h | 3 +-- lib/CodeGen/CodeGenTypes.h | 4 --- 6 files changed, 26 insertions(+), 53 deletions(-) diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index 0807caff9b..e282980d13 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -73,27 +73,21 @@ CGFunctionInfo::CGFunctionInfo(const ObjCMethodDecl *MD, ArgTypes.push_back((*i)->getType()); } -ArgTypeIterator CGFunctionInfo::argtypes_begin() const { - return ArgTypes.begin(); -} - -ArgTypeIterator CGFunctionInfo::argtypes_end() const { - return ArgTypes.end(); -} - -/***/ - -CGCallInfo::CGCallInfo(QualType _ResultType, const CallArgList &_Args) { - ArgTypes.push_back(_ResultType); - for (CallArgList::const_iterator i = _Args.begin(), e = _Args.end(); i!=e; ++i) +CGFunctionInfo::CGFunctionInfo(QualType ResTy, const CallArgList &Args, + bool _IsVariadic) + : IsVariadic(_IsVariadic) +{ + ArgTypes.push_back(ResTy); + for (CallArgList::const_iterator i = Args.begin(), e = Args.end(); + i != e; ++i) ArgTypes.push_back(i->second); } -ArgTypeIterator CGCallInfo::argtypes_begin() const { +ArgTypeIterator CGFunctionInfo::argtypes_begin() const { return ArgTypes.begin(); } -ArgTypeIterator CGCallInfo::argtypes_end() const { +ArgTypeIterator CGFunctionInfo::argtypes_end() const { return ArgTypes.end(); } @@ -878,14 +872,10 @@ CodeGenFunction::ExpandTypeToArgs(QualType Ty, RValue RV, /***/ -const llvm::FunctionType * -CodeGenTypes::GetFunctionType(const CGCallInfo &CI, bool IsVariadic) { - return GetFunctionType(CI.argtypes_begin(), CI.argtypes_end(), IsVariadic); -} - const llvm::FunctionType * CodeGenTypes::GetFunctionType(const CGFunctionInfo &FI) { - return GetFunctionType(FI.argtypes_begin(), FI.argtypes_end(), FI.isVariadic()); + return GetFunctionType(FI.argtypes_begin(), FI.argtypes_end(), + FI.isVariadic()); } const llvm::FunctionType * @@ -962,8 +952,7 @@ bool CodeGenModule::ReturnTypeUsesSret(QualType RetTy) { } void CodeGenModule::ConstructAttributeList(const Decl *TargetDecl, - ArgTypeIterator begin, - ArgTypeIterator end, + const CGFunctionInfo &Info, AttributeListType &PAL) { unsigned FuncAttrs = 0; unsigned RetAttrs = 0; @@ -979,6 +968,7 @@ void CodeGenModule::ConstructAttributeList(const Decl *TargetDecl, FuncAttrs |= llvm::Attribute::ReadNone; } + ArgTypeIterator begin = Info.argtypes_begin(), end = Info.argtypes_end(); QualType RetTy = *begin; unsigned Index = 1; ABIArgInfo RetAI = getABIReturnInfo(RetTy, getTypes()); @@ -995,8 +985,8 @@ void CodeGenModule::ConstructAttributeList(const Decl *TargetDecl, case ABIArgInfo::StructRet: PAL.push_back(llvm::AttributeWithIndex::get(Index, - llvm::Attribute::StructRet| - llvm::Attribute::NoAlias)); + llvm::Attribute::StructRet | + llvm::Attribute::NoAlias)); ++Index; break; @@ -1294,16 +1284,15 @@ RValue CodeGenFunction::EmitCall(llvm::Value *Callee, } llvm::CallInst *CI = Builder.CreateCall(Callee,&Args[0],&Args[0]+Args.size()); - CGCallInfo CallInfo(RetTy, CallArgs); + bool isVariadic = cast(Callee->getType())->isVarArg(); + CGFunctionInfo CallInfo(RetTy, CallArgs, isVariadic); // FIXME: Provide TargetDecl so nounwind, noreturn, etc, etc get set. CodeGen::AttributeListType AttributeList; - CGM.ConstructAttributeList(0, - CallInfo.argtypes_begin(), CallInfo.argtypes_end(), - AttributeList); + CGM.ConstructAttributeList(0, CallInfo, AttributeList); CI->setAttributes(llvm::AttrListPtr::get(AttributeList.begin(), - AttributeList.size())); - + AttributeList.size())); + if (const llvm::Function *F = dyn_cast(Callee)) CI->setCallingConv(F->getCallingConv()); if (CI->getType() != llvm::Type::VoidTy) diff --git a/lib/CodeGen/CGCall.h b/lib/CodeGen/CGCall.h index 744344a7ac..fd6eb48159 100644 --- a/lib/CodeGen/CGCall.h +++ b/lib/CodeGen/CGCall.h @@ -64,24 +64,14 @@ namespace CodeGen { CGFunctionInfo(const FunctionDecl *FD); CGFunctionInfo(const ObjCMethodDecl *MD, const ASTContext &Context); + CGFunctionInfo(QualType ResTy, const CallArgList &Args, + bool _IsVariadic); bool isVariadic() const { return IsVariadic; } ArgTypeIterator argtypes_begin() const; ArgTypeIterator argtypes_end() const; }; - - /// CGCallInfo - Class to encapsulate the arguments and clang types - /// used in a call. - class CGCallInfo { - llvm::SmallVector ArgTypes; - - public: - CGCallInfo(QualType _ResultType, const CallArgList &Args); - - ArgTypeIterator argtypes_begin() const; - ArgTypeIterator argtypes_end() const; - }; } // end namespace CodeGen } // end namespace clang diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index 6c35041b97..4e6611bc55 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/lib/CodeGen/CGObjCMac.cpp @@ -799,8 +799,8 @@ CodeGen::RValue CGObjCMac::EmitMessageSend(CodeGen::CodeGenFunction &CGF, ActualArgs.insert(ActualArgs.end(), CallArgs.begin(), CallArgs.end()); const llvm::FunctionType *FTy = - CGM.getTypes().GetFunctionType(CGCallInfo(ResultType, ActualArgs), - false); + CGM.getTypes().GetFunctionType(CGFunctionInfo(ResultType, ActualArgs, + false)); llvm::Constant *Fn; if (CGM.ReturnTypeUsesSret(ResultType)) { diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 6e1321f4d6..bdb99d6439 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -265,8 +265,7 @@ void CodeGenModule::SetFunctionAttributes(const Decl *D, const CGFunctionInfo &Info, llvm::Function *F) { AttributeListType AttributeList; - ConstructAttributeList(D, Info.argtypes_begin(), Info.argtypes_end(), - AttributeList); + ConstructAttributeList(D, Info, AttributeList); F->setAttributes(llvm::AttrListPtr::get(AttributeList.begin(), AttributeList.size())); diff --git a/lib/CodeGen/CodeGenModule.h b/lib/CodeGen/CodeGenModule.h index 0bd0e2c724..724ca28b88 100644 --- a/lib/CodeGen/CodeGenModule.h +++ b/lib/CodeGen/CodeGenModule.h @@ -247,8 +247,7 @@ public: bool ReturnTypeUsesSret(QualType RetTy); void ConstructAttributeList(const Decl *TargetDecl, - const ArgTypeIterator begin, - const ArgTypeIterator end, + const CGFunctionInfo &Info, AttributeListType &PAL); private: diff --git a/lib/CodeGen/CodeGenTypes.h b/lib/CodeGen/CodeGenTypes.h index 2fe7c89fad..46ca79a3ca 100644 --- a/lib/CodeGen/CodeGenTypes.h +++ b/lib/CodeGen/CodeGenTypes.h @@ -145,10 +145,6 @@ public: /// GetFunctionType - Get the LLVM function type from Info. const llvm::FunctionType *GetFunctionType(const CGFunctionInfo &Info); - /// GetFunctionType - Get the LLVM function type from Info. - /// \param IsVariadic Should the resulting type be variadic? - const llvm::FunctionType *GetFunctionType(const CGCallInfo &Info, - bool IsVariadic); /// GetFunctionType - Get the LLVM function type for the given types /// and variadicness. -- 2.40.0