summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGCall.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-02-02 22:03:45 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-02-02 22:03:45 +0000
commitd931a87f902a045aa82797228ad5a0963da2c6f4 (patch)
tree90eb283b160ccffb28d41359bc092ea193aa53e1 /clang/lib/CodeGen/CGCall.cpp
parente83866065b206f90aae6a25724dd3c1274720269 (diff)
downloadbcm5719-llvm-d931a87f902a045aa82797228ad5a0963da2c6f4.tar.gz
bcm5719-llvm-d931a87f902a045aa82797228ad5a0963da2c6f4.zip
More ABI API cleanup.
- Lift CGFunctionInfo creation above ReturnTypeUsesSret and EmitFunction{Epi,Pro}log. llvm-svn: 63553
Diffstat (limited to 'clang/lib/CodeGen/CGCall.cpp')
-rw-r--r--clang/lib/CodeGen/CGCall.cpp25
1 files changed, 12 insertions, 13 deletions
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp
index a592ace68a1..c7b2a5dc895 100644
--- a/clang/lib/CodeGen/CGCall.cpp
+++ b/clang/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()));
OpenPOWER on IntegriCloud