99 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -o - -verify-coalescing -run-pass=register-coalescer %s | FileCheck -check-prefix=GCN %s3 4---5# Do not rematerialize V_MOV_B32 at COPY because source register %1 is killed.6 7name: no_remat_killed_src_in_inst8tracksRegLiveness: true9body: |10 bb.0:11 liveins: $vgpr012 13 ; GCN-LABEL: name: no_remat_killed_src_in_inst14 ; GCN: liveins: $vgpr015 ; GCN-NEXT: {{ $}}16 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr017 ; GCN-NEXT: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 1, [[COPY]], implicit $exec18 ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 [[V_ADD_U32_e32_]], implicit $exec19 ; GCN-NEXT: $vgpr0 = COPY [[V_MOV_B32_e32_]]20 ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr021 %0:vgpr_32 = COPY $vgpr022 %1:vgpr_32 = V_ADD_U32_e32 1, %0, implicit $exec23 %2:vgpr_32 = V_MOV_B32_e32 killed %1, implicit $exec24 $vgpr0 = COPY killed %225 SI_RETURN_TO_EPILOG killed $vgpr026...27---28# Do not rematerialize V_MOV_B32 at COPY because source register %1 is killed29# after the MOV but before the COPY.30 31name: no_remat_killed_src_after_inst32tracksRegLiveness: true33body: |34 bb.0:35 liveins: $vgpr036 37 ; GCN-LABEL: name: no_remat_killed_src_after_inst38 ; GCN: liveins: $vgpr039 ; GCN-NEXT: {{ $}}40 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr041 ; GCN-NEXT: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 1, [[COPY]], implicit $exec42 ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 [[V_ADD_U32_e32_]], implicit $exec43 ; GCN-NEXT: KILL [[V_ADD_U32_e32_]]44 ; GCN-NEXT: $vgpr0 = COPY [[V_MOV_B32_e32_]]45 ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr046 %0:vgpr_32 = COPY $vgpr047 %1:vgpr_32 = V_ADD_U32_e32 1, %0, implicit $exec48 %2:vgpr_32 = V_MOV_B32_e32 %1, implicit $exec49 KILL %150 $vgpr0 = COPY killed %251 SI_RETURN_TO_EPILOG killed $vgpr052...53---54# Even if %1 is not killed do not rematerialize V_MOV_B32 so that we do not55# extend %1 liverange.56 57name: no_remat_alive_src_in_inst_unused58tracksRegLiveness: true59body: |60 bb.0:61 liveins: $vgpr062 63 ; GCN-LABEL: name: no_remat_alive_src_in_inst_unused64 ; GCN: liveins: $vgpr065 ; GCN-NEXT: {{ $}}66 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr067 ; GCN-NEXT: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 1, [[COPY]], implicit $exec68 ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 [[V_ADD_U32_e32_]], implicit $exec69 ; GCN-NEXT: $vgpr0 = COPY [[V_MOV_B32_e32_]]70 ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr071 %0:vgpr_32 = COPY $vgpr072 %1:vgpr_32 = V_ADD_U32_e32 1, %0, implicit $exec73 %2:vgpr_32 = V_MOV_B32_e32 %1, implicit $exec74 $vgpr0 = COPY killed %275 SI_RETURN_TO_EPILOG killed $vgpr076...77---78# Rematerialize V_MOV_B32 since %1 is available at COPY and still alive.79 80name: remat_alive_src_in_inst_used_and_available81tracksRegLiveness: true82body: |83 bb.0:84 liveins: $vgpr085 86 ; GCN-LABEL: name: remat_alive_src_in_inst_used_and_available87 ; GCN: liveins: $vgpr088 ; GCN-NEXT: {{ $}}89 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr090 ; GCN-NEXT: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 1, [[COPY]], implicit $exec91 ; GCN-NEXT: $vgpr0 = V_MOV_B32_e32 [[V_ADD_U32_e32_]], implicit $exec92 ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr0, implicit [[V_ADD_U32_e32_]]93 %0:vgpr_32 = COPY $vgpr094 %1:vgpr_32 = V_ADD_U32_e32 1, %0, implicit $exec95 %2:vgpr_32 = V_MOV_B32_e32 %1, implicit $exec96 $vgpr0 = COPY killed %297 SI_RETURN_TO_EPILOG killed $vgpr0, implicit %198...99