1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00

[FastISel][AArch64] Optimize compare-and-branch for i1 to use 'tbz'.

Minor enhancement to use 'tbz' for i1 compare-and-branch to get rid of an 'and'
instruction.

This fixes rdar://problem/18784953.

llvm-svn: 220712
This commit is contained in:
Juergen Ributzka 2014-10-27 19:46:23 +00:00
parent 87efb91a50
commit 76c57b0570
2 changed files with 5 additions and 2 deletions

View File

@ -2132,6 +2132,10 @@ bool AArch64FastISel::emitCompareAndBranch(const BranchInst *BI) {
LHS = AndLHS;
}
}
if (VT == MVT::i1)
TestBit = 0;
IsCmpNE = Predicate == CmpInst::ICMP_NE;
} else if (Predicate == CmpInst::ICMP_SLT) {
if (!isa<Constant>(RHS))

View File

@ -2,8 +2,7 @@
define i32 @icmp_eq_i1(i1 %a) {
; CHECK-LABEL: icmp_eq_i1
; CHECK: and [[REG:w[0-9]+]], w0, #0x1
; CHECK: cbz [[REG]], {{LBB.+_2}}
; CHECK: tbz w0, #0, {{LBB.+_2}}
%1 = icmp eq i1 %a, 0
br i1 %1, label %bb1, label %bb2
bb2: