aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGExpr.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2008-09-09 23:27:19 +0000
committerDaniel Dunbar <daniel@zuster.org>2008-09-09 23:27:19 +0000
commit17b708d61827cd86278e9580b041dd6cbadf07d3 (patch)
tree0b200c781e016f556c46b6b68d1a190923767432 /lib/CodeGen/CGExpr.cpp
parent7c086516f3cc9fba2733b1919973206c6ba4b171 (diff)
Move ABI specific code for functions / calls to CGCall.cpp:
- Factor out EmitFunction{Pro,Epi}log git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56031 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGExpr.cpp')
-rw-r--r--lib/CodeGen/CGExpr.cpp55
1 files changed, 0 insertions, 55 deletions
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index 1c10171194..f8dc9dcd43 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -856,58 +856,3 @@ RValue CodeGenFunction::EmitCallExpr(llvm::Value *Callee, QualType FnType,
return EmitCall(Callee, ResultType, Args);
}
-
-RValue CodeGenFunction::EmitCall(llvm::Value *Callee,
- QualType ResultType,
- const CallArgList &CallArgs) {
- // FIXME: Factor out code to load from args into locals into target.
- llvm::SmallVector<llvm::Value*, 16> Args;
- llvm::Value *TempArg0 = 0;
-
- // Handle struct-return functions by passing a pointer to the
- // location that we would like to return into.
- if (hasAggregateLLVMType(ResultType)) {
- // Create a temporary alloca to hold the result of the call. :(
- TempArg0 = CreateTempAlloca(ConvertType(ResultType));
- Args.push_back(TempArg0);
- }
-
- for (CallArgList::const_iterator I = CallArgs.begin(), E = CallArgs.end();
- I != E; ++I) {
- RValue RV = I->first;
- if (RV.isScalar()) {
- Args.push_back(RV.getScalarVal());
- } else if (RV.isComplex()) {
- // Make a temporary alloca to pass the argument.
- Args.push_back(CreateTempAlloca(ConvertType(I->second)));
- StoreComplexToAddr(RV.getComplexVal(), Args.back(), false);
- } else {
- Args.push_back(RV.getAggregateAddr());
- }
- }
-
- llvm::CallInst *CI = Builder.CreateCall(Callee,&Args[0],&Args[0]+Args.size());
- CGCallInfo CallInfo(ResultType, CallArgs);
-
- CodeGen::ParamAttrListType ParamAttrList;
- CallInfo.constructParamAttrList(ParamAttrList);
- CI->setParamAttrs(llvm::PAListPtr::get(ParamAttrList.begin(),
- ParamAttrList.size()));
-
- if (const llvm::Function *F = dyn_cast<llvm::Function>(Callee))
- CI->setCallingConv(F->getCallingConv());
- if (CI->getType() != llvm::Type::VoidTy)
- CI->setName("call");
- else if (ResultType->isAnyComplexType())
- return RValue::getComplex(LoadComplexFromAddr(TempArg0, false));
- else if (hasAggregateLLVMType(ResultType))
- // Struct return.
- return RValue::getAggregate(TempArg0);
- else {
- // void return.
- assert(ResultType->isVoidType() && "Should only have a void expr here");
- CI = 0;
- }
-
- return RValue::get(CI);
-}