1; RUN: llc                             -aarch64-atomic-cfg-tidy=0 -verify-machineinstrs -mtriple=aarch64-apple-darwin < %s | FileCheck %s
2; RUN: llc -fast-isel -fast-isel-abort -aarch64-atomic-cfg-tidy=0 -verify-machineinstrs -mtriple=aarch64-apple-darwin < %s | FileCheck %s
3
4define i32 @icmp_eq_i8(i8 zeroext %a) {
5; CHECK-LABEL: icmp_eq_i8
6; CHECK:       tbz {{w[0-9]+}}, #0, {{LBB.+_2}}
7  %1 = and i8 %a, 1
8  %2 = icmp eq i8 %1, 0
9  br i1 %2, label %bb1, label %bb2, !prof !0
10bb1:
11  ret i32 1
12bb2:
13  ret i32 0
14}
15
16define i32 @icmp_eq_i16(i16 zeroext %a) {
17; CHECK-LABEL: icmp_eq_i16
18; CHECK:       tbz w0, #1, {{LBB.+_2}}
19  %1 = and i16 %a, 2
20  %2 = icmp eq i16 %1, 0
21  br i1 %2, label %bb1, label %bb2, !prof !0
22bb1:
23  ret i32 1
24bb2:
25  ret i32 0
26}
27
28define i32 @icmp_eq_i32(i32 %a) {
29; CHECK-LABEL: icmp_eq_i32
30; CHECK:       tbz w0, #2, {{LBB.+_2}}
31  %1 = and i32 %a, 4
32  %2 = icmp eq i32 %1, 0
33  br i1 %2, label %bb1, label %bb2, !prof !0
34bb1:
35  ret i32 1
36bb2:
37  ret i32 0
38}
39
40define i32 @icmp_eq_i64_1(i64 %a) {
41; CHECK-LABEL: icmp_eq_i64_1
42; CHECK:       tbz w0, #3, {{LBB.+_2}}
43  %1 = and i64 %a, 8
44  %2 = icmp eq i64 %1, 0
45  br i1 %2, label %bb1, label %bb2, !prof !0
46bb1:
47  ret i32 1
48bb2:
49  ret i32 0
50}
51
52define i32 @icmp_eq_i64_2(i64 %a) {
53; CHECK-LABEL: icmp_eq_i64_2
54; CHECK:       tbz x0, #32, {{LBB.+_2}}
55  %1 = and i64 %a, 4294967296
56  %2 = icmp eq i64 %1, 0
57  br i1 %2, label %bb1, label %bb2, !prof !0
58bb1:
59  ret i32 1
60bb2:
61  ret i32 0
62}
63
64define i32 @icmp_ne_i8(i8 zeroext %a) {
65; CHECK-LABEL: icmp_ne_i8
66; CHECK:       tbnz w0, #0, {{LBB.+_2}}
67  %1 = and i8 %a, 1
68  %2 = icmp ne i8 %1, 0
69  br i1 %2, label %bb1, label %bb2, !prof !0
70bb1:
71  ret i32 1
72bb2:
73  ret i32 0
74}
75
76define i32 @icmp_ne_i16(i16 zeroext %a) {
77; CHECK-LABEL: icmp_ne_i16
78; CHECK:       tbnz w0, #1, {{LBB.+_2}}
79  %1 = and i16 %a, 2
80  %2 = icmp ne i16 %1, 0
81  br i1 %2, label %bb1, label %bb2, !prof !0
82bb1:
83  ret i32 1
84bb2:
85  ret i32 0
86}
87
88define i32 @icmp_ne_i32(i32 %a) {
89; CHECK-LABEL: icmp_ne_i32
90; CHECK:       tbnz w0, #2, {{LBB.+_2}}
91  %1 = and i32 %a, 4
92  %2 = icmp ne i32 %1, 0
93  br i1 %2, label %bb1, label %bb2, !prof !0
94bb1:
95  ret i32 1
96bb2:
97  ret i32 0
98}
99
100define i32 @icmp_ne_i64_1(i64 %a) {
101; CHECK-LABEL: icmp_ne_i64_1
102; CHECK:       tbnz w0, #3, {{LBB.+_2}}
103  %1 = and i64 %a, 8
104  %2 = icmp ne i64 %1, 0
105  br i1 %2, label %bb1, label %bb2, !prof !0
106bb1:
107  ret i32 1
108bb2:
109  ret i32 0
110}
111
112define i32 @icmp_ne_i64_2(i64 %a) {
113; CHECK-LABEL: icmp_ne_i64_2
114; CHECK:       tbnz x0, #32, {{LBB.+_2}}
115  %1 = and i64 %a, 4294967296
116  %2 = icmp ne i64 %1, 0
117  br i1 %2, label %bb1, label %bb2, !prof !0
118bb1:
119  ret i32 1
120bb2:
121  ret i32 0
122}
123
124!0 = metadata !{metadata !"branch_weights", i32 0, i32 2147483647}
125!1 = metadata !{metadata !"branch_weights", i32 2147483647, i32 0}
126