llvm/test/CodeGen/Thumb2/thumb2-cpsr-liveness.ll
Mandeep Singh Grang efde4d38ac 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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269092 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-10 17:57:27 +00:00

42 lines
1.6 KiB
LLVM

; 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
}