aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2013-11-12 18:06:12 +0000
committerAndrew Trick <atrick@apple.com>2013-11-12 18:06:12 +0000
commit0085d5e5ae45e74254c2aa682e18574cd79f3455 (patch)
tree14dc73e28af7cc34ac7e1119d91d4b5d9b154b25 /test
parent2f08e75a45b9fa698a49277f6cc11e041bf5fa51 (diff)
downloadexternal_llvm-0085d5e5ae45e74254c2aa682e18574cd79f3455.zip
external_llvm-0085d5e5ae45e74254c2aa682e18574cd79f3455.tar.gz
external_llvm-0085d5e5ae45e74254c2aa682e18574cd79f3455.tar.bz2
Simplify operand folding when rematerializing a load.
We already know how to fold a reload from a frameindex without analyzing the load instruction. Generalize this to handle any frameindex load. This streamlines the logic for rematerializing loads from stack arguments. As a side effect, it allows stackmaps to record a stack argument location without spilling it. Verified no effect on codegen for llvm test-suite. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194497 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/CodeGen/X86/stackmap.ll17
1 files changed, 6 insertions, 11 deletions
diff --git a/test/CodeGen/X86/stackmap.ll b/test/CodeGen/X86/stackmap.ll
index 9274ddf..335aaf0 100644
--- a/test/CodeGen/X86/stackmap.ll
+++ b/test/CodeGen/X86/stackmap.ll
@@ -1,4 +1,4 @@
-; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s
+; RUN: llc < %s -mtriple=x86_64-apple-darwin -disable-fp-elim | FileCheck %s
;
; Note: Print verbose stackmaps using -debug-only=stackmaps.
@@ -182,21 +182,16 @@ entry:
; CHECK: .long 11
; CHECK-NEXT: .long L{{.*}}-_spilledValue
; CHECK-NEXT: .short 0
-; CHECK-NEXT: .short 10
+; CHECK-NEXT: .short 17
;
-; Check that at least one is a spilled entry (Indirect).
+; Check that at least one is a spilled entry from RBP.
+; Location: Indirect RBP + ...
; CHECK: .byte 3
; CHECK: .byte 0
+; CHECK: .short 6
define void @spilledValue(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3, i64 %arg4, i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9, i64 %l10, i64 %l11, i64 %l12, i64 %l13, i64 %l14, i64 %l15, i64 %l16) {
entry:
- %resolveCall = inttoptr i64 -559038737 to i8*
- call void (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i32 11, i32 15, i8* %resolveCall, i32 5, i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3, i64 %arg4, i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9)
-
-; FIXME: The Spiller needs to be able to fold all rematted loads! This
-; can be seen by adding %l15 to the stackmap.
-; <rdar:/15202984> [JS] Ran out of registers during register allocation
-; %resolveCall = inttoptr i64 -559038737 to i8*
-; call void (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i32 12, i32 15, i8* %resolveCall, i32 5, i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3, i64 %arg4, i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9, i64 %l10, i64 %l11, i64 %l12, i64 %l13, i64 %l14, i64 %l15, i64 %l16)
+ call void (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i32 11, i32 15, i8* null, i32 5, i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3, i64 %arg4, i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9, i64 %l10, i64 %l11, i64 %l12, i64 %l13, i64 %l14, i64 %l15, i64 %l16)
ret void
}