@@ -573,3 +573,84 @@ body: |
573573 S_NOP 0, implicit %2
574574 S_ENDPGM 0
575575 ...
576+
577+ ---
578+ name : test_remat_s_getpc_b64
579+ tracksRegLiveness : true
580+ body : |
581+ bb.0:
582+
583+ ; GCN-LABEL: name: test_remat_s_getpc_b64
584+ ; GCN: renamable $sgpr0_sgpr1 = S_GETPC_B64
585+ ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_GETPC_B64
586+ ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
587+ ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr3
588+ ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_GETPC_B64
589+ ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
590+ ; GCN-NEXT: S_ENDPGM 0
591+ %0:sgpr_64 = S_GETPC_B64
592+ %1:sgpr_64 = S_GETPC_B64
593+ %2:sgpr_64 = S_GETPC_B64
594+ S_NOP 0, implicit %0
595+ S_NOP 0, implicit %1
596+ S_NOP 0, implicit %2
597+ S_ENDPGM 0
598+ ...
599+
600+ ---
601+ name : test_remat_s_getpc_b64_2
602+ tracksRegLiveness : true
603+ body : |
604+ bb.0:
605+
606+ ; GCN-LABEL: name: test_remat_s_getpc_b64_2
607+ ; GCN: renamable $sgpr0_sgpr1 = S_GETPC_B64
608+ ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_GETPC_B64
609+ ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.3, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.3, addrspace 5)
610+ ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr1, %stack.0, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.0, addrspace 5)
611+ ; GCN-NEXT: renamable $sgpr1 = COPY renamable $sgpr2
612+ ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr1, %stack.1, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.1, addrspace 5)
613+ ; GCN-NEXT: renamable $sgpr1 = COPY killed renamable $sgpr3
614+ ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr1, %stack.2, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.2, addrspace 5)
615+ ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_GETPC_B64
616+ ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.5, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.5, addrspace 5)
617+ ; GCN-NEXT: renamable $sgpr0 = COPY killed renamable $sgpr1
618+ ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.4, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.4, addrspace 5)
619+ ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.1, addrspace 5)
620+ ; GCN-NEXT: renamable $sgpr1 = SI_SPILL_S32_RESTORE %stack.3, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.3, addrspace 5)
621+ ; GCN-NEXT: dead renamable $sgpr0 = S_ADD_U32 killed renamable $sgpr1, killed renamable $sgpr0, implicit-def $scc
622+ ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.0, addrspace 5)
623+ ; GCN-NEXT: renamable $sgpr1 = SI_SPILL_S32_RESTORE %stack.2, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.2, addrspace 5)
624+ ; GCN-NEXT: dead renamable $sgpr0 = S_ADDC_U32 killed renamable $sgpr0, killed renamable $sgpr1, implicit-def $scc, implicit $scc
625+ ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.3, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.3, addrspace 5)
626+ ; GCN-NEXT: renamable $sgpr1 = SI_SPILL_S32_RESTORE %stack.5, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.5, addrspace 5)
627+ ; GCN-NEXT: dead renamable $sgpr0 = S_ADD_U32 killed renamable $sgpr0, killed renamable $sgpr1, implicit-def $scc
628+ ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.0, addrspace 5)
629+ ; GCN-NEXT: renamable $sgpr1 = SI_SPILL_S32_RESTORE %stack.4, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.4, addrspace 5)
630+ ; GCN-NEXT: dead renamable $sgpr0 = S_ADDC_U32 killed renamable $sgpr0, killed renamable $sgpr1, implicit-def $scc, implicit $scc
631+ ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.1, addrspace 5)
632+ ; GCN-NEXT: renamable $sgpr1 = SI_SPILL_S32_RESTORE %stack.5, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.5, addrspace 5)
633+ ; GCN-NEXT: dead renamable $sgpr0 = S_ADD_U32 killed renamable $sgpr0, killed renamable $sgpr1, implicit-def $scc
634+ ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.2, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.2, addrspace 5)
635+ ; GCN-NEXT: renamable $sgpr1 = SI_SPILL_S32_RESTORE %stack.4, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.4, addrspace 5)
636+ ; GCN-NEXT: dead renamable $sgpr0 = S_ADDC_U32 killed renamable $sgpr0, killed renamable $sgpr1, implicit-def $scc, implicit $scc
637+ ; GCN-NEXT: S_ENDPGM 0
638+ %0:sreg_64 = S_GETPC_B64
639+ %1:sreg_64 = S_GETPC_B64
640+ %2:sreg_64 = S_GETPC_B64
641+ %4:sreg_32 = COPY %0.sub0:sreg_64
642+ %5:sreg_32 = COPY %0.sub1:sreg_64
643+ %6:sreg_32 = COPY %1.sub0:sreg_64
644+ %7:sreg_32 = COPY %1.sub1:sreg_64
645+ %8:sreg_32 = COPY %2.sub0:sreg_64
646+ %9:sreg_32 = COPY %2.sub1:sreg_64
647+ %10:sreg_32 = S_ADD_U32 %4:sreg_32, %6:sreg_32, implicit-def $scc
648+ %11:sreg_32 = S_ADDC_U32 %5:sreg_32, %7:sreg_32, implicit-def $scc, implicit $scc
649+ %12:sreg_32 = S_ADD_U32 %4:sreg_32, %8:sreg_32, implicit-def $scc
650+ %13:sreg_32 = S_ADDC_U32 %5:sreg_32, %9:sreg_32, implicit-def $scc, implicit $scc
651+ %14:sreg_32 = S_ADD_U32 %6:sreg_32, %8:sreg_32, implicit-def $scc
652+ %15:sreg_32 = S_ADDC_U32 %7:sreg_32, %9:sreg_32, implicit-def $scc, implicit $scc
653+ S_ENDPGM 0
654+ ...
655+
656+
0 commit comments