blob: 04967aa5c7753b920f5435e2fafbced948c3e710 [file] [log] [blame]
commit ae5733346f0cc86a82c19fcdc50ce8232fa4777a
Author: Arthur Eubanks <aeubanks@google.com>
Date: Thu Oct 6 10:29:46 2022 -0700
Revert "[DSE] Eliminate noop store even through has clobbering between LoadI and StoreI"
This reverts commit cd8f3e75813995c1d2da35370ffcf5af3aff9c2f.
Causes miscompiles, see D132657
diff --git a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
index 0036020dd6ee..93abda04bd8f 100644
--- a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
@@ -1874,23 +1874,8 @@ struct DSEState {
// We are searching for the definition of the store's destination.
// So, if that is the same definition as the load, then this is a
// noop. Otherwise, fail.
- if (LoadAccess != Current) {
- // This is a potentially clobbering store, but it writes the same
- // value, so we can safely ignore it if alignment is as expected.
- if (auto *CurrentDef = cast<MemoryDef>(Current))
- if (auto *CurrentStoreI =
- dyn_cast_or_null<StoreInst>(CurrentDef->getMemoryInst()))
- // Check alignment to ensure load or store does not access at an
- // offset.
- if (CurrentStoreI->getValueOperand() == LoadI) {
- TypeSize StoreSize = DL.getTypeStoreSize(LoadI->getType());
- if (!StoreSize.isScalable() &&
- std::min(CurrentStoreI->getAlign(), LoadI->getAlign()) >=
- StoreSize)
- continue;
- }
+ if (LoadAccess != Current)
return false;
- }
}
return true;
}