brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.6 KiB · 496e01e Raw
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