mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00: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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220712 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7476f9c513
commit
e2995ff88f
@ -2132,6 +2132,10 @@ bool AArch64FastISel::emitCompareAndBranch(const BranchInst *BI) {
|
|||||||
LHS = AndLHS;
|
LHS = AndLHS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (VT == MVT::i1)
|
||||||
|
TestBit = 0;
|
||||||
|
|
||||||
IsCmpNE = Predicate == CmpInst::ICMP_NE;
|
IsCmpNE = Predicate == CmpInst::ICMP_NE;
|
||||||
} else if (Predicate == CmpInst::ICMP_SLT) {
|
} else if (Predicate == CmpInst::ICMP_SLT) {
|
||||||
if (!isa<Constant>(RHS))
|
if (!isa<Constant>(RHS))
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
|
|
||||||
define i32 @icmp_eq_i1(i1 %a) {
|
define i32 @icmp_eq_i1(i1 %a) {
|
||||||
; CHECK-LABEL: icmp_eq_i1
|
; CHECK-LABEL: icmp_eq_i1
|
||||||
; CHECK: and [[REG:w[0-9]+]], w0, #0x1
|
; CHECK: tbz w0, #0, {{LBB.+_2}}
|
||||||
; CHECK: cbz [[REG]], {{LBB.+_2}}
|
|
||||||
%1 = icmp eq i1 %a, 0
|
%1 = icmp eq i1 %a, 0
|
||||||
br i1 %1, label %bb1, label %bb2
|
br i1 %1, label %bb1, label %bb2
|
||||||
bb2:
|
bb2:
|
||||||
|
Loading…
Reference in New Issue
Block a user