From b768807c49a1c7085def099b848631856af766fa Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Wed, 10 Sep 2008 00:41:16 +0000 Subject: [PATCH] Tweak CGCall functions again: - Realized these functions will eventually need access to more data, moved to CodeGenModule. Eventually they should probably live together in some other helper class. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56039 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGCall.cpp | 14 ++++++++------ lib/CodeGen/CGObjCMac.cpp | 2 +- lib/CodeGen/CodeGenFunction.h | 9 --------- lib/CodeGen/CodeGenModule.cpp | 10 +++++----- lib/CodeGen/CodeGenModule.h | 14 ++++++++++++++ 5 files changed, 28 insertions(+), 21 deletions(-) diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index 8f6bde412b..168eaf37bd 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -14,6 +14,7 @@ #include "CGCall.h" #include "CodeGenFunction.h" +#include "CodeGenModule.h" #include "clang/AST/ASTContext.h" #include "clang/AST/Decl.h" #include "clang/AST/DeclObjC.h" @@ -75,11 +76,11 @@ ArgTypeIterator CGCallInfo::argtypes_end() const { /***/ -bool CodeGenFunction::ReturnTypeUsesSret(QualType RetTy) { - return hasAggregateLLVMType(RetTy); +bool CodeGenModule::ReturnTypeUsesSret(QualType RetTy) { + return CodeGenFunction::hasAggregateLLVMType(RetTy); } -void CodeGenFunction::ConstructParamAttrList(const Decl *TargetDecl, +void CodeGenModule::ConstructParamAttrList(const Decl *TargetDecl, ArgTypeIterator begin, ArgTypeIterator end, ParamAttrListType &PAL) { @@ -94,7 +95,7 @@ void CodeGenFunction::ConstructParamAttrList(const Decl *TargetDecl, QualType ResTy = *begin; unsigned Index = 1; - if (CodeGenFunction::hasAggregateLLVMType(ResTy)) { + if (ReturnTypeUsesSret(ResTy)) { PAL.push_back(llvm::ParamAttrsWithIndex::get(Index, llvm::ParamAttr::StructRet)); ++Index; @@ -203,8 +204,9 @@ RValue CodeGenFunction::EmitCall(llvm::Value *Callee, // FIXME: Provide TargetDecl so nounwind, noreturn, etc, etc get set. CodeGen::ParamAttrListType ParamAttrList; - ConstructParamAttrList(0, CallInfo.argtypes_begin(), CallInfo.argtypes_end(), - ParamAttrList); + CGM.ConstructParamAttrList(0, + CallInfo.argtypes_begin(), CallInfo.argtypes_end(), + ParamAttrList); CI->setParamAttrs(llvm::PAListPtr::get(ParamAttrList.begin(), ParamAttrList.size())); diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index ff7717dad3..e3fcbdf11d 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/lib/CodeGen/CGObjCMac.cpp @@ -531,7 +531,7 @@ CodeGen::RValue CGObjCMac::EmitMessageSend(CodeGen::CodeGenFunction &CGF, llvm::Value *Fn = ObjCTypes.getMessageSendFn(IsSuper, - CGF.ReturnTypeUsesSret(ResultType), + CGM.ReturnTypeUsesSret(ResultType), CGM.getTypes().ConvertType(ResultType)); return CGF.EmitCall(Fn, ResultType, ActualArgs); } diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h index ef7009c5aa..5054b56d21 100644 --- a/lib/CodeGen/CodeGenFunction.h +++ b/lib/CodeGen/CodeGenFunction.h @@ -138,15 +138,6 @@ public: const FunctionArgList &Args); void FinishFunction(SourceLocation EndLoc=SourceLocation()); - /// ReturnTypeUsesSret - Return true iff the given type uses 'sret' - /// when used as a return type. - static bool ReturnTypeUsesSret(QualType RetTy); - - static void ConstructParamAttrList(const Decl *TargetDecl, - const ArgTypeIterator begin, - const ArgTypeIterator end, - ParamAttrListType &PAL); - /// EmitFunctionProlog - Emit the target specific LLVM code to load /// the arguments for the given function. This is also responsible /// for naming the LLVM function arguments. diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 9f7b977276..e5acc505f5 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -212,12 +212,12 @@ static void SetGlobalValueAttributes(const Decl *D, } } -static void SetFunctionParamAttrs(const CGFunctionInfo &Info, llvm::Function *F) { +void CodeGenModule::SetFunctionParamAttrs(const CGFunctionInfo &Info, + llvm::Function *F) { ParamAttrListType ParamAttrList; - CodeGenFunction::ConstructParamAttrList(Info.getDecl(), - Info.argtypes_begin(), - Info.argtypes_end(), - ParamAttrList); + ConstructParamAttrList(Info.getDecl(), + Info.argtypes_begin(), Info.argtypes_end(), + ParamAttrList); F->setParamAttrs(llvm::PAListPtr::get(ParamAttrList.begin(), ParamAttrList.size())); diff --git a/lib/CodeGen/CodeGenModule.h b/lib/CodeGen/CodeGenModule.h index bcb464b66a..4976e3474a 100644 --- a/lib/CodeGen/CodeGenModule.h +++ b/lib/CodeGen/CodeGenModule.h @@ -19,6 +19,8 @@ #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/StringMap.h" +#include "CGCall.h" + namespace llvm { class Module; class Constant; @@ -215,6 +217,18 @@ public: void SetMethodAttributes(const ObjCMethodDecl *MD, llvm::Function *F); + void SetFunctionParamAttrs(const CGFunctionInfo &Info, + llvm::Function *F); + + /// ReturnTypeUsesSret - Return true iff the given type uses 'sret' + /// when used as a return type. + bool ReturnTypeUsesSret(QualType RetTy); + + void ConstructParamAttrList(const Decl *TargetDecl, + const ArgTypeIterator begin, + const ArgTypeIterator end, + ParamAttrListType &PAL); + private: /// SetFunctionAttributesForDefinition - Set function attributes /// specific to a function definition. -- 2.40.0