[PATCH] D133396: [MemorySSA] Don't do addr phi translation if addr value is not a loop invariant

luxufan via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 13 22:37:40 PDT 2022


StephenFan updated this revision to Diff 459988.
StephenFan added a comment.

Make check more accurate


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133396/new/

https://reviews.llvm.org/D133396

Files:
  llvm/include/llvm/Analysis/MemorySSA.h


Index: llvm/include/llvm/Analysis/MemorySSA.h
===================================================================
--- llvm/include/llvm/Analysis/MemorySSA.h
+++ llvm/include/llvm/Analysis/MemorySSA.h
@@ -1255,24 +1255,21 @@
       if (!IsGuaranteedLoopInvariant(const_cast<Value *>(Location.Ptr)))
         CurrentPair.second =
             Location.getWithNewSize(LocationSize::beforeOrAfterPointer());
-      PHITransAddr Translator(
-          const_cast<Value *>(Location.Ptr),
-          OriginalAccess->getBlock()->getModule()->getDataLayout(), nullptr);
-
-      if (!Translator.PHITranslateValue(OriginalAccess->getBlock(),
-                                        DefIterator.getPhiArgBlock(), DT,
-                                        true)) {
-        Value *TransAddr = Translator.getAddr();
-        if (TransAddr != Location.Ptr) {
-          CurrentPair.second = CurrentPair.second.getWithNewPtr(TransAddr);
-
-          if (TransAddr &&
-              !IsGuaranteedLoopInvariant(const_cast<Value *>(TransAddr)))
-            CurrentPair.second = CurrentPair.second.getWithNewSize(
-                LocationSize::beforeOrAfterPointer());
-
-          if (PerformedPhiTranslation)
-            *PerformedPhiTranslation = true;
+      else if (Location.Size != LocationSize::beforeOrAfterPointer()){
+        PHITransAddr Translator(
+            const_cast<Value *>(Location.Ptr),
+            OriginalAccess->getBlock()->getModule()->getDataLayout(), nullptr);
+
+        if (!Translator.PHITranslateValue(OriginalAccess->getBlock(),
+                                          DefIterator.getPhiArgBlock(), DT,
+                                          true)) {
+          Value *TransAddr = Translator.getAddr();
+          if (TransAddr != Location.Ptr) {
+            CurrentPair.second = CurrentPair.second.getWithNewPtr(TransAddr);
+
+            if (PerformedPhiTranslation)
+              *PerformedPhiTranslation = true;
+          }
         }
       }
     }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D133396.459988.patch
Type: text/x-patch
Size: 1988 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220914/a80f0702/attachment.bin>


More information about the llvm-commits mailing list