summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorMandeep Singh Grang <mgrang@codeaurora.org>2016-05-10 17:57:27 +0000
committerMandeep Singh Grang <mgrang@codeaurora.org>2016-05-10 17:57:27 +0000
commite5a2f116d675a2288533c147e2092f76069679e8 (patch)
tree4d67ec9f52b5767a31b5fa24321159f3ab891e56 /llvm/test
parent4d41cb6cc6903978377c871449b6344e80197823 (diff)
downloadbcm5719-llvm-e5a2f116d675a2288533c147e2092f76069679e8.tar.gz
bcm5719-llvm-e5a2f116d675a2288533c147e2092f76069679e8.zip
Fix PR26655: Bail out if all regs of an inst BUNDLE have the correct kill flag
Summary: While setting kill flags on instructions inside a BUNDLE, we bail out as soon as we set kill flag on a register. But we are missing a check when all the registers already have the correct kill flag set. We need to bail out in that case as well. This patch refactors the old code and simply makes use of the addRegisterKilled function in MachineInstr.cpp in order to determine whether to set/remove kill on an instruction. Reviewers: apazos, t.p.northover, pete, MatzeB Subscribers: MatzeB, davide, llvm-commits Differential Revision: http://reviews.llvm.org/D17356 llvm-svn: 269092
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/Thumb2/thumb2-cpsr-liveness.ll41
1 files changed, 41 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/Thumb2/thumb2-cpsr-liveness.ll b/llvm/test/CodeGen/Thumb2/thumb2-cpsr-liveness.ll
new file mode 100644
index 00000000000..79878598893
--- /dev/null
+++ b/llvm/test/CodeGen/Thumb2/thumb2-cpsr-liveness.ll
@@ -0,0 +1,41 @@
+; RUN: llc < %s -mtriple=thumbv7-linux-gnueabi -misched-postra=true
+
+define i32 @test_cpsr() {
+entry:
+ %a = alloca [10 x i32], align 4
+ %0 = bitcast [10 x i32]* %a to i8*
+ %arrayidx.gep = getelementptr [10 x i32], [10 x i32]* %a, i32 0, i32 0
+ br label %for.body
+
+for.cond.cleanup:
+ %c.1.reg2mem.0.lcssa = phi i32 [ %c.1.reg2mem.0, %for.inc ]
+ ret i32 %c.1.reg2mem.0.lcssa
+
+for.body:
+ %1 = phi i32 [ 0, %entry ], [ %.pre, %for.inc.for.body_crit_edge ]
+ %c.018.reg2mem.0 = phi i32 [ 0, %entry ], [ %c.1.reg2mem.0, %for.inc.for.body_crit_edge ]
+ %b.017.reg2mem.0 = phi double [ 0.000000e+00, %entry ], [ %b.1.reg2mem.0, %for.inc.for.body_crit_edge ]
+ %arrayidx.phi = phi i32* [ %arrayidx.gep, %entry ], [ %arrayidx.inc, %for.inc.for.body_crit_edge ]
+ %i.019 = phi i32 [ 0, %entry ], [ %inc, %for.inc.for.body_crit_edge ]
+ %cmp1 = icmp slt i32 %1, 10
+ %arrayidx.inc = getelementptr i32, i32* %arrayidx.phi, i32 1
+ br i1 %cmp1, label %for.inc, label %if.end
+
+if.end:
+ %conv = sitofp i32 %i.019 to double
+ %cmp2 = fcmp nsz ogt double %conv, %b.017.reg2mem.0
+ %selv = select i1 %cmp2, double %conv, double %b.017.reg2mem.0
+ %selv7 = select i1 %cmp2, i32 %i.019, i32 %c.018.reg2mem.0
+ br label %for.inc
+
+for.inc:
+ %b.1.reg2mem.0 = phi double [ %b.017.reg2mem.0, %for.body ], [ %selv, %if.end ]
+ %c.1.reg2mem.0 = phi i32 [ %c.018.reg2mem.0, %for.body ], [ %selv7, %if.end ]
+ %exitcond = icmp eq i32 %i.019, 9
+ br i1 %exitcond, label %for.cond.cleanup, label %for.inc.for.body_crit_edge
+
+for.inc.for.body_crit_edge:
+ %inc = add nuw nsw i32 %i.019, 1
+ %.pre = load i32, i32* %arrayidx.inc, align 4
+ br label %for.body
+}
OpenPOWER on IntegriCloud