brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.0 KiB · 8e0c544 Raw
491 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx906 -verify-coalescing -verify-machineinstrs -amdgpu-enable-rewrite-partial-reg-uses=false -start-before=register-coalescer -stop-after=machine-scheduler -o - %s | FileCheck %s3 4# Tests that break due to the handling of partially undef registers5# when whole register identity copies are erased.6 7# Make sure there is no verifier error after8# RenameIndepependentSubregs processes this. The coalescer would9# remove the identity copy in %bb.1, and leave behind a dummy interval10# across bb.1 with no corresponding value anywhere in the function.11 12---13name:            identity_copy_undef_subrange14tracksRegLiveness: true15body:             |16  ; CHECK-LABEL: name: identity_copy_undef_subrange17  ; CHECK: bb.0:18  ; CHECK-NEXT:   successors: %bb.1(0x80000000)19  ; CHECK-NEXT:   liveins: $vgpr020  ; CHECK-NEXT: {{  $}}21  ; CHECK-NEXT:   undef [[COPY:%[0-9]+]].sub1:vreg_64 = COPY $vgpr022  ; CHECK-NEXT: {{  $}}23  ; CHECK-NEXT: bb.1:24  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)25  ; CHECK-NEXT: {{  $}}26  ; CHECK-NEXT:   S_CBRANCH_EXECNZ %bb.1, implicit $exec27  ; CHECK-NEXT:   S_BRANCH %bb.228  ; CHECK-NEXT: {{  $}}29  ; CHECK-NEXT: bb.2:30  ; CHECK-NEXT:   successors: %bb.1(0x80000000)31  ; CHECK-NEXT: {{  $}}32  ; CHECK-NEXT:   undef [[COPY:%[0-9]+]].sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 [[COPY]].sub1, implicit $mode, implicit $exec33  ; CHECK-NEXT:   S_BRANCH %bb.134  bb.0:35    liveins: $vgpr036 37    undef %0.sub1:vreg_64 = COPY killed $vgpr038 39  bb.1:40    successors: %bb.2, %bb.141 42    %0:vreg_64 = COPY %043    S_CBRANCH_EXECNZ %bb.1, implicit $exec44    S_BRANCH %bb.245 46  bb.2:47    undef %0.sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 killed %0.sub1, implicit $mode, implicit $exec48    S_BRANCH %bb.149 50...51 52# Test another use of the register inside the block.53---54name:            identity_copy_undef_subrange_other_uses055tracksRegLiveness: true56body:             |57  ; CHECK-LABEL: name: identity_copy_undef_subrange_other_uses058  ; CHECK: bb.0:59  ; CHECK-NEXT:   successors: %bb.1(0x80000000)60  ; CHECK-NEXT:   liveins: $vgpr061  ; CHECK-NEXT: {{  $}}62  ; CHECK-NEXT:   undef [[COPY:%[0-9]+]].sub1:vreg_64 = COPY $vgpr063  ; CHECK-NEXT: {{  $}}64  ; CHECK-NEXT: bb.1:65  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)66  ; CHECK-NEXT: {{  $}}67  ; CHECK-NEXT:   S_NOP 0, implicit undef [[COPY]].sub068  ; CHECK-NEXT:   S_NOP 0, implicit undef [[COPY]].sub069  ; CHECK-NEXT:   S_CBRANCH_EXECNZ %bb.1, implicit $exec70  ; CHECK-NEXT:   S_BRANCH %bb.271  ; CHECK-NEXT: {{  $}}72  ; CHECK-NEXT: bb.2:73  ; CHECK-NEXT:   successors: %bb.1(0x80000000)74  ; CHECK-NEXT: {{  $}}75  ; CHECK-NEXT:   undef [[COPY:%[0-9]+]].sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 [[COPY]].sub1, implicit $mode, implicit $exec76  ; CHECK-NEXT:   S_BRANCH %bb.177  bb.0:78    liveins: $vgpr079    undef %0.sub1:vreg_64 = COPY killed $vgpr080 81  bb.1:82    successors: %bb.2, %bb.183 84    %0:vreg_64 = COPY %085    S_NOP 0, implicit %0.sub086    S_NOP 0, implicit %0.sub087    S_CBRANCH_EXECNZ %bb.1, implicit $exec88    S_BRANCH %bb.289 90  bb.2:91    undef %0.sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 killed %0.sub1, implicit $mode, implicit $exec92    S_BRANCH %bb.193 94...95 96---97name: second_identity_copy98tracksRegLiveness: true99body:             |100  ; CHECK-LABEL: name: second_identity_copy101  ; CHECK: bb.0:102  ; CHECK-NEXT:   successors: %bb.1(0x80000000)103  ; CHECK-NEXT:   liveins: $vgpr0104  ; CHECK-NEXT: {{  $}}105  ; CHECK-NEXT:   undef [[COPY:%[0-9]+]].sub1:vreg_64 = COPY $vgpr0106  ; CHECK-NEXT: {{  $}}107  ; CHECK-NEXT: bb.1:108  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)109  ; CHECK-NEXT: {{  $}}110  ; CHECK-NEXT:   S_CBRANCH_EXECNZ %bb.1, implicit $exec111  ; CHECK-NEXT:   S_BRANCH %bb.2112  ; CHECK-NEXT: {{  $}}113  ; CHECK-NEXT: bb.2:114  ; CHECK-NEXT:   successors: %bb.1(0x80000000)115  ; CHECK-NEXT: {{  $}}116  ; CHECK-NEXT:   undef [[COPY:%[0-9]+]].sub1:vreg_64 = nofpexcept V_MUL_F32_e32 0, [[COPY]].sub1, implicit $mode, implicit $exec117  ; CHECK-NEXT:   S_BRANCH %bb.1118  bb.0:119    liveins: $vgpr0120 121    undef %0.sub1:vreg_64 = COPY killed $vgpr0122 123  bb.1:124    successors: %bb.2, %bb.1125 126    %0:vreg_64 = COPY killed %0127    %0:vreg_64 = COPY %0128    S_CBRANCH_EXECNZ %bb.1, implicit $exec129    S_BRANCH %bb.2130 131  bb.2:132    undef %0.sub1:vreg_64 = nofpexcept V_MUL_F32_e32 0, killed %0.sub1, implicit $mode, implicit $exec133    S_BRANCH %bb.1134 135...136 137---138name: second_identity_copy_undef_lane_outblock139tracksRegLiveness: true140body:             |141  ; CHECK-LABEL: name: second_identity_copy_undef_lane_outblock142  ; CHECK: bb.0:143  ; CHECK-NEXT:   successors: %bb.1(0x80000000)144  ; CHECK-NEXT:   liveins: $vgpr0145  ; CHECK-NEXT: {{  $}}146  ; CHECK-NEXT:   undef [[COPY:%[0-9]+]].sub1:vreg_64 = COPY $vgpr0147  ; CHECK-NEXT: {{  $}}148  ; CHECK-NEXT: bb.1:149  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)150  ; CHECK-NEXT: {{  $}}151  ; CHECK-NEXT:   S_CBRANCH_EXECNZ %bb.1, implicit $exec152  ; CHECK-NEXT:   S_BRANCH %bb.2153  ; CHECK-NEXT: {{  $}}154  ; CHECK-NEXT: bb.2:155  ; CHECK-NEXT:   successors: %bb.1(0x80000000)156  ; CHECK-NEXT: {{  $}}157  ; CHECK-NEXT:   [[COPY:%[0-9]+]].sub1:vreg_64 = nofpexcept V_MUL_F32_e32 0, [[COPY]].sub1, implicit $mode, implicit $exec158  ; CHECK-NEXT:   S_BRANCH %bb.1159  bb.0:160    liveins: $vgpr0161 162    undef %0.sub1:vreg_64 = COPY killed $vgpr0163 164  bb.1:165    successors: %bb.2, %bb.1166 167    %0:vreg_64 = COPY killed %0168    %0:vreg_64 = COPY %0169    S_CBRANCH_EXECNZ %bb.1, implicit $exec170    S_BRANCH %bb.2171 172  bb.2:173    %0.sub1:vreg_64 = nofpexcept V_MUL_F32_e32 0, killed %0.sub1, implicit $mode, implicit $exec174    S_BRANCH %bb.1175 176...177 178# The same value number appears in multiple blocks179---180name: identity_copy_undef_subrange_null_vninfo_to_remove181tracksRegLiveness: true182body:             |183  ; CHECK-LABEL: name: identity_copy_undef_subrange_null_vninfo_to_remove184  ; CHECK: bb.0:185  ; CHECK-NEXT:   successors: %bb.1(0x80000000)186  ; CHECK-NEXT:   liveins: $vgpr0187  ; CHECK-NEXT: {{  $}}188  ; CHECK-NEXT:   undef [[COPY:%[0-9]+]].sub1:vreg_64 = COPY $vgpr0189  ; CHECK-NEXT: {{  $}}190  ; CHECK-NEXT: bb.1:191  ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.2(0x40000000)192  ; CHECK-NEXT: {{  $}}193  ; CHECK-NEXT:   S_CBRANCH_EXECNZ %bb.3, implicit $exec194  ; CHECK-NEXT: {{  $}}195  ; CHECK-NEXT: bb.2:196  ; CHECK-NEXT:   successors: %bb.1(0x80000000)197  ; CHECK-NEXT: {{  $}}198  ; CHECK-NEXT:   S_NOP 0, implicit undef [[COPY]].sub0199  ; CHECK-NEXT:   undef [[COPY:%[0-9]+]].sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 [[COPY]].sub1, implicit $mode, implicit $exec200  ; CHECK-NEXT:   S_BRANCH %bb.1201  ; CHECK-NEXT: {{  $}}202  ; CHECK-NEXT: bb.3:203  ; CHECK-NEXT:   S_NOP 0, implicit undef [[COPY]].sub0204  bb.0:205    liveins: $vgpr0206 207    undef %0.sub1:vreg_64 = COPY killed $vgpr0208 209  bb.1:210    %0:vreg_64 = COPY %0211    S_CBRANCH_EXECNZ %bb.3, implicit $exec212 213  bb.2:214    S_NOP 0, implicit %0.sub0215    undef %0.sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 killed %0.sub1, implicit $mode, implicit $exec216    S_BRANCH %bb.1217 218  bb.3:219    S_NOP 0, implicit %0.sub0220 221...222 223---224name: undef_copy_self_loop0225tracksRegLiveness: true226body:             |227  ; CHECK-LABEL: name: undef_copy_self_loop0228  ; CHECK: bb.0:229  ; CHECK-NEXT:   successors: %bb.1(0x80000000)230  ; CHECK-NEXT:   liveins: $vgpr0231  ; CHECK-NEXT: {{  $}}232  ; CHECK-NEXT:   undef [[COPY:%[0-9]+]].sub1:vreg_64 = COPY $vgpr0233  ; CHECK-NEXT: {{  $}}234  ; CHECK-NEXT: bb.1:235  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)236  ; CHECK-NEXT: {{  $}}237  ; CHECK-NEXT:   S_CBRANCH_EXECNZ %bb.1, implicit $exec238  ; CHECK-NEXT: {{  $}}239  ; CHECK-NEXT: bb.2:240  ; CHECK-NEXT:   S_NOP 0, implicit undef [[COPY]].sub0241  bb.0:242    liveins: $vgpr0243 244    undef %0.sub1:vreg_64 = COPY killed $vgpr0245 246  bb.1:247    %0:vreg_64 = COPY %0248    S_CBRANCH_EXECNZ %bb.1, implicit $exec249 250  bb.2:251    S_NOP 0, implicit %0.sub0252 253...254 255---256name: undef_copy_self_loop1257tracksRegLiveness: true258body:             |259  ; CHECK-LABEL: name: undef_copy_self_loop1260  ; CHECK: bb.0:261  ; CHECK-NEXT:   successors: %bb.1(0x80000000)262  ; CHECK-NEXT:   liveins: $vgpr0263  ; CHECK-NEXT: {{  $}}264  ; CHECK-NEXT:   undef [[COPY:%[0-9]+]].sub1:vreg_64 = COPY $vgpr0265  ; CHECK-NEXT: {{  $}}266  ; CHECK-NEXT: bb.1:267  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)268  ; CHECK-NEXT: {{  $}}269  ; CHECK-NEXT:   S_CBRANCH_EXECNZ %bb.1, implicit $exec270  ; CHECK-NEXT: {{  $}}271  ; CHECK-NEXT: bb.2:272  ; CHECK-NEXT:   S_NOP 0, implicit [[COPY]].sub1273  bb.0:274    liveins: $vgpr0275 276    undef %0.sub1:vreg_64 = COPY killed $vgpr0277 278  bb.1:279    %0:vreg_64 = COPY %0280    S_CBRANCH_EXECNZ %bb.1, implicit $exec281 282  bb.2:283    S_NOP 0, implicit %0.sub1284 285...286 287# The coalescing of the %0 = %2 COPY in %bb.2 needs to prune the dead288# phi range across %bb.1 after it is erased.289---290name: prune_subrange_phi_value_0291tracksRegLiveness: true292body:             |293  ; CHECK-LABEL: name: prune_subrange_phi_value_0294  ; CHECK: bb.0:295  ; CHECK-NEXT:   successors: %bb.1(0x80000000)296  ; CHECK-NEXT:   liveins: $vgpr0297  ; CHECK-NEXT: {{  $}}298  ; CHECK-NEXT:   dead undef [[COPY:%[0-9]+]].sub1:vreg_64 = COPY $vgpr0299  ; CHECK-NEXT: {{  $}}300  ; CHECK-NEXT: bb.1:301  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)302  ; CHECK-NEXT: {{  $}}303  ; CHECK-NEXT:   S_CBRANCH_EXECNZ %bb.1, implicit $exec304  ; CHECK-NEXT:   S_BRANCH %bb.2305  ; CHECK-NEXT: {{  $}}306  ; CHECK-NEXT: bb.2:307  ; CHECK-NEXT:   successors: %bb.1(0x80000000)308  ; CHECK-NEXT: {{  $}}309  ; CHECK-NEXT:   S_BRANCH %bb.1310  bb.0:311    liveins: $vgpr0312 313    undef %0.sub1:vreg_64 = COPY killed $vgpr0314 315  bb.1:316    successors: %bb.2, %bb.1317 318    %1:vreg_64 = COPY killed %0319    %0:vreg_64 = COPY %1320    S_CBRANCH_EXECNZ %bb.1, implicit $exec321    S_BRANCH %bb.2322 323  bb.2:324    undef %2.sub1:vreg_64 = COPY %0.sub1325    %0:vreg_64 = COPY killed %2326    S_BRANCH %bb.1327 328...329 330---331name: prune_subrange_phi_value_0_0332tracksRegLiveness: true333body:             |334  ; CHECK-LABEL: name: prune_subrange_phi_value_0_0335  ; CHECK: bb.0:336  ; CHECK-NEXT:   successors: %bb.1(0x80000000)337  ; CHECK-NEXT:   liveins: $vgpr0338  ; CHECK-NEXT: {{  $}}339  ; CHECK-NEXT:   dead undef [[COPY:%[0-9]+]].sub1:vreg_64 = COPY $vgpr0340  ; CHECK-NEXT: {{  $}}341  ; CHECK-NEXT: bb.1:342  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)343  ; CHECK-NEXT: {{  $}}344  ; CHECK-NEXT:   S_CBRANCH_EXECNZ %bb.1, implicit $exec345  ; CHECK-NEXT:   S_BRANCH %bb.2346  ; CHECK-NEXT: {{  $}}347  ; CHECK-NEXT: bb.2:348  ; CHECK-NEXT:   successors: %bb.1(0x80000000)349  ; CHECK-NEXT: {{  $}}350  ; CHECK-NEXT:   S_BRANCH %bb.1351  bb.0:352    liveins: $vgpr0353 354    undef %0.sub1:vreg_64 = COPY killed $vgpr0355 356  bb.1:357    successors: %bb.2, %bb.1358 359    %1:vreg_64 = COPY killed %0360    %0:vreg_64 = COPY %1361    S_CBRANCH_EXECNZ %bb.1, implicit $exec362    S_BRANCH %bb.2363 364  bb.2:365    undef %0.sub1:vreg_64 = COPY %0.sub1366    S_BRANCH %bb.1367 368...369 370---371name: prune_subrange_phi_value_0_1372tracksRegLiveness: true373body:             |374  ; CHECK-LABEL: name: prune_subrange_phi_value_0_1375  ; CHECK: bb.0:376  ; CHECK-NEXT:   successors: %bb.1(0x80000000)377  ; CHECK-NEXT:   liveins: $vgpr0378  ; CHECK-NEXT: {{  $}}379  ; CHECK-NEXT:   dead undef [[COPY:%[0-9]+]].sub1:vreg_64 = COPY $vgpr0380  ; CHECK-NEXT: {{  $}}381  ; CHECK-NEXT: bb.1:382  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)383  ; CHECK-NEXT: {{  $}}384  ; CHECK-NEXT:   S_CBRANCH_EXECNZ %bb.1, implicit $exec385  ; CHECK-NEXT:   S_BRANCH %bb.2386  ; CHECK-NEXT: {{  $}}387  ; CHECK-NEXT: bb.2:388  ; CHECK-NEXT:   successors: %bb.1(0x80000000)389  ; CHECK-NEXT: {{  $}}390  ; CHECK-NEXT:   S_BRANCH %bb.1391  bb.0:392    liveins: $vgpr0393 394    undef %0.sub1:vreg_64 = COPY killed $vgpr0395 396  bb.1:397    successors: %bb.2, %bb.1398 399    %1:vreg_64 = COPY killed %0400    %0:vreg_64 = COPY %1401    S_CBRANCH_EXECNZ %bb.1, implicit $exec402    S_BRANCH %bb.2403 404  bb.2:405    S_BRANCH %bb.1406 407...408 409# Variant of testcase that asserts since there wasn't already an410# incoming segment at the erased copy, and no valid end point.411---412name:            prune_subrange_phi_value_1413tracksRegLiveness: true414body:             |415  ; CHECK-LABEL: name: prune_subrange_phi_value_1416  ; CHECK: bb.0:417  ; CHECK-NEXT:   successors: %bb.1(0x80000000)418  ; CHECK-NEXT:   liveins: $vgpr0419  ; CHECK-NEXT: {{  $}}420  ; CHECK-NEXT:   undef [[COPY:%[0-9]+]].sub1:vreg_64 = COPY $vgpr0421  ; CHECK-NEXT: {{  $}}422  ; CHECK-NEXT: bb.1:423  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)424  ; CHECK-NEXT: {{  $}}425  ; CHECK-NEXT:   S_CBRANCH_EXECNZ %bb.1, implicit $exec426  ; CHECK-NEXT:   S_BRANCH %bb.2427  ; CHECK-NEXT: {{  $}}428  ; CHECK-NEXT: bb.2:429  ; CHECK-NEXT:   successors: %bb.1(0x80000000)430  ; CHECK-NEXT: {{  $}}431  ; CHECK-NEXT:   undef [[COPY:%[0-9]+]].sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 [[COPY]].sub1, implicit $mode, implicit $exec432  ; CHECK-NEXT:   S_BRANCH %bb.1433  bb.0:434    liveins: $vgpr0435 436    undef %0.sub1:vreg_64 = COPY killed $vgpr0437 438  bb.1:439    successors: %bb.2, %bb.1440 441    %0:vreg_64 = COPY killed %0442    S_CBRANCH_EXECNZ %bb.1, implicit $exec443    S_BRANCH %bb.2444 445  bb.2:446    undef %1.sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 killed %0.sub1, implicit $mode, implicit $exec447    %0:vreg_64 = COPY killed %1448    S_BRANCH %bb.1449 450...451 452---453name:            prune_subrange_phi_value_2454tracksRegLiveness: true455body:             |456  ; CHECK-LABEL: name: prune_subrange_phi_value_2457  ; CHECK: bb.0:458  ; CHECK-NEXT:   successors: %bb.1(0x80000000)459  ; CHECK-NEXT:   liveins: $vgpr0460  ; CHECK-NEXT: {{  $}}461  ; CHECK-NEXT:   undef [[COPY:%[0-9]+]].sub1:vreg_64 = COPY $vgpr0462  ; CHECK-NEXT: {{  $}}463  ; CHECK-NEXT: bb.1:464  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)465  ; CHECK-NEXT: {{  $}}466  ; CHECK-NEXT:   S_CBRANCH_EXECNZ %bb.1, implicit $exec467  ; CHECK-NEXT:   S_BRANCH %bb.2468  ; CHECK-NEXT: {{  $}}469  ; CHECK-NEXT: bb.2:470  ; CHECK-NEXT:   successors: %bb.1(0x80000000)471  ; CHECK-NEXT: {{  $}}472  ; CHECK-NEXT:   [[COPY:%[0-9]+]].sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 [[COPY]].sub1, implicit $mode, implicit $exec473  ; CHECK-NEXT:   S_BRANCH %bb.1474  bb.0:475    liveins: $vgpr0476 477    undef %0.sub1:vreg_64 = COPY killed $vgpr0478 479  bb.1:480    successors: %bb.2, %bb.1481 482    %0:vreg_64 = COPY killed %0483    S_CBRANCH_EXECNZ %bb.1, implicit $exec484    S_BRANCH %bb.2485 486  bb.2:487    %0.sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 %0.sub1, implicit $mode, implicit $exec488    S_BRANCH %bb.1489 490...491