[llvm] d1a1cce - [DSE,MemorySSA] Do not use callCapturesBefore in isReadClobber.

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 24 08:20:20 PDT 2020


Author: Florian Hahn
Date: 2020-08-24T16:19:42+01:00
New Revision: d1a1cce5b130630df0c821e8cafe5f683ccccb90

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

LOG: [DSE,MemorySSA] Do not use callCapturesBefore in isReadClobber.

Using callCapturesBefore potentially improves the precision and the
number of stores we can remove. But in practice, it seems to have very
little impact in terms of stores removed. For example, for
SPEC2000/SPEC2006/MultiSource with -O3 -flto, ~50 more stores are
removed (out of ~26900 stores removed). But in terms of compile-time, it
is very expensive and the patch gives substantial compile-time
improvements: Geomean O3 -0.24%, ReleaseThinLTO -0.47%, ReleaseLTO-g
-0.39%.

http://llvm-compile-time-tracker.com/compare.php?from=612a0bff88ed906c83b82f079d4c49e5fecfb9d0&to=e6c86b96d20d97dd88e903a409bd8d39b6114312&stat=instructions

Added: 
    

Modified: 
    llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
index b0ed22ec3ca2..9d0e026c2809 100644
--- a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
@@ -1762,11 +1762,11 @@ struct DSEState {
       if (CB->onlyAccessesInaccessibleMemory())
         return false;
 
-    ModRefInfo MR = BatchAA.getModRefInfo(UseInst, DefLoc);
-    // If necessary, perform additional analysis.
-    if (isRefSet(MR))
-      MR = AA.callCapturesBefore(UseInst, DefLoc, &DT);
-    return isRefSet(MR);
+    // NOTE: For calls, the number of stores removed could be slightly improved
+    // by using AA.callCapturesBefore(UseInst, DefLoc, &DT), but that showed to
+    // be expensive compared to the benefits in practice. For now, avoid more
+    // expensive analysis to limit compile-time.
+    return isRefSet(BatchAA.getModRefInfo(UseInst, DefLoc));
   }
 
   // Find a MemoryDef writing to \p DefLoc and dominating \p Current, with no


        


More information about the llvm-commits mailing list