mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-23 20:45:06 +00:00
[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:
parent
03f160f9d3
commit
4fa6ecc26f
@ -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) {
|
||||
|
12
test/CodeGen/AArch64/fast-isel-call-return.ll
Normal file
12
test/CodeGen/AArch64/fast-isel-call-return.ll
Normal 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)
|
Loading…
Reference in New Issue
Block a user