The same literal can be used multiple times in an instruction, not just once. We were not tracking the used value to verify this, so correct this. This helps avoid regressions in a future patch.
69 lines
2.4 KiB
YAML
69 lines
2.4 KiB
YAML
# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=si-fold-operands,dead-mi-elimination -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s
|
|
# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=si-fold-operands,dead-mi-elimination -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s
|
|
|
|
# GCN-LABEL: name: fold_vgpr_to_vgpr_copy
|
|
# GCN: %0:vreg_64 = IMPLICIT_DEF
|
|
# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF
|
|
# GCN-NEXT: %2:vgpr_32 = IMPLICIT_DEF
|
|
# GCN-NEXT: DS_WRITE2_B32_gfx9 %0.sub0, killed %1, killed %2, 0, 1, 0, implicit $exec
|
|
|
|
---
|
|
name: fold_vgpr_to_vgpr_copy
|
|
body: |
|
|
bb.0:
|
|
|
|
%0:vreg_64 = IMPLICIT_DEF
|
|
%4:vgpr_32 = IMPLICIT_DEF
|
|
%3:vgpr_32 = IMPLICIT_DEF
|
|
%1:vgpr_32 = COPY %0.sub0
|
|
%2:vgpr_32 = COPY %1
|
|
DS_WRITE2_B32_gfx9 %2, killed %4, killed %3, 0, 1, 0, implicit $exec
|
|
...
|
|
|
|
# GCN-LABEL: name: fold_sgpr_to_vgpr_copy
|
|
# GCN: %0:sreg_64 = IMPLICIT_DEF
|
|
# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF
|
|
# GCN-NEXT: %2:vgpr_32 = IMPLICIT_DEF
|
|
# GCN-NEXT: %4:vgpr_32 = COPY %0.sub0
|
|
# GCN-NEXT: DS_WRITE2_B32_gfx9 %4, killed %1, killed %2, 0, 1, 0, implicit $exec
|
|
name: fold_sgpr_to_vgpr_copy
|
|
body: |
|
|
bb.0:
|
|
|
|
%0:sreg_64 = IMPLICIT_DEF
|
|
%4:vgpr_32 = IMPLICIT_DEF
|
|
%3:vgpr_32 = IMPLICIT_DEF
|
|
%1:sgpr_32 = COPY %0.sub0
|
|
%2:vgpr_32 = COPY %1
|
|
DS_WRITE2_B32_gfx9 %2, killed %4, killed %3, 0, 1, 0, implicit $exec
|
|
...
|
|
|
|
# GCN-LABEL: name: fma_sgpr_use
|
|
# GCN: %0:sreg_64_xexec = IMPLICIT_DEF
|
|
# GCN-NEXT: %4:vgpr_32 = nnan ninf nsz arcp contract afn reassoc V_FMA_F32_e64 2, %0.sub0, 0, 1073741824, 0, %0.sub1, 0, 0, implicit $mode, implicit $exec
|
|
---
|
|
name: fma_sgpr_use
|
|
body: |
|
|
bb.0:
|
|
%0:sreg_64_xexec = IMPLICIT_DEF
|
|
%1:sgpr_32 = COPY %0.sub0
|
|
%2:sgpr_32 = COPY %0.sub1
|
|
%3:vgpr_32 = COPY %2
|
|
%4:vgpr_32 = nnan ninf nsz arcp contract afn reassoc V_FMAC_F32_e64 2, %1, 0, 1073741824, 0, %3, 0, 0, implicit $mode, implicit $exec
|
|
DS_WRITE2_B32_gfx9 undef %5:vgpr_32, killed %4, undef %6:vgpr_32, 0, 1, 0, implicit $exec
|
|
...
|
|
|
|
# GCN-LABEL: name: fma_sgpr_sgpr_use
|
|
# GCN: %0:sgpr_32 = IMPLICIT_DEF
|
|
# GCN: %3:vgpr_32 = V_FMA_F32_e64 0, %0, 0, 1234567, 0, 1234567, 0, 0, implicit $mode, implicit $exec
|
|
---
|
|
name: fma_sgpr_sgpr_use
|
|
body: |
|
|
bb.0:
|
|
%0:sgpr_32 = IMPLICIT_DEF
|
|
%1:sgpr_32 = S_MOV_B32 1234567
|
|
%2:vgpr_32 = COPY %1
|
|
%3:vgpr_32 = V_FMAC_F32_e64 0, %0, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec
|
|
S_ENDPGM 0, implicit %3
|
|
...
|