brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.1 KiB · 02e3d7e Raw
263 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-amd-amdhsa -start-before=livevars -stop-after=twoaddressinstruction -verify-machineinstrs -o - %s | FileCheck %s3 4# FIXME: update_mir_test_checks tries to incorrectly re-use a variable5# name used for a copy, so some of the check variable names were6# manually fixed.7 8# Check for LiveVariables verifier error after lowering SI_END_CF9 10---11name:            live_variables_update_block_split12tracksRegLiveness: true13body:             |14  ; CHECK-LABEL: name: live_variables_update_block_split15  ; CHECK: bb.0:16  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)17  ; CHECK-NEXT:   liveins: $vgpr018  ; CHECK-NEXT: {{  $}}19  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY killed $vgpr020  ; CHECK-NEXT:   [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec21  ; CHECK-NEXT:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 0, killed [[COPY]], implicit $exec22  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B32_e32_]]23  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY killed [[V_MOV_B32_e32_]]24  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec25  ; CHECK-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY3]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc26  ; CHECK-NEXT:   [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY3]], implicit-def dead $scc27  ; CHECK-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]28  ; CHECK-NEXT:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term killed [[S_XOR_B64_]], implicit $exec29  ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec30  ; CHECK-NEXT:   S_BRANCH %bb.231  ; CHECK-NEXT: {{  $}}32  ; CHECK-NEXT: bb.1:33  ; CHECK-NEXT:   successors: %bb.3(0x80000000)34  ; CHECK-NEXT: {{  $}}35  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_64_xexec = COPY killed [[S_MOV_B64_term]]36  ; CHECK-NEXT:   $exec = S_OR_B64_term $exec, killed [[COPY4]], implicit-def $scc37  ; CHECK-NEXT: {{  $}}38  ; CHECK-NEXT: bb.3:39  ; CHECK-NEXT:   successors: %bb.2(0x80000000)40  ; CHECK-NEXT: {{  $}}41  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY killed [[COPY1]]42  ; CHECK-NEXT:   [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = nsw V_ADD_U32_e32 1, killed [[COPY5]], implicit $exec43  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY killed [[V_ADD_U32_e32_]]44  ; CHECK-NEXT: {{  $}}45  ; CHECK-NEXT: bb.2:46  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)47  ; CHECK-NEXT: {{  $}}48  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:vgpr_32 = COPY killed [[COPY2]]49  ; CHECK-NEXT:   GLOBAL_STORE_DWORD undef %10:vreg_64, [[COPY6]], 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)50  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:vgpr_32 = COPY killed [[COPY6]]51  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY7]]52  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY killed [[COPY7]]53  ; CHECK-NEXT:   [[COPY8:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec54  ; CHECK-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY8]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc55  ; CHECK-NEXT:   [[S_XOR_B64_1:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_1]], [[COPY8]], implicit-def dead $scc56  ; CHECK-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_1]]57  ; CHECK-NEXT:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term killed [[S_XOR_B64_1]], implicit $exec58  ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec59  ; CHECK-NEXT:   S_BRANCH %bb.260  bb.0:61    successors: %bb.2(0x40000000), %bb.1(0x40000000)62    liveins: $vgpr063 64    %0:vgpr_32 = COPY killed $vgpr065    %1:vgpr_32 = V_MOV_B32_e32 0, implicit $exec66    %2:sreg_64_xexec = V_CMP_EQ_U32_e64 0, killed %0, implicit $exec67    %3:sreg_64_xexec = SI_IF %2, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec68    S_BRANCH %bb.269 70  bb.1:71    successors: %bb.2(0x80000000)72 73    %4:sreg_64_xexec = PHI %5, %bb.2, %3, %bb.074    %6:vgpr_32 = PHI %7, %bb.2, %1, %bb.075    SI_END_CF killed %4, implicit-def $exec, implicit-def dead $scc, implicit $exec76    %8:vgpr_32 = nsw V_ADD_U32_e32 1, killed %6, implicit $exec77 78  bb.2:79    successors: %bb.2(0x40000000), %bb.1(0x40000000)80 81    %9:vgpr_32 = PHI %8, %bb.1, %7, %bb.2, %1, %bb.082    GLOBAL_STORE_DWORD undef %10:vreg_64, %9, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)83    %7:vgpr_32 = COPY killed %984    %5:sreg_64_xexec = SI_IF %2, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec85    S_BRANCH %bb.286 87...88 89# Here %4 which is not a phi join reg has its last use in bb.2. When90# bb.2 is split into MBB/SplitBB, %4 will be live through MBB.91---92name: live_variables_update_block_split_non_phi_live_across93tracksRegLiveness: true94body:             |95  ; CHECK-LABEL: name: live_variables_update_block_split_non_phi_live_across96  ; CHECK: bb.0:97  ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.1(0x40000000)98  ; CHECK-NEXT:   liveins: $vgpr099  ; CHECK-NEXT: {{  $}}100  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY killed $vgpr0101  ; CHECK-NEXT:   [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec102  ; CHECK-NEXT:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 0, killed [[COPY]], implicit $exec103  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B32_e32_]]104  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY killed [[V_MOV_B32_e32_]]105  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec106  ; CHECK-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY3]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc107  ; CHECK-NEXT:   [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY3]], implicit-def dead $scc108  ; CHECK-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]109  ; CHECK-NEXT:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term killed [[S_XOR_B64_]], implicit $exec110  ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec111  ; CHECK-NEXT:   S_BRANCH %bb.3112  ; CHECK-NEXT: {{  $}}113  ; CHECK-NEXT: bb.1:114  ; CHECK-NEXT:   successors: %bb.2(0x80000000)115  ; CHECK-NEXT: {{  $}}116  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:vgpr_32 = COPY killed [[COPY1]]117  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:sreg_64_xexec = COPY killed [[S_MOV_B64_term]]118  ; CHECK-NEXT:   S_BRANCH %bb.2119  ; CHECK-NEXT: {{  $}}120  ; CHECK-NEXT: bb.2:121  ; CHECK-NEXT:   successors: %bb.4(0x80000000)122  ; CHECK-NEXT: {{  $}}123  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_64_xexec = COPY killed [[COPY5]]124  ; CHECK-NEXT:   $exec = S_OR_B64_term $exec, killed [[COPY6]], implicit-def $scc125  ; CHECK-NEXT: {{  $}}126  ; CHECK-NEXT: bb.4:127  ; CHECK-NEXT:   successors: %bb.3(0x80000000)128  ; CHECK-NEXT: {{  $}}129  ; CHECK-NEXT:   [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = nsw V_ADD_U32_e32 1, killed [[COPY4]], implicit $exec130  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY killed [[V_ADD_U32_e32_]]131  ; CHECK-NEXT: {{  $}}132  ; CHECK-NEXT: bb.3:133  ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.1(0x40000000)134  ; CHECK-NEXT: {{  $}}135  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:vgpr_32 = COPY killed [[COPY2]]136  ; CHECK-NEXT:   GLOBAL_STORE_DWORD undef %11:vreg_64, [[COPY7]], 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)137  ; CHECK-NEXT:   [[COPY8:%[0-9]+]]:vgpr_32 = COPY killed [[COPY7]]138  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY8]]139  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY killed [[COPY8]]140  ; CHECK-NEXT:   [[COPY9:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec141  ; CHECK-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY9]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc142  ; CHECK-NEXT:   [[S_XOR_B64_1:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_1]], [[COPY9]], implicit-def dead $scc143  ; CHECK-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_1]]144  ; CHECK-NEXT:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term killed [[S_XOR_B64_1]], implicit $exec145  ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec146  ; CHECK-NEXT:   S_BRANCH %bb.3147  bb.0:148    successors: %bb.3(0x40000000), %bb.1(0x40000000)149    liveins: $vgpr0150 151    %0:vgpr_32 = COPY killed $vgpr0152    %1:vgpr_32 = V_MOV_B32_e32 0, implicit $exec153    %2:sreg_64_xexec = V_CMP_EQ_U32_e64 0, killed %0, implicit $exec154    %3:sreg_64_xexec = SI_IF %2, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec155    S_BRANCH %bb.3156 157  bb.1:158    successors: %bb.2(0x80000000)159 160    %4:sreg_64_xexec = PHI %5, %bb.3, %3, %bb.0161    %6:vgpr_32 = PHI %7, %bb.3, %1, %bb.0162    S_BRANCH %bb.2163 164  bb.2:165    successors: %bb.3(0x80000000)166 167    %8:sreg_64_xexec = COPY %4168    SI_END_CF killed %8, implicit-def $exec, implicit-def dead $scc, implicit $exec169    %9:vgpr_32 = nsw V_ADD_U32_e32 1, killed %6, implicit $exec170 171  bb.3:172    successors: %bb.3(0x40000000), %bb.1(0x40000000)173 174    %10:vgpr_32 = PHI %9, %bb.2, %7, %bb.3, %1, %bb.0175    GLOBAL_STORE_DWORD undef %11:vreg_64, %10, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)176    %7:vgpr_32 = COPY killed %10177    %5:sreg_64_xexec = SI_IF %2, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec178    S_BRANCH %bb.3179 180...181 182# Check we don't get "Block should not be in AliveBlocks" for183# registers defined before si_end_cf184---185name:            live_variables_update_block_split_split_killed_def_before_si_end_cf186tracksRegLiveness: true187body:             |188  ; CHECK-LABEL: name: live_variables_update_block_split_split_killed_def_before_si_end_cf189  ; CHECK: bb.0:190  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)191  ; CHECK-NEXT:   liveins: $vgpr0192  ; CHECK-NEXT: {{  $}}193  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY killed $vgpr0194  ; CHECK-NEXT:   [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec195  ; CHECK-NEXT:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 0, killed [[COPY]], implicit $exec196  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B32_e32_]]197  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY killed [[V_MOV_B32_e32_]]198  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec199  ; CHECK-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY3]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc200  ; CHECK-NEXT:   [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY3]], implicit-def dead $scc201  ; CHECK-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]202  ; CHECK-NEXT:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term killed [[S_XOR_B64_]], implicit $exec203  ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec204  ; CHECK-NEXT:   S_BRANCH %bb.2205  ; CHECK-NEXT: {{  $}}206  ; CHECK-NEXT: bb.1:207  ; CHECK-NEXT:   successors: %bb.3(0x80000000)208  ; CHECK-NEXT: {{  $}}209  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_64_xexec = COPY killed [[S_MOV_B64_term]]210  ; CHECK-NEXT:   [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 1211  ; CHECK-NEXT:   $exec = S_OR_B64_term $exec, killed [[COPY4]], implicit-def $scc212  ; CHECK-NEXT: {{  $}}213  ; CHECK-NEXT: bb.3:214  ; CHECK-NEXT:   successors: %bb.2(0x80000000)215  ; CHECK-NEXT: {{  $}}216  ; CHECK-NEXT:   S_NOP 0, implicit killed [[S_MOV_B64_]]217  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY killed [[COPY1]]218  ; CHECK-NEXT:   [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = nsw V_ADD_U32_e32 1, killed [[COPY5]], implicit $exec219  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY killed [[V_ADD_U32_e32_]]220  ; CHECK-NEXT: {{  $}}221  ; CHECK-NEXT: bb.2:222  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)223  ; CHECK-NEXT: {{  $}}224  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:vgpr_32 = COPY killed [[COPY2]]225  ; CHECK-NEXT:   GLOBAL_STORE_DWORD undef %11:vreg_64, [[COPY6]], 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)226  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:vgpr_32 = COPY killed [[COPY6]]227  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY7]]228  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY killed [[COPY7]]229  ; CHECK-NEXT:   [[COPY8:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec230  ; CHECK-NEXT:   [[S_AND_B64_1:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY8]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc231  ; CHECK-NEXT:   [[S_XOR_B64_1:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_1]], [[COPY8]], implicit-def dead $scc232  ; CHECK-NEXT:   $exec = S_MOV_B64_term killed [[S_AND_B64_1]]233  ; CHECK-NEXT:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term killed [[S_XOR_B64_1]], implicit $exec234  ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec235  ; CHECK-NEXT:   S_BRANCH %bb.2236  bb.0:237    liveins: $vgpr0238 239    %0:vgpr_32 = COPY killed $vgpr0240    %1:vgpr_32 = V_MOV_B32_e32 0, implicit $exec241    %2:sreg_64_xexec = V_CMP_EQ_U32_e64 0, killed %0, implicit $exec242    %3:sreg_64_xexec = SI_IF %2, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec243    S_BRANCH %bb.2244 245  bb.1:246    %4:sreg_64_xexec = PHI %5, %bb.2, %3, %bb.0247    %6:vgpr_32 = PHI %7, %bb.2, %1, %bb.0248    %8:sreg_64 = S_MOV_B64 1249    SI_END_CF killed %4, implicit-def $exec, implicit-def dead $scc, implicit $exec250    S_NOP 0, implicit killed %8251    %9:vgpr_32 = nsw V_ADD_U32_e32 1, killed %6, implicit $exec252 253  bb.2:254    successors: %bb.2(0x40000000), %bb.1(0x40000000)255 256    %10:vgpr_32 = PHI %9, %bb.1, %7, %bb.2, %1, %bb.0257    GLOBAL_STORE_DWORD undef %11:vreg_64, %10, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)258    %7:vgpr_32 = COPY killed %10259    %5:sreg_64_xexec = SI_IF %2, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec260    S_BRANCH %bb.2261 262...263