[PATCH] D112315: [DSE] Use optimized access if available for redundant store elimination.

Florian Hahn via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 22 06:38:43 PDT 2021


fhahn created this revision.
fhahn added reviewers: nikic, asbirlea, george.burgess.iv, yurai007.
Herald added subscribers: pengfei, hiraditya.
fhahn requested review of this revision.
Herald added a project: LLVM.

Using the optimized access enables additional optimizations in cases
where the defining access is a non-aliasing store.

Alternatively we could also walk upwards and skip non-aliasing defs
here, but my experiments so far showed that this will noticeably
increase compile-time for little extra gain compared to just using the
optimized access.

Improvements of dse.NumRedundantStores on MultiSource/CINT2006/CPF2006
on X86 with -O3:

  test-suite...-typeset/consumer-typeset.test     1.00                  76.00              7500.0%
  test-suite.../Benchmarks/Bullet/bullet.test     3.00                  12.00              300.0%
  test-suite...006/453.povray/453.povray.test     3.00                   6.00              100.0%
  test-suite...telecomm-gsm/telecomm-gsm.test     1.00                   2.00              100.0%
  test-suite...ediabench/gsm/toast/toast.test     1.00                   2.00              100.0%
  test-suite...marks/7zip/7zip-benchmark.test     1.00                   2.00              100.0%
  test-suite...ications/JM/lencod/lencod.test     7.00                  10.00              42.9%
  test-suite...6/464.h264ref/464.h264ref.test     6.00                   8.00              33.3%
  test-suite...ications/JM/ldecod/ldecod.test     6.00                   7.00              16.7%
  test-suite...006/447.dealII/447.dealII.test    33.00                  33.00               0.0%
  test-suite...6/471.omnetpp/471.omnetpp.test    NaN                     1.00               nan%
  test-suite...006/450.soplex/450.soplex.test    NaN                     2.00               nan%
  test-suite.../CINT2006/403.gcc/403.gcc.test    NaN                     7.00               nan%
  test-suite...lications/ClamAV/clamscan.test    NaN                     1.00               nan%
  test-suite...CI_Purple/SMG2000/smg2000.test    NaN                     3.00               nan%

Follow-up to D111727 <https://reviews.llvm.org/D111727>.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D112315

Files:
  llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
  llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll


Index: llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll
===================================================================
--- llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll
+++ llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll
@@ -324,7 +324,6 @@
 ; CHECK:       bb2:
 ; CHECK-NEXT:    ret void
 ; CHECK:       bb3:
-; CHECK-NEXT:    store i32 0, i32* [[P]], align 4
 ; CHECK-NEXT:    ret void
 ;
   store i32 0, i32* %P
Index: llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
+++ llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
@@ -1975,7 +1975,11 @@
       if (SkipStores.contains(Def) || MSSA.isLiveOnEntryDef(Def) ||
           !isRemovable(Def->getMemoryInst()))
         continue;
-      auto *UpperDef = dyn_cast<MemoryDef>(Def->getDefiningAccess());
+      MemoryDef *UpperDef;
+      if (Def->isOptimized())
+        UpperDef = dyn_cast<MemoryDef>(Def->getOptimized());
+      else
+        UpperDef = dyn_cast<MemoryDef>(Def->getDefiningAccess());
       if (!UpperDef || MSSA.isLiveOnEntryDef(UpperDef))
         continue;
       auto *DefInst = Def->getMemoryInst();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D112315.381532.patch
Type: text/x-patch
Size: 1279 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211022/53c3b9f4/attachment.bin>


More information about the llvm-commits mailing list