|
23 | 23 | define void @vopd_mov_fixup_fail() { ret void }
|
24 | 24 | define void @vopd_no_combine_dependent_subreg() { ret void }
|
25 | 25 | define void @vopd_mov_mov_same_src_bank() { ret void }
|
| 26 | + define void @vopd_combine_opy_overwrites_opx() { ret void } |
| 27 | + define void @vopd_no_combine_opx_overwrites_opy() { ret void } |
26 | 28 | ...
|
27 | 29 |
|
28 | 30 | ---
|
@@ -737,3 +739,50 @@ body: |
|
737 | 739 | $vgpr2 = V_MOV_B32_e32 $vgpr1, implicit $exec
|
738 | 740 | $vgpr3 = V_MOV_B32_e32 $vgpr5, implicit $exec
|
739 | 741 | ...
|
| 742 | + |
| 743 | +--- |
| 744 | +# There is no race between mov and add, they are executed at the same time |
| 745 | +name: vopd_combine_opy_overwrites_opx |
| 746 | +tracksRegLiveness: true |
| 747 | +body: | |
| 748 | + bb.0: |
| 749 | + ; SCHED-LABEL: name: vopd_combine_opy_overwrites_opx |
| 750 | + ; SCHED: $vgpr1 = IMPLICIT_DEF |
| 751 | + ; SCHED-NEXT: $vgpr3 = IMPLICIT_DEF |
| 752 | + ; SCHED-NEXT: $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec |
| 753 | + ; SCHED-NEXT: $vgpr1 = V_ADD_F32_e32 killed $vgpr3, $vgpr3, implicit $mode, implicit $exec |
| 754 | + ; |
| 755 | + ; PAIR-GFX11-LABEL: name: vopd_combine_opy_overwrites_opx |
| 756 | + ; PAIR-GFX11: $vgpr1 = IMPLICIT_DEF |
| 757 | + ; PAIR-GFX11-NEXT: $vgpr3 = IMPLICIT_DEF |
| 758 | + ; PAIR-GFX11-NEXT: $vgpr0, $vgpr1 = V_DUAL_MOV_B32_e32_X_ADD_F32_e32_gfx11 killed $vgpr1, killed $vgpr3, $vgpr3, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec |
| 759 | + ; |
| 760 | + ; PAIR-GFX12-LABEL: name: vopd_combine_opy_overwrites_opx |
| 761 | + ; PAIR-GFX12: $vgpr1 = IMPLICIT_DEF |
| 762 | + ; PAIR-GFX12-NEXT: $vgpr3 = IMPLICIT_DEF |
| 763 | + ; PAIR-GFX12-NEXT: $vgpr0, $vgpr1 = V_DUAL_MOV_B32_e32_X_ADD_F32_e32_gfx12 killed $vgpr1, killed $vgpr3, $vgpr3, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec |
| 764 | + $vgpr1 = IMPLICIT_DEF |
| 765 | + $vgpr3 = IMPLICIT_DEF |
| 766 | + $vgpr0 = V_MOV_B32_e32 $vgpr1, implicit $exec |
| 767 | + $vgpr1 = V_ADD_F32_e32 $vgpr3, $vgpr3, implicit $mode, implicit $exec |
| 768 | +... |
| 769 | + |
| 770 | +--- |
| 771 | +# OPY cannot cosume value produced by OPX |
| 772 | +name: vopd_no_combine_opx_overwrites_opy |
| 773 | +tracksRegLiveness: true |
| 774 | +body: | |
| 775 | + bb.0: |
| 776 | + ; SCHED-LABEL: name: vopd_no_combine_opx_overwrites_opy |
| 777 | + ; SCHED: $vgpr1 = IMPLICIT_DEF |
| 778 | + ; SCHED-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr1, implicit $exec |
| 779 | + ; SCHED-NEXT: $vgpr3 = V_ADD_F32_e32 killed $vgpr0, killed $vgpr1, implicit $mode, implicit $exec |
| 780 | + ; |
| 781 | + ; PAIR-LABEL: name: vopd_no_combine_opx_overwrites_opy |
| 782 | + ; PAIR: $vgpr1 = IMPLICIT_DEF |
| 783 | + ; PAIR-NEXT: $vgpr0 = V_MOV_B32_e32 $vgpr1, implicit $exec |
| 784 | + ; PAIR-NEXT: $vgpr3 = V_ADD_F32_e32 killed $vgpr0, killed $vgpr1, implicit $mode, implicit $exec |
| 785 | + $vgpr1 = IMPLICIT_DEF |
| 786 | + $vgpr0 = V_MOV_B32_e32 $vgpr1, implicit $exec |
| 787 | + $vgpr3 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| 788 | +... |
0 commit comments