summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/ARM/fast-isel-shift-materialize.ll
diff options
context:
space:
mode:
authorPete Cooper <peter_cooper@apple.com>2015-05-06 22:09:29 +0000
committerPete Cooper <peter_cooper@apple.com>2015-05-06 22:09:29 +0000
commit54085cdc7b4daf694d85d4de068571e2aeb49923 (patch)
treef8efc32c1e7c4133eb54e43b6582d819bf6dc2db /llvm/test/CodeGen/ARM/fast-isel-shift-materialize.ll
parent30978bb99d5c9fac37d4c56936810179cba371fc (diff)
downloadbcm5719-llvm-54085cdc7b4daf694d85d4de068571e2aeb49923.tar.gz
bcm5719-llvm-54085cdc7b4daf694d85d4de068571e2aeb49923.zip
Fix incorrect kill flags in fastisel.
If called twice in the same BB on the same constant, FastISel::fastEmit_ri_ was marking the materialized vreg as killed on each use, instead of only the last use. Change this to only mark the last use as killed by making earlier uses check if the vreg is already used elsewhere. llvm-svn: 236650
Diffstat (limited to 'llvm/test/CodeGen/ARM/fast-isel-shift-materialize.ll')
-rw-r--r--llvm/test/CodeGen/ARM/fast-isel-shift-materialize.ll25
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/ARM/fast-isel-shift-materialize.ll b/llvm/test/CodeGen/ARM/fast-isel-shift-materialize.ll
new file mode 100644
index 00000000000..ab36a979d71
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/fast-isel-shift-materialize.ll
@@ -0,0 +1,25 @@
+; RUN: llc %s -o - -verify-machineinstrs -fast-isel=true | FileCheck %s
+
+target datalayout = "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32"
+target triple = "thumbv7-apple-ios8.0.0"
+
+; When materializing the '2' for the shifts below, the second shift kills the vreg
+; we materialize in to. However, the first shift was also killing that vreg.
+; This fails the machine verifier because the second use then thinks its reading an
+; undefined register.
+
+; CHECK: lsr.w
+; CHECK: lsr.w
+
+declare void @foo(i32, i32)
+
+; Function Attrs: minsize
+define i32 @test(i32 %tmp3, i32 %tmp9) #0 {
+bb:
+ %tmp4 = lshr i32 %tmp3, 2
+ %tmp10 = lshr i32 %tmp9, 2
+ call void @foo(i32 %tmp10, i32 %tmp4)
+ unreachable
+}
+
+attributes #0 = { minsize }
OpenPOWER on IntegriCloud