diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-06-18 12:23:44 +0000 |
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-06-18 12:23:44 +0000 |
| commit | 23f03f5059c85ef70134d4f774a372a8b5f7f341 (patch) | |
| tree | ad347eab2a3b42c07350ffc0e550577adb7ad1be /llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp | |
| parent | d5ce8ec778c45dd6e8a01f731bbcc99c077ed39a (diff) | |
| download | bcm5719-llvm-23f03f5059c85ef70134d4f774a372a8b5f7f341.tar.gz bcm5719-llvm-23f03f5059c85ef70134d4f774a372a8b5f7f341.zip | |
AMDGPU: Fix iterator crash in AMDGPUPromoteAlloca
The lifetime intrinsic was erased, which was the next iterator.
llvm-svn: 363668
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp b/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp index a2d62c73404..e4c9d6685d4 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp @@ -162,12 +162,16 @@ bool AMDGPUPromoteAlloca::runOnFunction(Function &F) { bool SufficientLDS = hasSufficientLocalMem(F); bool Changed = false; BasicBlock &EntryBB = *F.begin(); - for (auto I = EntryBB.begin(), E = EntryBB.end(); I != E; ) { - AllocaInst *AI = dyn_cast<AllocaInst>(I); - ++I; - if (AI) - Changed |= handleAlloca(*AI, SufficientLDS); + SmallVector<AllocaInst *, 16> Allocas; + for (Instruction &I : EntryBB) { + if (AllocaInst *AI = dyn_cast<AllocaInst>(&I)) + Allocas.push_back(AI); + } + + for (AllocaInst *AI : Allocas) { + if (handleAlloca(*AI, SufficientLDS)) + Changed = true; } return Changed; |

