[FastISel][AArch64] Fix return type in FastLowerCall.

I used the wrong method to obtain the return type inside FinishCall. This fix
simply uses the return type from FastLowerCall, which we already determined to
be a valid type.

Reduced test case from Chad. Thanks.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213788 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Juergen Ributzka 2014-07-23 20:03:13 +00:00
parent 03f160f9d3
commit 4fa6ecc26f
2 changed files with 16 additions and 4 deletions

View File

@ -138,7 +138,7 @@ private:
CCAssignFn *CCAssignFnForCall(CallingConv::ID CC) const;
bool ProcessCallArgs(CallLoweringInfo &CLI, SmallVectorImpl<MVT> &ArgVTs,
unsigned &NumBytes);
bool FinishCall(CallLoweringInfo &CLI, unsigned NumBytes);
bool FinishCall(CallLoweringInfo &CLI, MVT RetVT, unsigned NumBytes);
public:
// Backend specific FastISel code.
@ -1270,9 +1270,9 @@ bool AArch64FastISel::ProcessCallArgs(CallLoweringInfo &CLI,
return true;
}
bool AArch64FastISel::FinishCall(CallLoweringInfo &CLI, unsigned NumBytes) {
bool AArch64FastISel::FinishCall(CallLoweringInfo &CLI, MVT RetVT,
unsigned NumBytes) {
CallingConv::ID CC = CLI.CallConv;
MVT RetVT = MVT::getVT(CLI.RetTy);
// Issue CALLSEQ_END
unsigned AdjStackUp = TII.getCallFrameDestroyOpcode();
@ -1370,7 +1370,7 @@ bool AArch64FastISel::FastLowerCall(CallLoweringInfo &CLI) {
MIB.addRegMask(TRI.getCallPreservedMask(CC));
// Finish off the call including any return values.
return FinishCall(CLI, NumBytes);
return FinishCall(CLI, RetVT, NumBytes);
}
bool AArch64FastISel::IsMemCpySmall(uint64_t Len, unsigned Alignment) {

View File

@ -0,0 +1,12 @@
; RUN: llc -fast-isel -fast-isel-abort < %s | FileCheck %s
target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-linux-gnu"
define i8* @test_call_return_type(i64 %size) {
entry:
; CHECK: bl xmalloc
%0 = call noalias i8* @xmalloc(i64 undef)
ret i8* %0
}
declare noalias i8* @xmalloc(i64)