diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2018-03-19 14:07:15 +0000 |
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2018-03-19 14:07:15 +0000 |
| commit | 69932e4d692f20615935db0d48f45b21a89cae23 (patch) | |
| tree | fb8a00b0e01ac285170c95f7bc35eae639489f4f /llvm/lib/Target/AMDGPU/SIInstrInfo.cpp | |
| parent | 1af12b587bee97e6a4926e842b181643abce6504 (diff) | |
| download | bcm5719-llvm-69932e4d692f20615935db0d48f45b21a89cae23.tar.gz bcm5719-llvm-69932e4d692f20615935db0d48f45b21a89cae23.zip | |
AMDGPU: Don't leave dead illegal VGPR->SGPR copies
Normally DCE kills these, but at -O0 these get left behind
leaving suspicious looking illegal copies.
Replace with IMPLICIT_DEF to avoid iterator issues.
llvm-svn: 327842
Diffstat (limited to 'llvm/lib/Target/AMDGPU/SIInstrInfo.cpp')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SIInstrInfo.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp index 86c5f623dd0..35b1df499d7 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp @@ -3923,6 +3923,13 @@ void SIInstrInfo::moveToVALU(MachineInstr &TopInst) const { MRI.replaceRegWith(DstReg, Inst.getOperand(1).getReg()); MRI.clearKillFlags(Inst.getOperand(1).getReg()); Inst.getOperand(0).setReg(DstReg); + + // Make sure we don't leave around a dead VGPR->SGPR copy. Normally + // these are deleted later, but at -O0 it would leave a suspicious + // looking illegal copy of an undef register. + for (unsigned I = Inst.getNumOperands() - 1; I != 0; --I) + Inst.RemoveOperand(I); + Inst.setDesc(get(AMDGPU::IMPLICIT_DEF)); continue; } |

