Skip to content

Commit 73d9f5f

Browse files
authored
[AMDGPU] Add test for GCNRegPressure tracker bug (#73786)
Add a test to document an existing problem in GCNRegPressure tracker. The upward tracker does not count the registers used (16 of them) in movrel instruction (for example V_INDIRECT_REG_WRITE_MOVREL_B32_V16). The downward tracker counts the registers but reports a mismatch: %0:L0000000000000C00 isn't found in LIS reported set
1 parent d8bc546 commit 73d9f5f

File tree

1 file changed

+135
-0
lines changed

1 file changed

+135
-0
lines changed

llvm/test/CodeGen/AMDGPU/regpressure_printer.mir

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,3 +531,138 @@ body: |
531531
%1:vgpr_32 = V_MOV_B32_e32 %0, implicit $exec
532532
S_NOP 0, implicit %1
533533
...
534+
---
535+
name: movrel
536+
tracksRegLiveness: true
537+
body: |
538+
; RPU-LABEL: name: movrel
539+
; RPU: bb.0:
540+
; RPU-NEXT: Live-in:
541+
; RPU-NEXT: SGPR VGPR
542+
; RPU-NEXT: 0 0
543+
; RPU-NEXT: 0 0 $sgpr0 = COPY $sgpr1
544+
; RPU-NEXT: 0 0
545+
; RPU-NEXT: 0 0 $sgpr2_sgpr3 = S_GETPC_B64
546+
; RPU-NEXT: 0 0
547+
; RPU-NEXT: 0 0 $sgpr1 = COPY killed $sgpr3
548+
; RPU-NEXT: 0 0
549+
; RPU-NEXT: 0 0 $sgpr0_sgpr1_sgpr2_sgpr3 = S_LOAD_DWORDX4_IMM $sgpr0_sgpr1, 0, 0
550+
; RPU-NEXT: 0 0
551+
; RPU-NEXT: 0 0 $sgpr0 = S_BUFFER_LOAD_DWORD_IMM $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0
552+
; RPU-NEXT: 0 0
553+
; RPU-NEXT: 0 0 undef %0.sub5:vreg_512 = V_MOV_B32_e32 5, implicit $exec
554+
; RPU-NEXT: 0 0
555+
; RPU-NEXT: 0 0 S_CMP_GT_U32 $sgpr0, 15, implicit-def $scc
556+
; RPU-NEXT: 0 0
557+
; RPU-NEXT: 0 0 S_CBRANCH_SCC1 %bb.2, implicit $scc
558+
; RPU-NEXT: 0 0
559+
; RPU-NEXT: 0 0 S_BRANCH %bb.1
560+
; RPU-NEXT: 0 0
561+
; RPU-NEXT: Live-out:
562+
; RPU-NEXT: Live-thr:
563+
; RPU-NEXT: 0 0
564+
; RPU-NEXT: bb.1:
565+
; RPU-NEXT: Live-in:
566+
; RPU-NEXT: SGPR VGPR
567+
; RPU-NEXT: 0 0
568+
; RPU-NEXT: 0 1 undef %0.sub5:vreg_512 = V_MOV_B32_e32 5, implicit $exec
569+
; RPU-NEXT: 0 1
570+
; RPU-NEXT: 0 1 $m0 = S_MOV_B32 killed $sgpr0
571+
; RPU-NEXT: 0 1
572+
; RPU-NEXT: 0 1 %0:vreg_512 = V_INDIRECT_REG_WRITE_MOVREL_B32_V16 %0:vreg_512(tied-def 0), 42, 3, implicit $m0, implicit $exec
573+
; RPU-NEXT: 0 1
574+
; RPU-NEXT: Live-out: %0:0000000000000C00
575+
; RPU-NEXT: Live-thr:
576+
; RPU-NEXT: 0 0
577+
; RPU-NEXT: bb.2:
578+
; RPU-NEXT: Live-in: %0:0000000000000C00
579+
; RPU-NEXT: SGPR VGPR
580+
; RPU-NEXT: 0 1
581+
; RPU-NEXT: 0 1 %1:vgpr_32 = V_CVT_F32_UBYTE0_e64 %0.sub5:vreg_512, 0, 0, implicit $exec
582+
; RPU-NEXT: 0 1
583+
; RPU-NEXT: 0 1 EXP_DONE 0, %1:vgpr_32, undef %2:vgpr_32, undef %3:vgpr_32, undef %4:vgpr_32, -1, 0, 1, implicit $exec
584+
; RPU-NEXT: 0 0
585+
; RPU-NEXT: 0 0 S_ENDPGM 0
586+
; RPU-NEXT: 0 0
587+
; RPU-NEXT: Live-out:
588+
; RPU-NEXT: Live-thr:
589+
; RPU-NEXT: 0 0
590+
;
591+
; RPD-LABEL: name: movrel
592+
; RPD: bb.0:
593+
; RPD-NEXT: Live-in:
594+
; RPD-NEXT: SGPR VGPR
595+
; RPD-NEXT: 0 0
596+
; RPD-NEXT: 0 0 $sgpr0 = COPY $sgpr1
597+
; RPD-NEXT: 0 0
598+
; RPD-NEXT: 0 0 $sgpr2_sgpr3 = S_GETPC_B64
599+
; RPD-NEXT: 0 0
600+
; RPD-NEXT: 0 0 $sgpr1 = COPY killed $sgpr3
601+
; RPD-NEXT: 0 0
602+
; RPD-NEXT: 0 0 $sgpr0_sgpr1_sgpr2_sgpr3 = S_LOAD_DWORDX4_IMM $sgpr0_sgpr1, 0, 0
603+
; RPD-NEXT: 0 0
604+
; RPD-NEXT: 0 0 $sgpr0 = S_BUFFER_LOAD_DWORD_IMM $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0
605+
; RPD-NEXT: 0 0
606+
; RPD-NEXT: 0 1 undef %0.sub5:vreg_512 = V_MOV_B32_e32 5, implicit $exec
607+
; RPD-NEXT: 0 1
608+
; RPD-NEXT: 0 1 S_CMP_GT_U32 $sgpr0, 15, implicit-def $scc
609+
; RPD-NEXT: 0 1
610+
; RPD-NEXT: 0 1 S_CBRANCH_SCC1 %bb.2, implicit $scc
611+
; RPD-NEXT: 0 1
612+
; RPD-NEXT: 0 1 S_BRANCH %bb.1
613+
; RPD-NEXT: 0 1
614+
; RPD-NEXT: Live-out: %0:0000000000000C00
615+
; RPD-NEXT: mis LIS:
616+
; RPD-NEXT: %0:L0000000000000C00 isn't found in LIS reported set
617+
; RPD-NEXT: Live-thr:
618+
; RPD-NEXT: 0 0
619+
; RPD-NEXT: bb.1:
620+
; RPD-NEXT: Live-in:
621+
; RPD-NEXT: SGPR VGPR
622+
; RPD-NEXT: 0 0
623+
; RPD-NEXT: 0 1 undef %0.sub5:vreg_512 = V_MOV_B32_e32 5, implicit $exec
624+
; RPD-NEXT: 0 1
625+
; RPD-NEXT: 0 1 $m0 = S_MOV_B32 killed $sgpr0
626+
; RPD-NEXT: 0 1
627+
; RPD-NEXT: 0 16 %0:vreg_512 = V_INDIRECT_REG_WRITE_MOVREL_B32_V16 %0:vreg_512(tied-def 0), 42, 3, implicit $m0, implicit $exec
628+
; RPD-NEXT: 0 1
629+
; RPD-NEXT: Live-out: %0:0000000000000C00
630+
; RPD-NEXT: Live-thr:
631+
; RPD-NEXT: 0 0
632+
; RPD-NEXT: bb.2:
633+
; RPD-NEXT: Live-in: %0:0000000000000C00
634+
; RPD-NEXT: SGPR VGPR
635+
; RPD-NEXT: 0 1
636+
; RPD-NEXT: 0 2 %1:vgpr_32 = V_CVT_F32_UBYTE0_e64 %0.sub5:vreg_512, 0, 0, implicit $exec
637+
; RPD-NEXT: 0 1
638+
; RPD-NEXT: 0 1 EXP_DONE 0, %1:vgpr_32, undef %2:vgpr_32, undef %3:vgpr_32, undef %4:vgpr_32, -1, 0, 1, implicit $exec
639+
; RPD-NEXT: 0 0
640+
; RPD-NEXT: 0 0 S_ENDPGM 0
641+
; RPD-NEXT: 0 0
642+
; RPD-NEXT: Live-out:
643+
; RPD-NEXT: Live-thr:
644+
; RPD-NEXT: 0 0
645+
bb.0:
646+
liveins: $sgpr1
647+
$sgpr0 = COPY $sgpr1
648+
$sgpr2_sgpr3 = S_GETPC_B64
649+
$sgpr1 = COPY killed $sgpr3
650+
$sgpr0_sgpr1_sgpr2_sgpr3 = S_LOAD_DWORDX4_IMM killed $sgpr0_sgpr1, 0, 0
651+
$sgpr0 = S_BUFFER_LOAD_DWORD_IMM killed $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0
652+
undef %47.sub5:vreg_512 = V_MOV_B32_e32 5, implicit $exec
653+
S_CMP_GT_U32 $sgpr0, 15, implicit-def $scc
654+
S_CBRANCH_SCC1 %bb.2, implicit $scc
655+
S_BRANCH %bb.1
656+
657+
bb.1:
658+
liveins: $sgpr0
659+
undef %47.sub5:vreg_512 = V_MOV_B32_e32 5, implicit $exec
660+
$m0 = S_MOV_B32 killed $sgpr0
661+
%47:vreg_512 = V_INDIRECT_REG_WRITE_MOVREL_B32_V16 %47:vreg_512, 42, 3, implicit $m0, implicit $exec
662+
663+
bb.2:
664+
665+
%49:vgpr_32 = V_CVT_F32_UBYTE0_e64 %47.sub5:vreg_512, 0, 0, implicit $exec
666+
EXP_DONE 0, %49:vgpr_32, undef %51:vgpr_32, undef %53:vgpr_32, undef %55:vgpr_32, -1, 0, 1, implicit $exec
667+
S_ENDPGM 0
668+
...

0 commit comments

Comments
 (0)