[PATCH] D30145: AMDGPU/SI: Fix SI scheduler LiveOut Refcount issue

Valery Pykhtin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 27 10:18:59 PDT 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL298857: [AMDGPU] Fix SI scheduler LiveOut Refcount issue (authored by vpykhtin).

Changed prior to commit:
  https://reviews.llvm.org/D30145?vs=92675&id=93151#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D30145

Files:
  llvm/trunk/lib/Target/AMDGPU/SIMachineScheduler.cpp
  llvm/trunk/lib/Target/AMDGPU/SIMachineScheduler.h


Index: llvm/trunk/lib/Target/AMDGPU/SIMachineScheduler.cpp
===================================================================
--- llvm/trunk/lib/Target/AMDGPU/SIMachineScheduler.cpp
+++ llvm/trunk/lib/Target/AMDGPU/SIMachineScheduler.cpp
@@ -1350,6 +1350,24 @@
   std::set<unsigned> InRegs = DAG->getInRegs();
   addLiveRegs(InRegs);
 
+  // Increase LiveOutRegsNumUsages for blocks
+  // producing registers consumed in another
+  // scheduling region.
+  for (unsigned Reg : DAG->getOutRegs()) {
+    for (unsigned i = 0, e = Blocks.size(); i != e; ++i) {
+      // Do reverse traversal
+      int ID = BlocksStruct.TopDownIndex2Block[Blocks.size()-1-i];
+      SIScheduleBlock *Block = Blocks[ID];
+      const std::set<unsigned> &OutRegs = Block->getOutRegs();
+
+      if (OutRegs.find(Reg) == OutRegs.end())
+        continue;
+
+      ++LiveOutRegsNumUsages[ID][Reg];
+      break;
+    }
+  }
+
   // Fill LiveRegsConsumers for regs that were already
   // defined before scheduling.
   for (unsigned i = 0, e = Blocks.size(); i != e; ++i) {
Index: llvm/trunk/lib/Target/AMDGPU/SIMachineScheduler.h
===================================================================
--- llvm/trunk/lib/Target/AMDGPU/SIMachineScheduler.h
+++ llvm/trunk/lib/Target/AMDGPU/SIMachineScheduler.h
@@ -467,6 +467,14 @@
     return InRegs;
   }
 
+  std::set<unsigned> getOutRegs() {
+    std::set<unsigned> OutRegs;
+    for (const auto &RegMaskPair : RPTracker.getPressure().LiveOutRegs) {
+      OutRegs.insert(RegMaskPair.RegUnit);
+    }
+    return OutRegs;
+  };
+
   unsigned getVGPRSetID() const { return VGPRSetID; }
   unsigned getSGPRSetID() const { return SGPRSetID; }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D30145.93151.patch
Type: text/x-patch
Size: 1669 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170327/0159fddf/attachment.bin>


More information about the llvm-commits mailing list