[llvm] ae57333 - Revert "[DSE] Eliminate noop store even through has clobbering between LoadI and StoreI"
Arthur Eubanks via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 6 10:36:18 PDT 2022
Author: Arthur Eubanks
Date: 2022-10-06T10:36:02-07:00
New Revision: ae5733346f0cc86a82c19fcdc50ce8232fa4777a
URL: https://github.com/llvm/llvm-project/commit/ae5733346f0cc86a82c19fcdc50ce8232fa4777a
DIFF: https://github.com/llvm/llvm-project/commit/ae5733346f0cc86a82c19fcdc50ce8232fa4777a.diff
LOG: Revert "[DSE] Eliminate noop store even through has clobbering between LoadI and StoreI"
This reverts commit cd8f3e75813995c1d2da35370ffcf5af3aff9c2f.
Causes miscompiles, see D132657
Added:
Modified:
llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
llvm/test/Transforms/DeadStoreElimination/noop-stores.ll
llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
index 0036020dd6ee1..93abda04bd8f0 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;
}
diff --git a/llvm/test/Transforms/DeadStoreElimination/noop-stores.ll b/llvm/test/Transforms/DeadStoreElimination/noop-stores.ll
index 030815ad36eac..2ee8df35c3ae3 100644
--- a/llvm/test/Transforms/DeadStoreElimination/noop-stores.ll
+++ b/llvm/test/Transforms/DeadStoreElimination/noop-stores.ll
@@ -672,6 +672,7 @@ define void @store_same_i32_to_mayalias_loc(ptr %q, ptr %p) {
; CHECK-LABEL: @store_same_i32_to_mayalias_loc(
; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[P:%.*]], align 4
; CHECK-NEXT: store i32 [[V]], ptr [[Q:%.*]], align 4
+; CHECK-NEXT: store i32 [[V]], ptr [[P]], align 4
; CHECK-NEXT: ret void
;
%v = load i32, ptr %p, align 4
@@ -697,6 +698,7 @@ define void @store_same_i12_to_mayalias_loc(ptr %q, ptr %p) {
; CHECK-LABEL: @store_same_i12_to_mayalias_loc(
; CHECK-NEXT: [[V:%.*]] = load i12, ptr [[P:%.*]], align 2
; CHECK-NEXT: store i12 [[V]], ptr [[Q:%.*]], align 2
+; CHECK-NEXT: store i12 [[V]], ptr [[P]], align 2
; CHECK-NEXT: ret void
;
%v = load i12, ptr %p, align 2
@@ -722,6 +724,7 @@ define void @store_same_ptr_to_mayalias_loc(ptr %q, ptr %p) {
; CHECK-LABEL: @store_same_ptr_to_mayalias_loc(
; CHECK-NEXT: [[V:%.*]] = load ptr, ptr [[P:%.*]], align 8
; CHECK-NEXT: store ptr [[V]], ptr [[Q:%.*]], align 8
+; CHECK-NEXT: store ptr [[V]], ptr [[P]], align 8
; CHECK-NEXT: ret void
;
%v = load ptr, ptr %p, align 8
diff --git a/llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll b/llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll
index be750d9f15dbe..f5e1af9f79b8f 100644
--- a/llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll
+++ b/llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll
@@ -594,6 +594,7 @@ define void @pr49927(ptr %q, ptr %p) {
; CHECK-LABEL: @pr49927(
; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[P:%.*]], align 4
; CHECK-NEXT: store i32 [[V]], ptr [[Q:%.*]], align 4
+; CHECK-NEXT: store i32 [[V]], ptr [[P]], align 4
; CHECK-NEXT: ret void
;
%v = load i32, ptr %p, align 4
More information about the llvm-commits
mailing list