diff options
author | Daniel Dunbar <daniel@zuster.org> | 2008-09-09 23:27:19 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2008-09-09 23:27:19 +0000 |
commit | 17b708d61827cd86278e9580b041dd6cbadf07d3 (patch) | |
tree | 0b200c781e016f556c46b6b68d1a190923767432 /lib/CodeGen/CGExpr.cpp | |
parent | 7c086516f3cc9fba2733b1919973206c6ba4b171 (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.cpp | 55 |
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); -} |