diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-12-20 18:55:06 +0000 |
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-12-20 18:55:06 +0000 |
| commit | 4c1e9ec00852aea4758ae5a2d44b72c0674d5e96 (patch) | |
| tree | 23fe172f86034182619c1d248e1d80e839b496b4 /llvm/lib/Target/AMDGPU | |
| parent | 45a540f72fb26fc1cd28325becac78bdacb4a295 (diff) | |
| download | bcm5719-llvm-4c1e9ec00852aea4758ae5a2d44b72c0674d5e96.tar.gz bcm5719-llvm-4c1e9ec00852aea4758ae5a2d44b72c0674d5e96.zip | |
AMDGPU: Don't add same instruction multiple times to worklist
When the instruction is processed the first time, it may be
deleted resulting in crashes. While the new test adds the same
user to the worklist twice, this particular case doesn't crash
but I'm not sure why.
llvm-svn: 290191
Diffstat (limited to 'llvm/lib/Target/AMDGPU')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SIInstrInfo.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp index 981b63c59a8..26a8d22062a 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp @@ -3312,10 +3312,16 @@ void SIInstrInfo::addUsersToMoveToVALUWorklist( MachineRegisterInfo &MRI, SmallVectorImpl<MachineInstr *> &Worklist) const { for (MachineRegisterInfo::use_iterator I = MRI.use_begin(DstReg), - E = MRI.use_end(); I != E; ++I) { + E = MRI.use_end(); I != E;) { MachineInstr &UseMI = *I->getParent(); if (!canReadVGPR(UseMI, I.getOperandNo())) { Worklist.push_back(&UseMI); + + do { + ++I; + } while (I != E && I->getParent() == &UseMI); + } else { + ++I; } } } |

