[PATCH] D110623: [SLP] Avoid calculating expensive spill cost when it is not required

Dinar Temirbulatov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 8 23:16:16 PST 2021


dtemirbulatov updated this revision to Diff 393041.
dtemirbulatov added a comment.

Rebased, fixed remarks.


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

https://reviews.llvm.org/D110623

Files:
  llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp


Index: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
===================================================================
--- llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -2312,6 +2312,7 @@
       // Make a new scheduling region, i.e. all existing ScheduleData is not
       // in the new region yet.
       ++SchedulingRegionID;
+      NoCalls = true;
     }
 
     ScheduleData *getScheduleData(Value *V) {
@@ -2529,6 +2530,10 @@
     // Make sure that the initial SchedulingRegionID is greater than the
     // initial SchedulingRegionID in ScheduleData (which is 0).
     int SchedulingRegionID = 1;
+
+    /// Indicates that no CallInst found in the tree and we don't need to
+    /// calculate spill cost.
+    bool NoCalls = true;
   };
 
   /// Attaches the BlockScheduling structures to basic blocks.
@@ -5528,7 +5533,17 @@
     }
   }
 
-  InstructionCost SpillCost = getSpillCost();
+  bool NoCallInst = true;
+  for (auto &BSIter : BlocksSchedules) {
+    BlockScheduling *BS = BSIter.second.get();
+    if (!BS->NoCalls) {
+      NoCallInst = false;
+      break;
+    }
+  }
+
+  InstructionCost SpillCost = NoCallInst ? 0 : getSpillCost();
+  assert(!NoCallInst || getSpillCost() == 0 && "Incorrect spill cost");
   Cost += SpillCost + ExtractCost;
   if (FirstUsers.size() == 1) {
     int Limit = ShuffleMask.front().size() * 2;
@@ -7264,6 +7279,8 @@
       }
       CurrentLoadStore = SD;
     }
+    if (isa<CallInst>(I) && !isa<DbgInfoIntrinsic>(I))
+      NoCalls = false;
   }
   if (NextLoadStore) {
     if (CurrentLoadStore)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D110623.393041.patch
Type: text/x-patch
Size: 1609 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211209/77a23317/attachment.bin>


More information about the llvm-commits mailing list