[PATCH] D100016: [GreedyRA ORE] Separate Folder Reloads and Zero Cost Folder Reloads

Serguei Katkov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 6 22:05:24 PDT 2021


skatkov created this revision.
skatkov added reviewers: reames, MatzeB, anemet, thegameg.
Herald added subscribers: dantrushin, hiraditya, qcolombet.
skatkov requested review of this revision.
Herald added a project: LLVM.

Patchpoint instructions have operands which is actually zero cost
(or the same as register) to use the value from the stack.
In terms of statistic it makes same to separate them.


https://reviews.llvm.org/D100016

Files:
  llvm/lib/CodeGen/RegAllocGreedy.cpp


Index: llvm/lib/CodeGen/RegAllocGreedy.cpp
===================================================================
--- llvm/lib/CodeGen/RegAllocGreedy.cpp
+++ llvm/lib/CodeGen/RegAllocGreedy.cpp
@@ -550,16 +550,19 @@
   struct RAGreedyStats {
     unsigned Reloads = 0;
     unsigned FoldedReloads = 0;
+    unsigned ZeroCostFoldedReloads = 0;
     unsigned Spills = 0;
     unsigned FoldedSpills = 0;
 
     bool isEmpty() {
-      return !(Reloads || FoldedReloads || Spills || FoldedSpills);
+      return !(Reloads || FoldedReloads || Spills || FoldedSpills ||
+               ZeroCostFoldedReloads);
     }
 
     void add(RAGreedyStats other) {
       Reloads += other.Reloads;
       FoldedReloads += other.FoldedReloads;
+      ZeroCostFoldedReloads += other.ZeroCostFoldedReloads;
       Spills += other.Spills;
       FoldedSpills += other.FoldedSpills;
     }
@@ -3138,6 +3141,9 @@
     R << NV("NumReloads", Reloads) << " reloads ";
   if (FoldedReloads)
     R << NV("NumFoldedReloads", FoldedReloads) << " folded reloads ";
+  if (ZeroCostFoldedReloads)
+    R << NV("NumZeroCostFoldedReloads", ZeroCostFoldedReloads)
+      << " zero cost folded reloads ";
 }
 
 RAGreedy::RAGreedyStats
@@ -3156,9 +3162,24 @@
     if (TII->isLoadFromStackSlot(MI, FI) && MFI.isSpillSlotObjectIndex(FI))
       ++Stats.Reloads;
     else if (TII->hasLoadFromStackSlot(MI, Accesses) &&
-             llvm::any_of(Accesses, isSpillSlotAccess))
-      ++Stats.FoldedReloads;
-    else if (TII->isStoreToStackSlot(MI, FI) && MFI.isSpillSlotObjectIndex(FI))
+             llvm::any_of(Accesses, isSpillSlotAccess)) {
+      if (MI.getOpcode() == TargetOpcode::PATCHPOINT ||
+          MI.getOpcode() == TargetOpcode::STACKMAP ||
+          MI.getOpcode() == TargetOpcode::STATEPOINT) {
+        std::pair<unsigned, unsigned> NonZeroCostRange =
+            TII->getPatchpointUnfoldableRange(MI);
+        if (any_of(MI.operands(), [&](MachineOperand &MO) {
+              return MO.isFI() && MFI.isSpillSlotObjectIndex(MO.getIndex()) &&
+                     MI.getOperandNo(&MO) >= NonZeroCostRange.first &&
+                     MI.getOperandNo(&MO) < NonZeroCostRange.second;
+            }))
+          ++Stats.FoldedReloads;
+        else
+          ++Stats.ZeroCostFoldedReloads;
+      } else
+        ++Stats.FoldedReloads;
+    } else if (TII->isStoreToStackSlot(MI, FI) &&
+               MFI.isSpillSlotObjectIndex(FI))
       ++Stats.Spills;
     else if (TII->hasStoreToStackSlot(MI, Accesses) &&
              llvm::any_of(Accesses, isSpillSlotAccess))


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D100016.335721.patch
Type: text/x-patch
Size: 2556 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210407/85684d91/attachment.bin>


More information about the llvm-commits mailing list