[FastISel][AArch64] Fold compare with zero and branch into CBZ and CBNZ.
[oota-llvm.git] / test / CodeGen / AArch64 / fast-isel-cbz.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_i1(i1 signext %a) {
4 ; CHECK-LABEL: icmp_eq_i1
5 ; CHECK:       cbz w0, {{LBB.+_2}}
6   %1 = icmp eq i1 %a, 0
7   br i1 %1, label %bb1, label %bb2
8 bb2:
9   ret i32 1
10 bb1:
11   ret i32 0
12 }
13
14 define i32 @icmp_eq_i8(i8 signext %a) {
15 ; CHECK-LABEL: icmp_eq_i8
16 ; CHECK:       cbz w0, {{LBB.+_2}}
17   %1 = icmp eq i8 %a, 0
18   br i1 %1, label %bb1, label %bb2
19 bb2:
20   ret i32 1
21 bb1:
22   ret i32 0
23 }
24
25 define i32 @icmp_eq_i16(i16 signext %a) {
26 ; CHECK-LABEL: icmp_eq_i16
27 ; CHECK:       cbz w0, {{LBB.+_2}}
28   %1 = icmp eq i16 %a, 0
29   br i1 %1, label %bb1, label %bb2
30 bb2:
31   ret i32 1
32 bb1:
33   ret i32 0
34 }
35
36 define i32 @icmp_eq_i32(i32 %a) {
37 ; CHECK-LABEL: icmp_eq_i32
38 ; CHECK:       cbz w0, {{LBB.+_2}}
39   %1 = icmp eq i32 %a, 0
40   br i1 %1, label %bb1, label %bb2
41 bb2:
42   ret i32 1
43 bb1:
44   ret i32 0
45 }
46
47 define i32 @icmp_eq_i64(i64 %a) {
48 ; CHECK-LABEL: icmp_eq_i64
49 ; CHECK:       cbz x0, {{LBB.+_2}}
50   %1 = icmp eq i64 %a, 0
51   br i1 %1, label %bb1, label %bb2
52 bb2:
53   ret i32 1
54 bb1:
55   ret i32 0
56 }
57