[FastISel][AArch64] Fold bit test and branch into TBZ and TBNZ.
[oota-llvm.git] / test / CodeGen / AArch64 / fast-isel-tbz.ll
1 ; RUN: llc -fast-isel -fast-isel-abort -aarch64-atomic-cfg-tidy=0 -verify-machineinstrs -mtriple=aarch64-apple-darwin < %s | FileCheck %s
2
3 define i32 @icmp_eq_i8(i8 zeroext %a) {
4 ; CHECK-LABEL: icmp_eq_i8
5 ; CHECK:       tbz w0, #0, {{LBB.+_2}}
6   %1 = and i8 %a, 1
7   %2 = icmp eq i8 %1, 0
8   br i1 %2, label %bb1, label %bb2
9 bb2:
10   ret i32 1
11 bb1:
12   ret i32 0
13 }
14
15 define i32 @icmp_eq_i16(i16 zeroext %a) {
16 ; CHECK-LABEL: icmp_eq_i16
17 ; CHECK:       tbz w0, #1, {{LBB.+_2}}
18   %1 = and i16 %a, 2
19   %2 = icmp eq i16 %1, 0
20   br i1 %2, label %bb1, label %bb2
21 bb2:
22   ret i32 1
23 bb1:
24   ret i32 0
25 }
26
27 define i32 @icmp_eq_i32(i32 %a) {
28 ; CHECK-LABEL: icmp_eq_i32
29 ; CHECK:       tbz w0, #2, {{LBB.+_2}}
30   %1 = and i32 %a, 4
31   %2 = icmp eq i32 %1, 0
32   br i1 %2, label %bb1, label %bb2
33 bb2:
34   ret i32 1
35 bb1:
36   ret i32 0
37 }
38
39 define i32 @icmp_eq_i64(i64 %a) {
40 ; CHECK-LABEL: icmp_eq_i64
41 ; CHECK:       tbz x0, #3, {{LBB.+_2}}
42   %1 = and i64 %a, 8
43   %2 = icmp eq i64 %1, 0
44   br i1 %2, label %bb1, label %bb2
45 bb2:
46   ret i32 1
47 bb1:
48   ret i32 0
49 }
50