mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-25 17:20:48 +00:00
Fix PR2967 by not deleting volatile load/stores that occur before unreachable.
I don't really see this as being needed, but there is little harm from doing it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58385 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1932,7 +1932,18 @@ bool llvm::SimplifyCFG(BasicBlock *BB) {
|
||||
while (Unreachable != BB->begin()) {
|
||||
BasicBlock::iterator BBI = Unreachable;
|
||||
--BBI;
|
||||
// Do not delete instructions that can have side effects, like calls
|
||||
// (which may never return) and volatile loads and stores.
|
||||
if (isa<CallInst>(BBI)) break;
|
||||
|
||||
if (StoreInst *SI = dyn_cast<StoreInst>(BBI))
|
||||
if (SI->isVolatile())
|
||||
break;
|
||||
|
||||
if (LoadInst *LI = dyn_cast<LoadInst>(BBI))
|
||||
if (LI->isVolatile())
|
||||
break;
|
||||
|
||||
// Delete this instruction
|
||||
BB->getInstList().erase(BBI);
|
||||
Changed = true;
|
||||
|
Reference in New Issue
Block a user