@@ -733,3 +733,64 @@ body: |
733733 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
734734 S_ENDPGM 0
735735 ...
736+ ---
737+ name : test_no_sink_permlane_swap
738+ tracksRegLiveness : true
739+ machineFunctionInfo :
740+ isEntryFunction : true
741+ body : |
742+ ; GFX9-LABEL: name: test_no_sink_permlane_swap
743+ ; GFX9: bb.0:
744+ ; GFX9-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
745+ ; GFX9-NEXT: liveins: $vgpr0
746+ ; GFX9-NEXT: {{ $}}
747+ ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
748+ ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
749+ ; GFX9-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
750+ ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]
751+ ; GFX9-NEXT: [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY1]], 0, 0, implicit $exec :: (load (s32), addrspace 1)
752+ ; GFX9-NEXT: [[V_PERMLANE32_SWAP_B32_e64_:%[0-9]+]]:vgpr_32, [[V_PERMLANE32_SWAP_B32_e64_1:%[0-9]+]]:vgpr_32 = V_PERMLANE32_SWAP_B32_e64 [[GLOBAL_LOAD_DWORD]], [[GLOBAL_LOAD_DWORD]], 0, 0, implicit $exec
753+ ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0
754+ ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1
755+ ; GFX9-NEXT: [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY2]](s32), [[S_MOV_B32_]], implicit $exec
756+ ; GFX9-NEXT: [[SI_IF:%[0-9]+]]:sreg_64 = SI_IF [[V_CMP_LT_I32_e64_]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
757+ ; GFX9-NEXT: S_BRANCH %bb.1
758+ ; GFX9-NEXT: {{ $}}
759+ ; GFX9-NEXT: bb.1:
760+ ; GFX9-NEXT: successors: %bb.2(0x80000000)
761+ ; GFX9-NEXT: {{ $}}
762+ ; GFX9-NEXT: [[V_MAX_I32_e64_:%[0-9]+]]:vgpr_32 = V_MAX_I32_e64 [[V_PERMLANE32_SWAP_B32_e64_]], [[V_PERMLANE32_SWAP_B32_e64_1]], implicit $exec
763+ ; GFX9-NEXT: {{ $}}
764+ ; GFX9-NEXT: bb.2:
765+ ; GFX9-NEXT: successors: %bb.3(0x80000000)
766+ ; GFX9-NEXT: {{ $}}
767+ ; GFX9-NEXT: [[PHI:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B32_e32_]], %bb.0, [[V_MAX_I32_e64_]], %bb.1
768+ ; GFX9-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec
769+ ; GFX9-NEXT: {{ $}}
770+ ; GFX9-NEXT: bb.3:
771+ ; GFX9-NEXT: S_ENDPGM 0, implicit [[PHI]]
772+ bb.0:
773+ liveins: $vgpr0
774+ %1:vgpr_32 = COPY $vgpr0
775+ %3:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
776+ %5:sreg_64 = S_MOV_B64 0
777+ %7:vreg_64 = COPY %5
778+ %9:vgpr_32 = GLOBAL_LOAD_DWORD killed %7, 0, 0, implicit $exec :: (load (s32), addrspace 1)
779+ %10:vgpr_32, %11:vgpr_32 = V_PERMLANE32_SWAP_B32_e64 %9:vgpr_32, %9:vgpr_32, 0, 0, implicit $exec
780+ %15:vgpr_32(s32) = COPY $vgpr0
781+ %16:sreg_32 = S_MOV_B32 1
782+ %17:sreg_64 = V_CMP_LT_I32_e64 %15(s32), %16, implicit $exec
783+ %18:sreg_64 = COPY %17
784+ %19:sreg_64 = SI_IF %18, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
785+ S_BRANCH %bb.1
786+
787+ bb.1:
788+ %20:vgpr_32 = V_MAX_I32_e64 %10:vgpr_32, %11:vgpr_32, implicit $exec
789+
790+ bb.2:
791+ %22:vgpr_32 = PHI %3, %bb.0, %20, %bb.1
792+ SI_END_CF %19, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
793+
794+ bb.3:
795+ S_ENDPGM 0, implicit %22
796+ ...
0 commit comments