Skip to content

Commit c648db5

Browse files
committed
Update kill/undef flags to satisfy MachineVerifier
Signed-off-by: John Lu <[email protected]>
1 parent 51695f1 commit c648db5

File tree

4 files changed

+23
-13
lines changed

4 files changed

+23
-13
lines changed

llvm/lib/Target/AMDGPU/SIInstrInfo.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2095,6 +2095,16 @@ bool SIInstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
20952095

20962096
case AMDGPU::SI_SPILL_S32_TO_VGPR:
20972097
mutateAndCleanupImplicit(MI, get(AMDGPU::V_WRITELANE_B32));
2098+
// When leftover implicit-def operands are removed, kill flag is no longer
2099+
// valid. Thus:
2100+
// $X = SI_SPILL_S32_TO_VGPR killed $sgpr0, 0, $X(tied-def 0),
2101+
// implicit-def $sgpr0_sgpr1, implicit $sgpr0_sgpr1
2102+
// must be converted to:
2103+
// $X = V_WRITELANE_B32 $sgpr0, 0, $X(tied-def 0)
2104+
MI.getOperand(1).setIsKill(false);
2105+
// Sometimes a SGPR that has already been killed is spilled.
2106+
// Add undef to appease the MachineVerifier.
2107+
MI.getOperand(1).setIsUndef(true);
20982108
break;
20992109

21002110
case AMDGPU::SI_RESTORE_S32_FROM_VGPR:

llvm/test/CodeGen/AMDGPU/fold-reload-into-exec.mir

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ body: |
1515
; CHECK: S_NOP 0, implicit-def $exec_lo
1616
; CHECK-NEXT: $sgpr0 = S_MOV_B32 $exec_lo
1717
; CHECK-NEXT: $vgpr0 = IMPLICIT_DEF
18-
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0
18+
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 undef $sgpr0, 0, $vgpr0
1919
; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0
2020
; CHECK-NEXT: S_NOP 0, implicit-def dead renamable $sgpr1, implicit-def dead renamable $sgpr0, implicit killed renamable $sgpr0
2121
; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0
@@ -40,7 +40,7 @@ body: |
4040
; CHECK: S_NOP 0, implicit-def $exec_hi
4141
; CHECK-NEXT: $sgpr0 = S_MOV_B32 $exec_hi
4242
; CHECK-NEXT: $vgpr0 = IMPLICIT_DEF
43-
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0
43+
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 undef $sgpr0, 0, $vgpr0
4444
; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0
4545
; CHECK-NEXT: S_NOP 0, implicit-def dead renamable $sgpr1, implicit-def dead renamable $sgpr0, implicit killed renamable $sgpr0
4646
; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0
@@ -65,8 +65,8 @@ body: |
6565
; CHECK: S_NOP 0, implicit-def $exec
6666
; CHECK-NEXT: $sgpr0_sgpr1 = S_MOV_B64 $exec
6767
; CHECK-NEXT: $vgpr0 = IMPLICIT_DEF
68-
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0
69-
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr1, 1, $vgpr0
68+
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 undef $sgpr0, 0, $vgpr0
69+
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 undef $sgpr1, 1, $vgpr0
7070
; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0
7171
; CHECK-NEXT: $sgpr1 = V_READLANE_B32 $vgpr0, 1
7272
; CHECK-NEXT: S_NOP 0, implicit-def dead renamable $sgpr2_sgpr3, implicit-def dead renamable $sgpr0_sgpr1, implicit killed renamable $sgpr0_sgpr1
@@ -95,7 +95,7 @@ body: |
9595
; CHECK-LABEL: name: reload_sgpr_spill_into_copy_to_exec_lo
9696
; CHECK: S_NOP 0, implicit-def renamable $sgpr0, implicit-def dead renamable $sgpr1, implicit-def $exec_lo
9797
; CHECK-NEXT: $vgpr0 = IMPLICIT_DEF
98-
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0
98+
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 undef $sgpr0, 0, $vgpr0
9999
; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0
100100
; CHECK-NEXT: S_NOP 0, implicit killed renamable $sgpr0, implicit-def dead renamable $sgpr1, implicit-def dead renamable $sgpr0
101101
; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0
@@ -118,7 +118,7 @@ body: |
118118
; CHECK-LABEL: name: reload_sgpr_spill_into_copy_to_exec_hi
119119
; CHECK: S_NOP 0, implicit-def renamable $sgpr0, implicit-def dead renamable $sgpr1, implicit-def $exec_hi
120120
; CHECK-NEXT: $vgpr0 = IMPLICIT_DEF
121-
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0
121+
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 undef $sgpr0, 0, $vgpr0
122122
; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0
123123
; CHECK-NEXT: S_NOP 0, implicit killed renamable $sgpr0, implicit-def dead renamable $sgpr1, implicit-def dead renamable $sgpr0
124124
; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0
@@ -141,8 +141,8 @@ body: |
141141
; CHECK-LABEL: name: reload_sgpr_spill_into_copy_to_exec
142142
; CHECK: S_NOP 0, implicit-def renamable $sgpr0_sgpr1, implicit-def dead renamable $sgpr2_sgpr3, implicit-def $exec
143143
; CHECK-NEXT: $vgpr0 = IMPLICIT_DEF
144-
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0
145-
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr1, 1, $vgpr0
144+
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 undef $sgpr0, 0, $vgpr0
145+
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 undef $sgpr1, 1, $vgpr0
146146
; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0
147147
; CHECK-NEXT: $sgpr1 = V_READLANE_B32 $vgpr0, 1
148148
; CHECK-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1, implicit-def dead renamable $sgpr2_sgpr3, implicit-def dead renamable $sgpr0_sgpr1

