diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-02-02 22:03:45 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-02-02 22:03:45 +0000 |
commit | 88b5396b0897f28d22ae3debf4a0d97b33b6c362 (patch) | |
tree | 7838b5a53781e11e09273dad5fdd044b44174b9d /lib/CodeGen/CGCall.cpp | |
parent | d671c5a61605ab864768cbbb4feb9cd652609083 (diff) |
More ABI API cleanup.
- Lift CGFunctionInfo creation above ReturnTypeUsesSret and
EmitFunction{Epi,Pro}log.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63553 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGCall.cpp')
-rw-r--r-- | lib/CodeGen/CGCall.cpp | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index a592ace68a..c7b2a5dc89 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -935,8 +935,8 @@ static void CreateCoercedStore(llvm::Value *Src, /***/ -bool CodeGenModule::ReturnTypeUsesSret(QualType RetTy) { - return getABIReturnInfo(RetTy, getTypes()).isStructRet(); +bool CodeGenModule::ReturnTypeUsesSret(const CGFunctionInfo &FI) { + return getABIReturnInfo(FI.getReturnType(), getTypes()).isStructRet(); } const llvm::FunctionType * @@ -1008,8 +1008,8 @@ CodeGenTypes::GetFunctionType(const CGFunctionInfo &FI, bool IsVariadic) { return llvm::FunctionType::get(ResultType, ArgTys, IsVariadic); } -void CodeGenModule::ConstructAttributeList(const Decl *TargetDecl, - const CGFunctionInfo &Info, +void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &Info, + const Decl *TargetDecl, AttributeListType &PAL) { unsigned FuncAttrs = 0; unsigned RetAttrs = 0; @@ -1107,16 +1107,14 @@ void CodeGenModule::ConstructAttributeList(const Decl *TargetDecl, } -void CodeGenFunction::EmitFunctionProlog(llvm::Function *Fn, - QualType RetTy, +void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI, + llvm::Function *Fn, const FunctionArgList &Args) { - CGFunctionInfo FnInfo(RetTy, Args); - // Emit allocs for param decls. Give the LLVM Argument nodes names. llvm::Function::arg_iterator AI = Fn->arg_begin(); // Name the struct return argument. - if (CGM.ReturnTypeUsesSret(RetTy)) { + if (CGM.ReturnTypeUsesSret(FI)) { AI->setName("agg.result"); ++AI; } @@ -1173,12 +1171,13 @@ void CodeGenFunction::EmitFunctionProlog(llvm::Function *Fn, assert(AI == Fn->arg_end() && "Argument mismatch!"); } -void CodeGenFunction::EmitFunctionEpilog(QualType RetTy, +void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI, llvm::Value *ReturnValue) { llvm::Value *RV = 0; // Functions with no result always return void. if (ReturnValue) { + QualType RetTy = FI.getReturnType(); ABIArgInfo RetAI = getABIReturnInfo(RetTy, CGM.getTypes()); switch (RetAI.getKind()) { @@ -1220,8 +1219,8 @@ void CodeGenFunction::EmitFunctionEpilog(QualType RetTy, } } -RValue CodeGenFunction::EmitCall(llvm::Value *Callee, - const CGFunctionInfo &CallInfo, +RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, + llvm::Value *Callee, const CallArgList &CallArgs) { llvm::SmallVector<llvm::Value*, 16> Args; @@ -1282,7 +1281,7 @@ RValue CodeGenFunction::EmitCall(llvm::Value *Callee, // FIXME: Provide TargetDecl so nounwind, noreturn, etc, etc get set. CodeGen::AttributeListType AttributeList; - CGM.ConstructAttributeList(0, CallInfo, AttributeList); + CGM.ConstructAttributeList(CallInfo, 0, AttributeList); CI->setAttributes(llvm::AttrListPtr::get(AttributeList.begin(), AttributeList.size())); |