[polly] r292126 - ScopInfo: No need to keep ReadOnlyAccesses in an additional map [NFC]

Tobias Grosser via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 16 06:24:48 PST 2017


Author: grosser
Date: Mon Jan 16 08:24:48 2017
New Revision: 292126

URL: http://llvm.org/viewvc/llvm-project?rev=292126&view=rev
Log:
ScopInfo: No need to keep ReadOnlyAccesses in an additional map [NFC]

It seems over time we added an additional map that maps from the base address
of a read-only access to the actual access. However this map is never used.
Drop the creation and use of this map to simplify our alias check generation
code.

Modified:
    polly/trunk/lib/Analysis/ScopInfo.cpp

Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=292126&r1=292125&r2=292126&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/ScopInfo.cpp Mon Jan 16 08:24:48 2017
@@ -2978,7 +2978,7 @@ bool Scop::buildAliasGroups(AliasAnalysi
 
   auto &F = getFunction();
   for (AliasGroupTy &AG : AliasGroups) {
-    MapVector<const Value *, SmallSetVector<MemoryAccess *, 8>> ReadOnlyPairs;
+    AliasGroupTy ReadOnlyAccesses;
     SmallPtrSet<const Value *, 4> NonReadOnlyBaseValues;
 
     if (AG.size() < 2)
@@ -2995,14 +2995,14 @@ bool Scop::buildAliasGroups(AliasAnalysi
         NonReadOnlyBaseValues.insert(BaseAddr);
         II++;
       } else {
-        ReadOnlyPairs[BaseAddr].insert(*II);
+        ReadOnlyAccesses.push_back(*II);
         II = AG.erase(II);
       }
     }
 
     // If we don't have read only pointers check if there are at least two
     // non read only pointers, otherwise clear the alias group.
-    if (ReadOnlyPairs.empty() && NonReadOnlyBaseValues.size() <= 1)
+    if (ReadOnlyAccesses.empty() && NonReadOnlyBaseValues.size() <= 1)
       continue;
 
     // If we don't have non read only pointers clear the alias group.
@@ -3011,25 +3011,24 @@ bool Scop::buildAliasGroups(AliasAnalysi
 
     // Check if we have non-affine accesses left, if so bail out as we cannot
     // generate a good access range yet.
-    for (auto *MA : AG) {
+    for (MemoryAccess *MA : AG) {
       if (!MA->isAffine()) {
         invalidate(ALIASING, MA->getAccessInstruction()->getDebugLoc());
         return false;
       }
-      if (auto *BasePtrMA = lookupBasePtrAccess(MA))
+      if (MemoryAccess *BasePtrMA = lookupBasePtrAccess(MA))
         addRequiredInvariantLoad(
             cast<LoadInst>(BasePtrMA->getAccessInstruction()));
     }
-    for (auto &ReadOnlyPair : ReadOnlyPairs)
-      for (auto *MA : ReadOnlyPair.second) {
-        if (!MA->isAffine()) {
-          invalidate(ALIASING, MA->getAccessInstruction()->getDebugLoc());
-          return false;
-        }
-        if (auto *BasePtrMA = lookupBasePtrAccess(MA))
-          addRequiredInvariantLoad(
-              cast<LoadInst>(BasePtrMA->getAccessInstruction()));
+    for (MemoryAccess *MA : ReadOnlyAccesses) {
+      if (!MA->isAffine()) {
+        invalidate(ALIASING, MA->getAccessInstruction()->getDebugLoc());
+        return false;
       }
+      if (MemoryAccess *BasePtrMA = lookupBasePtrAccess(MA))
+        addRequiredInvariantLoad(
+            cast<LoadInst>(BasePtrMA->getAccessInstruction()));
+    }
 
     // Calculate minimal and maximal accesses for non read only accesses.
     MinMaxAliasGroups.emplace_back();
@@ -3051,17 +3050,16 @@ bool Scop::buildAliasGroups(AliasAnalysi
     // This is important as the number of comparisons grows quadratically with
     // the number of values we need to compare.
     if (!Valid ||
-        (MinMaxAccessesNonReadOnly.size() + ReadOnlyPairs.size() >
+        (MinMaxAccessesNonReadOnly.size() + ReadOnlyAccesses.size() >
          RunTimeChecksMaxArraysPerGroup))
       return false;
 
     // Calculate minimal and maximal accesses for read only accesses.
-    MinMaxAccessesReadOnly.reserve(ReadOnlyPairs.size());
+    MinMaxAccessesReadOnly.reserve(ReadOnlyAccesses.size());
     Accesses = isl_union_map_empty(getParamSpace());
 
-    for (const auto &ReadOnlyPair : ReadOnlyPairs)
-      for (MemoryAccess *MA : ReadOnlyPair.second)
-        Accesses = isl_union_map_add_map(Accesses, MA->getAccessRelation());
+    for (MemoryAccess *MA : ReadOnlyAccesses)
+      Accesses = isl_union_map_add_map(Accesses, MA->getAccessRelation());
 
     Valid =
         calculateMinMaxAccess(Accesses, getDomains(), MinMaxAccessesReadOnly);




More information about the llvm-commits mailing list