mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[PowerPC] Support multiple return values with fast isel
Using an LLVM IR aggregate return value type containing three or more integer values causes an abort in the fast isel pass. This patch adds two more registers to RetCC_PPC64_ELF_FIS to allow returning up to four integers with fast isel, just the same as is currently supported with regular isel (RetCC_PPC). This is needed for Swift and (possibly) other non-clang frontends. Fixes PR26190. llvm-svn: 272005
This commit is contained in:
parent
5c22a56177
commit
f4980a0fe0
@ -112,7 +112,7 @@ def RetCC_PPC64_ELF_FIS : CallingConv<[
|
||||
CCIfType<[i8], CCPromoteToType<i64>>,
|
||||
CCIfType<[i16], CCPromoteToType<i64>>,
|
||||
CCIfType<[i32], CCPromoteToType<i64>>,
|
||||
CCIfType<[i64], CCAssignToReg<[X3, X4]>>,
|
||||
CCIfType<[i64], CCAssignToReg<[X3, X4, X5, X6]>>,
|
||||
CCIfType<[i128], CCAssignToReg<[X3, X4, X5, X6]>>,
|
||||
CCIfType<[f32], CCAssignToReg<[F1, F2, F3, F4, F5, F6, F7, F8]>>,
|
||||
CCIfType<[f64], CCAssignToReg<[F1, F2, F3, F4, F5, F6, F7, F8]>>,
|
||||
|
21
test/CodeGen/PowerPC/multi-return.ll
Normal file
21
test/CodeGen/PowerPC/multi-return.ll
Normal file
@ -0,0 +1,21 @@
|
||||
; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -O0 < %s | FileCheck %s
|
||||
; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -O2 < %s | FileCheck %s
|
||||
|
||||
; Verify that returning multiple return values in registers works,
|
||||
; both with fast-isel and regular isel.
|
||||
|
||||
define { i32, i32, i32, i32 } @foo() nounwind {
|
||||
%A1 = insertvalue { i32, i32, i32, i32 } undef, i32 1, 0
|
||||
%A2 = insertvalue { i32, i32, i32, i32 } %A1, i32 2, 1
|
||||
%A3 = insertvalue { i32, i32, i32, i32 } %A2, i32 3, 2
|
||||
%A4 = insertvalue { i32, i32, i32, i32 } %A3, i32 4, 3
|
||||
ret { i32, i32, i32, i32 } %A4
|
||||
}
|
||||
|
||||
; CHECK-LABEL: foo:
|
||||
; CHECK: li 3, 1
|
||||
; CHECK: li 4, 2
|
||||
; CHECK: li 5, 3
|
||||
; CHECK: li 6, 4
|
||||
; CHECK: blr
|
||||
|
Loading…
x
Reference in New Issue
Block a user