[PATCH] D115965: [DSE] Fix a case of invalid dead store elimination
Marianne Mailhot-Sarrasin via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 22 13:16:05 PST 2021
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG90d1786ba0c2: [DSE] Fix invalid removal of store instruction (authored by mamai).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D115965/new/
https://reviews.llvm.org/D115965
Files:
llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
llvm/test/Transforms/DeadStoreElimination/store-after-loop.ll
Index: llvm/test/Transforms/DeadStoreElimination/store-after-loop.ll
===================================================================
--- llvm/test/Transforms/DeadStoreElimination/store-after-loop.ll
+++ llvm/test/Transforms/DeadStoreElimination/store-after-loop.ll
@@ -7,7 +7,6 @@
; There is no dead store in this test. Make sure no store is deleted by DSE.
; Test case related to bug report PR52774.
-; NOTE: Showing actual (broken) DSE behavior.
define %struct.ilist* @test() {
; CHECK-LABEL: @test(
@@ -19,6 +18,8 @@
; CHECK-NEXT: [[LIST_NEW_ILIST_PTR]] = bitcast i8* [[LIST_NEW_I8_PTR]] to %struct.ilist*
; CHECK-NEXT: [[GEP_NEW_VALUE:%.*]] = getelementptr inbounds [[STRUCT_ILIST:%.*]], %struct.ilist* [[LIST_NEW_ILIST_PTR]], i32 0, i32 0
; CHECK-NEXT: store i32 42, i32* [[GEP_NEW_VALUE]], align 8
+; CHECK-NEXT: [[GEP_NEW_NEXT:%.*]] = getelementptr inbounds [[STRUCT_ILIST]], %struct.ilist* [[LIST_NEW_ILIST_PTR]], i32 0, i32 1
+; CHECK-NEXT: store %struct.ilist* [[LIST_NEXT]], %struct.ilist** [[GEP_NEW_NEXT]], align 4
; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[IV_NEXT]], 10
; CHECK-NEXT: br i1 [[COND]], label [[EXIT:%.*]], label [[LOOP]]
Index: llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
+++ llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
@@ -1209,17 +1209,10 @@
/// loop. In particular, this guarantees that it only references a single
/// MemoryLocation during execution of the containing function.
bool isGuaranteedLoopInvariant(const Value *Ptr) {
- auto IsGuaranteedLoopInvariantBase = [this](const Value *Ptr) {
+ auto IsGuaranteedLoopInvariantBase = [](const Value *Ptr) {
Ptr = Ptr->stripPointerCasts();
- if (auto *I = dyn_cast<Instruction>(Ptr)) {
- if (isa<AllocaInst>(Ptr))
- return true;
-
- if (isAllocLikeFn(I, &TLI))
- return true;
-
- return false;
- }
+ if (auto *I = dyn_cast<Instruction>(Ptr))
+ return I->getParent()->isEntryBlock();
return true;
};
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D115965.395923.patch
Type: text/x-patch
Size: 2214 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211222/2e9d4400/attachment.bin>
More information about the llvm-commits
mailing list