[llvm] eb91d91 - [DSE] Fix typo in recent commit

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 24 02:26:57 PST 2021


Author: Nikita Popov
Date: 2021-12-24T11:25:25+01:00
New Revision: eb91d91b7a8e5a3f66657cb5f20284de0f9e0364

URL: https://github.com/llvm/llvm-project/commit/eb91d91b7a8e5a3f66657cb5f20284de0f9e0364
DIFF: https://github.com/llvm/llvm-project/commit/eb91d91b7a8e5a3f66657cb5f20284de0f9e0364.diff

LOG: [DSE] Fix typo in recent commit

This fixes a typo in 81d69e1bda9e4b6a83f29ba1f614e43ab4700972.
Of course we should only skip the particular store if it isn't
removable, not bail out of the whole loop. Add a test to cover
this case.

Added: 
    

Modified: 
    llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
    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 c80a2ef58e92d..eadbb42935395 100644
--- a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
@@ -1873,7 +1873,7 @@ struct DSEState {
       Instruction *DefInst = Def->getMemoryInst();
       auto MaybeDefLoc = getLocForWrite(DefInst);
       if (!MaybeDefLoc || !isRemovable(DefInst))
-        return false;
+        continue;
 
       MemoryDef *UpperDef;
       // To conserve compile-time, we avoid walking to the next clobbering def.

diff  --git a/llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll b/llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll
index f3943326fc6fd..e5630cca1aba5 100644
--- a/llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll
+++ b/llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll
@@ -650,3 +650,27 @@ define i8 @memset_optimized_access(i8* noalias %dst, i8* noalias %src) {
   tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %src, i64 16, i1 false)
   ret i8 %l
 }
+
+; The @use() call is a later non-removable store, but should not affect the
+; removal of the store in the if block.
+define void @later_non_removable_store(i1 %c, i8* %p) {
+; CHECK-LABEL: @later_non_removable_store(
+; CHECK-NEXT:    store i8 1, i8* [[P:%.*]], align 1
+; CHECK-NEXT:    br i1 [[C:%.*]], label [[IF:%.*]], label [[EXIT:%.*]]
+; CHECK:       if:
+; CHECK-NEXT:    br label [[EXIT]]
+; CHECK:       exit:
+; CHECK-NEXT:    call void @use(i8* [[P]]) #[[ATTR6:[0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  store i8 1, i8* %p
+  br i1 %c, label %if, label %exit
+
+if:
+  store i8 1, i8* %p
+  br label %exit
+
+exit:
+  call void @use(i8* %p) argmemonly
+  ret void
+}


        


More information about the llvm-commits mailing list