[ARM] Materialise some boolean values to avoid a branch
This patch combines some cases of ARMISD::CMOV for integers that arise in comparisons of the form
a != b ? x : 0
a == b ? 0 : x
and that currently (e.g. in Thumb1) are emitted as branches.
Differential Revision: https://reviews.llvm.org/D34515
llvm-svn: 325323
diff --git a/llvm/test/CodeGen/ARM/setcc-logic.ll b/llvm/test/CodeGen/ARM/setcc-logic.ll
index c48636d..2c2792e 100644
--- a/llvm/test/CodeGen/ARM/setcc-logic.ll
+++ b/llvm/test/CodeGen/ARM/setcc-logic.ll
@@ -20,12 +20,12 @@
define zeroext i1 @and_eq(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
; CHECK-LABEL: and_eq:
; CHECK: @ %bb.0:
-; CHECK-NEXT: eor r2, r2, r3
-; CHECK-NEXT: eor r0, r0, r1
-; CHECK-NEXT: orrs r0, r0, r2
-; CHECK-NEXT: mov r0, #0
-; CHECK-NEXT: movweq r0, #1
-; CHECK-NEXT: bx lr
+; CHECK: eor r2, r2, r3
+; CHECK: eor r0, r0, r1
+; CHECK: orr r0, r0, r2
+; CHECK: clz r0, r0
+; CHECK: lsr r0, r0, #5
+; CHECK: bx lr
%cmp1 = icmp eq i32 %a, %b
%cmp2 = icmp eq i32 %c, %d
%and = and i1 %cmp1, %cmp2