llvm/test/CodeGen/AMDGPU/fold-reload-into-m0.mir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ body: |
1616
; CHECK: S_NOP 0, implicit-def $m0
1717
; CHECK-NEXT: $sgpr0 = S_MOV_B32 $m0
1818
; CHECK-NEXT: $vgpr0 = IMPLICIT_DEF
19-
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0
19+
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 undef $sgpr0, 0, $vgpr0
2020
; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0
2121
; CHECK-NEXT: S_NOP 0, implicit-def dead renamable $sgpr1, implicit-def dead renamable $sgpr0, implicit killed renamable $sgpr0
2222
; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0
@@ -45,7 +45,7 @@ body: |
4545
; CHECK-LABEL: name: reload_sgpr_spill_into_copy_to_m0
4646
; CHECK: $vgpr0 = IMPLICIT_DEF
4747
; CHECK-NEXT: S_NOP 0, implicit-def renamable $sgpr0, implicit-def dead renamable $sgpr1, implicit-def $m0
48-
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 killed $sgpr0, 0, $vgpr0
48+
; CHECK-NEXT: $vgpr0 = V_WRITELANE_B32 undef $sgpr0, 0, $vgpr0
4949
; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0
5050
; CHECK-NEXT: S_NOP 0, implicit killed renamable $sgpr0, implicit-def dead renamable $sgpr1, implicit-def dead renamable $sgpr0
5151
; CHECK-NEXT: $sgpr0 = V_READLANE_B32 $vgpr0, 0

llvm/test/CodeGen/AMDGPU/insert-waitcnts-crash.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ define fastcc i32 @foo() {
1616
; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET $vgpr40, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr33, 0, 0, 0, implicit $exec :: (store (s32) into %stack.2, addrspace 5)
1717
; CHECK-NEXT: $exec_lo = S_MOV_B32 killed $sgpr17
1818
; CHECK-NEXT: $sgpr32 = frame-setup S_ADDK_I32 $sgpr32, 512, implicit-def dead $scc
19-
; CHECK-NEXT: $vgpr40 = V_WRITELANE_B32 killed $sgpr16, 2, undef $vgpr40
19+
; CHECK-NEXT: $vgpr40 = V_WRITELANE_B32 undef $sgpr16, 2, undef $vgpr40
2020
; CHECK-NEXT: BUNDLE implicit-def $sgpr16_sgpr17, implicit-def $sgpr16, implicit-def $scc, implicit-def $sgpr17 {
2121
; CHECK-NEXT: $sgpr16_sgpr17 = S_GETPC_B64
2222
; CHECK-NEXT: $sgpr16 = S_ADD_U32 internal $sgpr16, target-flags(amdgpu-gotprel32-lo) @bar + 4, implicit-def $scc
@@ -26,8 +26,8 @@ define fastcc i32 @foo() {
2626
; CHECK-NEXT: BUFFER_GL1_INV implicit $exec
2727
; CHECK-NEXT: BUFFER_GL0_INV implicit $exec
2828
; CHECK-NEXT: renamable $sgpr16_sgpr17 = S_LOAD_DWORDX2_IMM killed renamable $sgpr16_sgpr17, 0, 0 :: (dereferenceable invariant load (s64) from got, addrspace 4)
29-
; CHECK-NEXT: $vgpr40 = V_WRITELANE_B32 killed $sgpr30, 0, $vgpr40
30-
; CHECK-NEXT: $vgpr40 = V_WRITELANE_B32 killed $sgpr31, 1, $vgpr40
29+
; CHECK-NEXT: $vgpr40 = V_WRITELANE_B32 undef $sgpr30, 0, $vgpr40
30+
; CHECK-NEXT: $vgpr40 = V_WRITELANE_B32 undef $sgpr31, 1, $vgpr40
3131
; CHECK-NEXT: S_WAITCNT 49279
3232
; CHECK-NEXT: dead $sgpr30_sgpr31 = SI_CALL killed renamable $sgpr16_sgpr17, @bar, csr_amdgpu, implicit killed $sgpr4_sgpr5, implicit killed $sgpr6_sgpr7, implicit killed $sgpr8_sgpr9, implicit killed $sgpr10_sgpr11, implicit killed $sgpr12, implicit killed $sgpr13, implicit killed $sgpr14, implicit killed $sgpr15, implicit killed $vgpr31, implicit $sgpr0_sgpr1_sgpr2_sgpr3
3333
; CHECK-NEXT: $vcc_lo = S_MOV_B32 $exec_lo

0 commit comments

Comments
 (0)