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