mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-23 11:04:49 +00:00
ARM64: mark x7 as used when an i128 gets shunted onto the stack.
The second half of a split i128 was ending up in x7, which is not a good thing. This is another part of PR19432. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206366 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7474c171e1
commit
be50dc8b1f
@ -36,7 +36,7 @@ def CC_ARM64_AAPCS : CallingConv<[
|
||||
[X0, X1, X3, X5]>>>,
|
||||
|
||||
// i128 is split to two i64s, and its stack alignment is 16 bytes.
|
||||
CCIfType<[i64], CCIfSplit<CCAssignToStack<8, 16>>>,
|
||||
CCIfType<[i64], CCIfSplit<CCAssignToStackWithShadow<8, 16, [X7]>>>,
|
||||
|
||||
CCIfType<[i64], CCAssignToRegWithShadow<[X0, X1, X2, X3, X4, X5, X6, X7],
|
||||
[W0, W1, W2, W3, W4, W5, W6, W7]>>,
|
||||
|
@ -84,3 +84,13 @@ define void @test_variadic() {
|
||||
; CHECK: bl variadic
|
||||
ret void
|
||||
}
|
||||
|
||||
; We weren't marking x7 as used after deciding that the i128 didn't fit into
|
||||
; registers and putting the first half on the stack, so the *second* half went
|
||||
; into x7. Yuck!
|
||||
define i128 @test_i128_shadow([7 x i64] %x0_x6, i128 %sp) {
|
||||
; CHECK-LABEL: test_i128_shadow:
|
||||
; CHECK: ldp x0, x1, [sp]
|
||||
|
||||
ret i128 %sp
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user