[PATCH] D14807: AMDGPU: Implement SIRegisterInfo::getRegPressureSetScore()

Tom Stellard via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 18 19:44:40 PST 2015


tstellarAMD created this revision.
tstellarAMD added reviewers: arsenm, MatzeB, qcolombet, escha.
tstellarAMD added a subscriber: llvm-commits.
Herald added a subscriber: arsenm.

This tells the scheduler it is better to increase SGPR register pressure
than VGPR register pressure.  This could proably be made smarter in the
future, but this simple implementation yields fairly good results for a
large database of OpenGL shaders:

6462 shaders
Totals:
SGPRS: 320808 -> 300568 (-6.31 %)
VGPRS: 189928 -> 184176 (-3.03 %)
Code Size: 7047556 -> 7069532 (0.31 %) bytes
LDS: 83 -> 83 (0.00 %) blocks
Scratch: 1025024 -> 979968 (-4.40 %) bytes per wave

http://reviews.llvm.org/D14807

Files:
  lib/Target/AMDGPU/SIRegisterInfo.cpp
  lib/Target/AMDGPU/SIRegisterInfo.h

Index: lib/Target/AMDGPU/SIRegisterInfo.h
===================================================================
--- lib/Target/AMDGPU/SIRegisterInfo.h
+++ lib/Target/AMDGPU/SIRegisterInfo.h
@@ -38,6 +38,9 @@
   unsigned getRegPressureSetLimit(const MachineFunction &MF,
                                   unsigned Idx) const override;
 
+  unsigned getRegPressureSetScore(const MachineFunction &MF,
+                                  unsigned PSetID) const override;
+
   bool requiresRegisterScavenging(const MachineFunction &Fn) const override;
 
   void eliminateFrameIndex(MachineBasicBlock::iterator MI, int SPAdj,
Index: lib/Target/AMDGPU/SIRegisterInfo.cpp
===================================================================
--- lib/Target/AMDGPU/SIRegisterInfo.cpp
+++ lib/Target/AMDGPU/SIRegisterInfo.cpp
@@ -121,6 +121,18 @@
   return VGPRLimit;
 }
 
+unsigned SIRegisterInfo::getRegPressureSetScore(const MachineFunction &MF,
+                                                    unsigned PSetID) const {
+  if (SGPRPressureSets.test(PSetID) && VGPRPressureSets.test(PSetID))
+    return 2;
+
+  if (SGPRPressureSets.test(PSetID))
+    return 1;
+
+  // VGPRS.
+  return 0;
+}
+
 bool SIRegisterInfo::requiresRegisterScavenging(const MachineFunction &Fn) const {
   return Fn.getFrameInfo()->hasStackObjects();
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D14807.40599.patch
Type: text/x-patch
Size: 1322 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151119/d4b93e23/attachment.bin>


More information about the llvm-commits mailing list