1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s 3 4--- 5name: cbz_s32 6legalized: true 7regBankSelected: true 8 9body: | 10 ; CHECK-LABEL: name: cbz_s32 11 ; CHECK: bb.0: 12 ; CHECK: successors: %bb.0(0x40000000), %bb.1(0x40000000) 13 ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0 14 ; CHECK: CBZW [[COPY]], %bb.1 15 ; CHECK: B %bb.0 16 ; CHECK: bb.1: 17 bb.0: 18 liveins: $w0 19 successors: %bb.0, %bb.1 20 21 %0:gpr(s32) = COPY $w0 22 %1:gpr(s32) = G_CONSTANT i32 0 23 %2:gpr(s32) = G_ICMP intpred(eq), %0, %1 24 %3:gpr(s1) = G_TRUNC %2(s32) 25 G_BRCOND %3(s1), %bb.1 26 G_BR %bb.0 27 28 bb.1: 29... 30 31--- 32name: cbz_s64 33legalized: true 34regBankSelected: true 35 36body: | 37 ; CHECK-LABEL: name: cbz_s64 38 ; CHECK: bb.0: 39 ; CHECK: successors: %bb.0(0x40000000), %bb.1(0x40000000) 40 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0 41 ; CHECK: CBZX [[COPY]], %bb.1 42 ; CHECK: B %bb.0 43 ; CHECK: bb.1: 44 bb.0: 45 liveins: $x0 46 successors: %bb.0, %bb.1 47 48 %0:gpr(s64) = COPY $x0 49 %1:gpr(s64) = G_CONSTANT i64 0 50 %2:gpr(s32) = G_ICMP intpred(eq), %0, %1 51 %3:gpr(s1) = G_TRUNC %2(s32) 52 G_BRCOND %3(s1), %bb.1 53 G_BR %bb.0 54 55 bb.1: 56... 57 58--- 59name: cbnz_s32 60legalized: true 61regBankSelected: true 62 63body: | 64 ; CHECK-LABEL: name: cbnz_s32 65 ; CHECK: bb.0: 66 ; CHECK: successors: %bb.0(0x40000000), %bb.1(0x40000000) 67 ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0 68 ; CHECK: CBNZW [[COPY]], %bb.1 69 ; CHECK: B %bb.0 70 ; CHECK: bb.1: 71 bb.0: 72 liveins: $w0 73 successors: %bb.0, %bb.1 74 75 %0:gpr(s32) = COPY $w0 76 %1:gpr(s32) = G_CONSTANT i32 0 77 %2:gpr(s32) = G_ICMP intpred(ne), %0, %1 78 %3:gpr(s1) = G_TRUNC %2(s32) 79 G_BRCOND %3(s1), %bb.1 80 G_BR %bb.0 81 82 bb.1: 83... 84 85--- 86name: cbnz_s64 87legalized: true 88regBankSelected: true 89 90body: | 91 ; CHECK-LABEL: name: cbnz_s64 92 ; CHECK: bb.0: 93 ; CHECK: successors: %bb.0(0x40000000), %bb.1(0x40000000) 94 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0 95 ; CHECK: CBNZX [[COPY]], %bb.1 96 ; CHECK: B %bb.0 97 ; CHECK: bb.1: 98 bb.0: 99 liveins: $x0 100 successors: %bb.0, %bb.1 101 102 %0:gpr(s64) = COPY $x0 103 %1:gpr(s64) = G_CONSTANT i64 0 104 %2:gpr(s32) = G_ICMP intpred(ne), %0, %1 105 %3:gpr(s1) = G_TRUNC %2(s32) 106 G_BRCOND %3(s1), %bb.1 107 G_BR %bb.0 108 109 bb.1: 110... 111--- 112name: test_rhs_inttoptr 113alignment: 4 114legalized: true 115regBankSelected: true 116tracksRegLiveness: true 117body: | 118 ; CHECK-LABEL: name: test_rhs_inttoptr 119 ; CHECK: bb.0: 120 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 121 ; CHECK: liveins: $x0 122 ; CHECK: [[COPY:%[0-9]+]]:gpr64common = COPY $x0 123 ; CHECK: CBZX [[COPY]], %bb.2 124 ; CHECK: bb.1: 125 ; CHECK: successors: %bb.2(0x80000000) 126 ; CHECK: STRXui $xzr, [[COPY]], 0 :: (store 8) 127 ; CHECK: bb.2: 128 ; CHECK: RET_ReallyLR 129 bb.1: 130 successors: %bb.2, %bb.3 131 liveins: $x0 132 133 %0:gpr(p0) = COPY $x0 134 %2:gpr(s64) = G_CONSTANT i64 0 135 %1:gpr(p0) = G_INTTOPTR %2(s64) 136 %4:gpr(s32) = G_ICMP intpred(eq), %0(p0), %1 137 %3:gpr(s1) = G_TRUNC %4(s32) 138 G_BRCOND %3(s1), %bb.3 139 140 bb.2: 141 %5:gpr(s64) = G_CONSTANT i64 0 142 G_STORE %5(s64), %0(p0) :: (store 8) 143 144 bb.3: 145 RET_ReallyLR 146 147... 148--- 149name: test_rhs_unknown 150alignment: 4 151legalized: true 152regBankSelected: true 153tracksRegLiveness: true 154body: | 155 ; CHECK-LABEL: name: test_rhs_unknown 156 ; CHECK: bb.0: 157 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 158 ; CHECK: liveins: $x0 159 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 160 ; CHECK: [[LDRXui:%[0-9]+]]:gpr64common = LDRXui [[COPY]], 0 :: (load 8) 161 ; CHECK: [[SUBSXri:%[0-9]+]]:gpr64 = SUBSXri [[LDRXui]], 42, 0, implicit-def $nzcv 162 ; CHECK: Bcc 0, %bb.2, implicit $nzcv 163 ; CHECK: bb.1: 164 ; CHECK: successors: %bb.2(0x80000000) 165 ; CHECK: STRXui $xzr, [[COPY]], 0 :: (store 8) 166 ; CHECK: bb.2: 167 ; CHECK: RET_ReallyLR 168 bb.1: 169 successors: %bb.2, %bb.3 170 liveins: $x0 171 172 %0:gpr(p0) = COPY $x0 173 %2:gpr(s64) = G_CONSTANT i64 42 174 %4:gpr(s64) = G_CONSTANT i64 0 175 %1:gpr(s64) = G_LOAD %0(p0) :: (load 8) 176 %5:gpr(s32) = G_ICMP intpred(eq), %1(s64), %2 177 %3:gpr(s1) = G_TRUNC %5(s32) 178 G_BRCOND %3(s1), %bb.3 179 180 bb.2: 181 %6:gpr(s64) = G_CONSTANT i64 0 182 G_STORE %6(s64), %0(p0) :: (store 8) 183 184 bb.3: 185 RET_ReallyLR 186 187 188