391 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=aarch64 -run-pass=regbankselect -verify-machineinstrs %s -o - | FileCheck %s3#4# Verify register banks for G_ASSERT_SEXT.5#6 7...8---9name: gpr10alignment: 411legalized: true12tracksRegLiveness: true13body: |14 bb.0:15 liveins: $w0, $w116 17 ; G_ASSERT_SEXT should end up on a GPR.18 19 ; CHECK-LABEL: name: gpr20 ; CHECK: liveins: $w0, $w121 ; CHECK-NEXT: {{ $}}22 ; CHECK-NEXT: %copy:gpr(s32) = COPY $w023 ; CHECK-NEXT: %copy_assert_sext:gpr(s32) = G_ASSERT_SEXT %copy, 1624 ; CHECK-NEXT: $w1 = COPY %copy_assert_sext(s32)25 ; CHECK-NEXT: RET_ReallyLR implicit $w126 %copy:_(s32) = COPY $w027 %copy_assert_sext:_(s32) = G_ASSERT_SEXT %copy(s32), 1628 $w1 = COPY %copy_assert_sext(s32)29 RET_ReallyLR implicit $w130 31...32---33name: gpr_vector34alignment: 435legalized: true36tracksRegLiveness: true37body: |38 bb.0:39 liveins: $x0, $x140 41 ; G_ASSERT_SEXT should end up on a GPR.42 43 ; CHECK-LABEL: name: gpr_vector44 ; CHECK: liveins: $x0, $x145 ; CHECK-NEXT: {{ $}}46 ; CHECK-NEXT: %copy:gpr(<2 x s32>) = COPY $x047 ; CHECK-NEXT: %copy_assert_sext:gpr(<2 x s32>) = G_ASSERT_SEXT %copy, 1648 ; CHECK-NEXT: $x1 = COPY %copy_assert_sext(<2 x s32>)49 ; CHECK-NEXT: RET_ReallyLR implicit $x150 %copy:_(<2 x s32>) = COPY $x051 %copy_assert_sext:_(<2 x s32>) = G_ASSERT_SEXT %copy(<2 x s32>), 1652 $x1 = COPY %copy_assert_sext(<2 x s32>)53 RET_ReallyLR implicit $x154 55...56---57name: fpr58alignment: 459legalized: true60tracksRegLiveness: true61body: |62 bb.0:63 liveins: $s0, $s164 65 ; G_ASSERT_SEXT should end up on a FPR.66 67 ; CHECK-LABEL: name: fpr68 ; CHECK: liveins: $s0, $s169 ; CHECK-NEXT: {{ $}}70 ; CHECK-NEXT: %copy:fpr(s32) = COPY $s071 ; CHECK-NEXT: %copy_assert_sext:fpr(s32) = G_ASSERT_SEXT %copy, 1672 ; CHECK-NEXT: $s1 = COPY %copy_assert_sext(s32)73 ; CHECK-NEXT: RET_ReallyLR implicit $s174 %copy:_(s32) = COPY $s075 %copy_assert_sext:_(s32) = G_ASSERT_SEXT %copy(s32), 1676 $s1 = COPY %copy_assert_sext(s32)77 RET_ReallyLR implicit $s178 79...80---81name: fpr_vector82alignment: 483legalized: true84tracksRegLiveness: true85body: |86 bb.0:87 liveins: $d0, $d188 89 ; G_ASSERT_SEXT should end up on a FPR.90 91 ; CHECK-LABEL: name: fpr_vector92 ; CHECK: liveins: $d0, $d193 ; CHECK-NEXT: {{ $}}94 ; CHECK-NEXT: %copy:fpr(<2 x s32>) = COPY $d095 ; CHECK-NEXT: %copy_assert_sext:fpr(<2 x s32>) = G_ASSERT_SEXT %copy, 1696 ; CHECK-NEXT: $d1 = COPY %copy_assert_sext(<2 x s32>)97 ; CHECK-NEXT: RET_ReallyLR implicit $d198 %copy:_(<2 x s32>) = COPY $d099 %copy_assert_sext:_(<2 x s32>) = G_ASSERT_SEXT %copy(<2 x s32>), 16100 $d1 = COPY %copy_assert_sext(<2 x s32>)101 RET_ReallyLR implicit $d1102 103...104---105name: in_between_cross_bank_copy106alignment: 4107legalized: true108tracksRegLiveness: true109body: |110 bb.0:111 liveins: $s0, $w1112 113 ; CHECK-LABEL: name: in_between_cross_bank_copy114 ; CHECK: liveins: $s0, $w1115 ; CHECK-NEXT: {{ $}}116 ; CHECK-NEXT: %copy:fpr(s32) = COPY $s0117 ; CHECK-NEXT: %copy_assert_sext:fpr(s32) = G_ASSERT_SEXT %copy, 16118 ; CHECK-NEXT: $w1 = COPY %copy_assert_sext(s32)119 ; CHECK-NEXT: RET_ReallyLR implicit $w1120 %copy:_(s32) = COPY $s0121 %copy_assert_sext:_(s32) = G_ASSERT_SEXT %copy(s32), 16122 $w1 = COPY %copy_assert_sext(s32)123 RET_ReallyLR implicit $w1124 125...126---127name: fpr_feeding_store128alignment: 4129legalized: true130tracksRegLiveness: true131body: |132 bb.0:133 liveins: $x0, $s0, $s1134 135 ; The G_ASSERT_SEXT should end up on a FPR, and there should be no copy136 ; between it and the G_STORE.137 138 ; CHECK-LABEL: name: fpr_feeding_store139 ; CHECK: liveins: $x0, $s0, $s1140 ; CHECK-NEXT: {{ $}}141 ; CHECK-NEXT: %ptr:gpr(p0) = COPY $x0142 ; CHECK-NEXT: %copy:fpr(s32) = COPY $s0143 ; CHECK-NEXT: %copy_assert_sext:fpr(s32) = G_ASSERT_SEXT %copy, 16144 ; CHECK-NEXT: G_STORE %copy_assert_sext(s32), %ptr(p0) :: (store (s32))145 ; CHECK-NEXT: RET_ReallyLR146 %ptr:_(p0) = COPY $x0147 %copy:_(s32) = COPY $s0148 %copy_assert_sext:_(s32) = G_ASSERT_SEXT %copy(s32), 16149 G_STORE %copy_assert_sext(s32), %ptr(p0) :: (store (s32))150 RET_ReallyLR151 152...153---154name: fpr_feeding_select155alignment: 4156legalized: true157tracksRegLiveness: true158machineFunctionInfo: {}159body: |160 bb.0:161 liveins: $d0, $x1, $w0162 163 ; G_ASSERT_SEXT and G_SELECT should both end up on FPRs.164 165 ; CHECK-LABEL: name: fpr_feeding_select166 ; CHECK: liveins: $d0, $x1, $w0167 ; CHECK-NEXT: {{ $}}168 ; CHECK-NEXT: %w0:gpr(s32) = COPY $w0169 ; CHECK-NEXT: %fpr:fpr(s64) = COPY $d0170 ; CHECK-NEXT: %fpr_assert_sext:fpr(s64) = G_ASSERT_SEXT %fpr, 32171 ; CHECK-NEXT: %gpr:gpr(s64) = COPY $x1172 ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr(s64) = COPY %gpr(s64)173 ; CHECK-NEXT: %select:fpr(s64) = G_SELECT %w0(s32), %fpr_assert_sext, [[COPY]]174 ; CHECK-NEXT: $d0 = COPY %select(s64)175 ; CHECK-NEXT: RET_ReallyLR implicit $d0176 %w0:_(s32) = COPY $w0177 %fpr:_(s64) = COPY $d0178 %fpr_assert_sext:_(s64) = G_ASSERT_SEXT %fpr, 32179 %gpr:_(s64) = COPY $x1180 %select:_(s64) = G_SELECT %w0, %fpr_assert_sext, %gpr181 $d0 = COPY %select(s64)182 RET_ReallyLR implicit $d0183 184...185---186name: fpr_feeding_phi187alignment: 4188legalized: true189tracksRegLiveness: true190body: |191 ; CHECK-LABEL: name: fpr_feeding_phi192 ; CHECK: bb.0:193 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)194 ; CHECK-NEXT: liveins: $s0, $w1195 ; CHECK-NEXT: {{ $}}196 ; CHECK-NEXT: %copy1:fpr(s32) = COPY $s0197 ; CHECK-NEXT: %copy2:gpr(s32) = COPY $w1198 ; CHECK-NEXT: %copy_assert_sext:fpr(s32) = G_ASSERT_SEXT %copy1, 16199 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY %copy1(s32)200 ; CHECK-NEXT: %cmp:gpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), %copy2201 ; CHECK-NEXT: G_BRCOND %cmp(s32), %bb.1202 ; CHECK-NEXT: G_BR %bb.1203 ; CHECK-NEXT: {{ $}}204 ; CHECK-NEXT: bb.1:205 ; CHECK-NEXT: successors: %bb.2(0x80000000)206 ; CHECK-NEXT: {{ $}}207 ; CHECK-NEXT: %bb1_val:gpr(s32) = COPY %copy2(s32)208 ; CHECK-NEXT: G_BR %bb.2209 ; CHECK-NEXT: {{ $}}210 ; CHECK-NEXT: bb.2:211 ; CHECK-NEXT: successors: %bb.0(0x80000000)212 ; CHECK-NEXT: {{ $}}213 ; CHECK-NEXT: %phi:fpr(s32) = G_PHI %copy_assert_sext(s32), %bb.0, %bb1_val(s32), %bb.1214 ; CHECK-NEXT: G_BR %bb.0215 bb.0:216 successors: %bb.1, %bb.2217 liveins: $s0, $w1218 %copy1:_(s32) = COPY $s0219 %copy2:_(s32) = COPY $w1220 221 ; This should produce a FPR.222 %copy_assert_sext:_(s32) = G_ASSERT_SEXT %copy1(s32), 16223 224 %cmp:_(s32) = G_ICMP intpred(eq), %copy1, %copy2225 G_BRCOND %cmp, %bb.1226 G_BR %bb.1227 bb.1:228 successors: %bb.2229 %bb1_val:_(s32) = COPY %copy2230 G_BR %bb.2231 bb.2:232 successors: %bb.0233 ; This should produce a FPR.234 %phi:_(s32) = G_PHI %copy_assert_sext, %bb.0, %bb1_val, %bb.1235 G_BR %bb.0236 237...238---239name: fed_by_fpr_phi240alignment: 4241legalized: true242tracksRegLiveness: true243body: |244 ; CHECK-LABEL: name: fed_by_fpr_phi245 ; CHECK: bb.0:246 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)247 ; CHECK-NEXT: liveins: $s0, $s1248 ; CHECK-NEXT: {{ $}}249 ; CHECK-NEXT: %copy1:fpr(s32) = COPY $s0250 ; CHECK-NEXT: %copy2:fpr(s32) = COPY $s1251 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY %copy1(s32)252 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr(s32) = COPY %copy2(s32)253 ; CHECK-NEXT: %cmp:gpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]254 ; CHECK-NEXT: G_BRCOND %cmp(s32), %bb.1255 ; CHECK-NEXT: G_BR %bb.1256 ; CHECK-NEXT: {{ $}}257 ; CHECK-NEXT: bb.1:258 ; CHECK-NEXT: successors: %bb.2(0x80000000)259 ; CHECK-NEXT: {{ $}}260 ; CHECK-NEXT: %bb1_val:gpr(s32) = COPY %copy2(s32)261 ; CHECK-NEXT: G_BR %bb.2262 ; CHECK-NEXT: {{ $}}263 ; CHECK-NEXT: bb.2:264 ; CHECK-NEXT: successors: %bb.0(0x80000000)265 ; CHECK-NEXT: {{ $}}266 ; CHECK-NEXT: %phi:fpr(s32) = G_PHI %copy1(s32), %bb.0, %bb1_val(s32), %bb.1267 ; CHECK-NEXT: %assert_sext:fpr(s32) = G_ASSERT_SEXT %phi, 16268 ; CHECK-NEXT: G_BR %bb.0269 bb.0:270 successors: %bb.1, %bb.2271 liveins: $s0, $s1272 %copy1:_(s32) = COPY $s0273 %copy2:_(s32) = COPY $s1274 %cmp:_(s32) = G_ICMP intpred(eq), %copy1, %copy2275 G_BRCOND %cmp, %bb.1276 G_BR %bb.1277 bb.1:278 successors: %bb.2279 %bb1_val:_(s32) = COPY %copy2280 G_BR %bb.2281 bb.2:282 successors: %bb.0283 ; The G_PHI and G_ASSERT_SEXT should both end up on FPRs.284 %phi:_(s32) = G_PHI %copy1, %bb.0, %bb1_val, %bb.1285 %assert_sext:_(s32) = G_ASSERT_SEXT %phi(s32), 16286 G_BR %bb.0287 288...289---290name: different_blocks_gpr291alignment: 4292legalized: true293tracksRegLiveness: true294body: |295 ; CHECK-LABEL: name: different_blocks_gpr296 ; CHECK: bb.0:297 ; CHECK-NEXT: successors: %bb.1(0x80000000)298 ; CHECK-NEXT: liveins: $w0, $w1299 ; CHECK-NEXT: {{ $}}300 ; CHECK-NEXT: %copy:gpr(s32) = COPY $w0301 ; CHECK-NEXT: G_BR %bb.1302 ; CHECK-NEXT: {{ $}}303 ; CHECK-NEXT: bb.1:304 ; CHECK-NEXT: %copy_assert_sext:gpr(s32) = G_ASSERT_SEXT %copy, 16305 ; CHECK-NEXT: $w1 = COPY %copy_assert_sext(s32)306 ; CHECK-NEXT: RET_ReallyLR implicit $w1307 bb.0:308 successors: %bb.1309 liveins: $w0, $w1310 %copy:_(s32) = COPY $w0311 G_BR %bb.1312 bb.1:313 ; The G_ASSERT_SEXT should end up on a GPR.314 %copy_assert_sext:_(s32) = G_ASSERT_SEXT %copy(s32), 16315 $w1 = COPY %copy_assert_sext316 RET_ReallyLR implicit $w1317 318...319---320name: different_blocks_fpr321alignment: 4322legalized: true323tracksRegLiveness: true324body: |325 ; CHECK-LABEL: name: different_blocks_fpr326 ; CHECK: bb.0:327 ; CHECK-NEXT: successors: %bb.1(0x80000000)328 ; CHECK-NEXT: liveins: $s0, $s1329 ; CHECK-NEXT: {{ $}}330 ; CHECK-NEXT: %copy:fpr(s32) = COPY $s0331 ; CHECK-NEXT: G_BR %bb.1332 ; CHECK-NEXT: {{ $}}333 ; CHECK-NEXT: bb.1:334 ; CHECK-NEXT: %copy_assert_sext:fpr(s32) = G_ASSERT_SEXT %copy, 16335 ; CHECK-NEXT: $s1 = COPY %copy_assert_sext(s32)336 ; CHECK-NEXT: RET_ReallyLR implicit $s1337 bb.0:338 successors: %bb.1339 liveins: $s0, $s1340 %copy:_(s32) = COPY $s0341 G_BR %bb.1342 bb.1:343 ; The G_ASSERT_SEXT should end up on a FPR.344 %copy_assert_sext:_(s32) = G_ASSERT_SEXT %copy(s32), 16345 $s1 = COPY %copy_assert_sext346 RET_ReallyLR implicit $s1347 348 349...350---351name: different_blocks_fpr_backedge352alignment: 4353legalized: true354tracksRegLiveness: true355body: |356 ; CHECK-LABEL: name: different_blocks_fpr_backedge357 ; CHECK: bb.0:358 ; CHECK-NEXT: successors: %bb.1(0x80000000)359 ; CHECK-NEXT: liveins: $s0, $s1360 ; CHECK-NEXT: {{ $}}361 ; CHECK-NEXT: %copy:fpr(s32) = COPY $s0362 ; CHECK-NEXT: G_BR %bb.1363 ; CHECK-NEXT: {{ $}}364 ; CHECK-NEXT: bb.1:365 ; CHECK-NEXT: successors: %bb.2(0x80000000)366 ; CHECK-NEXT: {{ $}}367 ; CHECK-NEXT: %copy_assert_sext1:fpr(s32) = G_ASSERT_SEXT %copy, 16368 ; CHECK-NEXT: G_BR %bb.2369 ; CHECK-NEXT: {{ $}}370 ; CHECK-NEXT: bb.2:371 ; CHECK-NEXT: successors: %bb.0(0x80000000)372 ; CHECK-NEXT: {{ $}}373 ; CHECK-NEXT: %copy_assert_sext2:fpr(s32) = G_ASSERT_SEXT %copy_assert_sext1, 16374 ; CHECK-NEXT: %copy_assert_sext3:fpr(s32) = G_ASSERT_SEXT %copy_assert_sext2, 16375 ; CHECK-NEXT: G_BR %bb.0376 bb.0:377 successors: %bb.1378 liveins: $s0, $s1379 %copy:_(s32) = COPY $s0380 G_BR %bb.1381 bb.1:382 successors: %bb.2383 ; All of the G_ASSERT_SEXTs should end up on FPRs.384 %copy_assert_sext1:_(s32) = G_ASSERT_SEXT %copy(s32), 16385 G_BR %bb.2386 bb.2:387 successors: %bb.0388 %copy_assert_sext2:_(s32) = G_ASSERT_SEXT %copy_assert_sext1(s32), 16389 %copy_assert_sext3:_(s32) = G_ASSERT_SEXT %copy_assert_sext2(s32), 16390 G_BR %bb.0391