Set the calling convention based on the CGFunctionInfo.

llvm-svn: 81582
This commit is contained in:
Daniel Dunbar 2009-09-11 22:25:00 +00:00
parent 7feafc70d9
commit bbaeca4fef
3 changed files with 14 additions and 10 deletions

View File

@ -851,9 +851,9 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
}
CS.setAttributes(Attrs);
if (const llvm::Function *F =
dyn_cast<llvm::Function>(Callee->stripPointerCasts()))
CS.setCallingConv(F->getCallingConv());
llvm::CallingConv::ID CC =
static_cast<llvm::CallingConv::ID>(CallInfo.getCallingConvention());
CS.setCallingConv(CC);
// If the call doesn't return, finish the basic block and clear the
// insertion point; this allows the rest of IRgen to discard

View File

@ -1386,6 +1386,13 @@ RValue CodeGenFunction::EmitCall(llvm::Value *Callee, QualType CalleeType,
CallArgList Args;
EmitCallArgs(Args, FnType->getAsFunctionProtoType(), ArgBeg, ArgEnd);
return EmitCall(CGM.getTypes().getFunctionInfo(ResultType, Args),
// FIXME: We should not need to do this, it should be part of the function
// type.
unsigned CallingConvention = 0;
if (const llvm::Function *F =
dyn_cast<llvm::Function>(Callee->stripPointerCasts()))
CallingConvention = F->getCallingConv();
return EmitCall(CGM.getTypes().getFunctionInfo(ResultType, Args,
CallingConvention),
Callee, Args, TargetDecl);
}

View File

@ -343,12 +343,9 @@ void CodeGenModule::SetLLVMFunctionAttributes(const Decl *D,
F->setAttributes(llvm::AttrListPtr::get(AttributeList.begin(),
AttributeList.size()));
// Set the appropriate calling convention for the Function.
if (D->hasAttr<FastCallAttr>())
F->setCallingConv(llvm::CallingConv::X86_FastCall);
if (D->hasAttr<StdCallAttr>())
F->setCallingConv(llvm::CallingConv::X86_StdCall);
llvm::CallingConv::ID CC =
static_cast<llvm::CallingConv::ID>(Info.getCallingConvention());
F->setCallingConv(CC);
}
void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,