summaryrefslogtreecommitdiff
path: root/test/CodeGen/X86/sse_reload_fold.ll
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2011-06-06 23:55:20 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2011-06-06 23:55:20 +0000
commitb3e705f88987608d4eb49668dac0e235d04df884 (patch)
tree61f4dd9496275c125bbc6d4e76a4449cd074d3b8 /test/CodeGen/X86/sse_reload_fold.ll
parentf99a4b82a4ff0383138ccaf9e22511eb786168fb (diff)
downloadllvm-b3e705f88987608d4eb49668dac0e235d04df884.tar.gz
llvm-b3e705f88987608d4eb49668dac0e235d04df884.tar.bz2
llvm-b3e705f88987608d4eb49668dac0e235d04df884.tar.xz
Simplify local live range splitting's safeguard to fix PR10070.
When local live range splitting creates a live range with the same number of instructions as the old range, mark it as RS_Local. When such a range is seen again, require that it be split in a way that reduces the number of instructions. That guarantees we are making progress while still being able to perform 3 -> 2+3 splits as required by PR10070. This also means that the PrevSlot map is no longer needed. This was also used to estimate new spill weights, but that is no longer necessary after slotIndexes::insertMachineInstrInMaps() got the extra Late insertion argument. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132697 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/X86/sse_reload_fold.ll')
-rw-r--r--test/CodeGen/X86/sse_reload_fold.ll13
1 files changed, 11 insertions, 2 deletions
diff --git a/test/CodeGen/X86/sse_reload_fold.ll b/test/CodeGen/X86/sse_reload_fold.ll
index 02399c4995..a57fa588f0 100644
--- a/test/CodeGen/X86/sse_reload_fold.ll
+++ b/test/CodeGen/X86/sse_reload_fold.ll
@@ -1,4 +1,4 @@
-; RUN: llc < %s -mtriple=x86_64-linux -mattr=+64bit,+sse3 -print-failed-fuse-candidates |& FileCheck %s
+; RUN: llc < %s -mtriple=x86_64-linux -mattr=+64bit,+sse3 -print-failed-fuse-candidates -regalloc=basic |& FileCheck %s
; CHECK: fail
; CHECK-NOT: fail
@@ -117,7 +117,16 @@ define <2 x double> @d8(<2 x double> %f) {
ret <2 x double> %t
}
-; This one should fail to fuse.
+; This one should fail to fuse, but -regalloc=greedy isn't even trying. Instead
+; it produces:
+; callq test_vd
+; movapd (%rsp), %xmm1 # 16-byte Reload
+; hsubpd %xmm0, %xmm1
+; movapd %xmm1, %xmm0
+; addq $24, %rsp
+; ret
+; RABasic still tries to fold this one.
+
define <2 x double> @z0(<2 x double> %f) {
%y = call <2 x double> @test_vd(<2 x double> %f)
%t = call <2 x double> @llvm.x86.sse3.hsub.pd(<2 x double> %f, <2 x double> %y)