diff options
| author | Kalle Raiskila <kalle.raiskila@nokia.com> | 2010-11-29 10:30:25 +0000 |
|---|---|---|
| committer | Kalle Raiskila <kalle.raiskila@nokia.com> | 2010-11-29 10:30:25 +0000 |
| commit | dc620afd1ef1ba3699bfd93a9e42ce129067c2d1 (patch) | |
| tree | 5bb8b9fd1dd2988aa613db70f8fbd69b6abcdc6b /llvm/lib | |
| parent | 1842ada3ad766802d4f7c194ff54e5f5077bd4ca (diff) | |
| download | bcm5719-llvm-dc620afd1ef1ba3699bfd93a9e42ce129067c2d1.tar.gz bcm5719-llvm-dc620afd1ef1ba3699bfd93a9e42ce129067c2d1.zip | |
Enable PostRA scheduling for SPU.
This speeds up selected test cases with up to
5% - no slowdowns observed.
llvm-svn: 120286
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/CellSPU/SPUSubtarget.cpp | 21 | ||||
| -rw-r--r-- | llvm/lib/Target/CellSPU/SPUSubtarget.h | 4 |
2 files changed, 25 insertions, 0 deletions
diff --git a/llvm/lib/Target/CellSPU/SPUSubtarget.cpp b/llvm/lib/Target/CellSPU/SPUSubtarget.cpp index 0f18b7fa8b2..07c8352fba9 100644 --- a/llvm/lib/Target/CellSPU/SPUSubtarget.cpp +++ b/llvm/lib/Target/CellSPU/SPUSubtarget.cpp @@ -14,6 +14,8 @@ #include "SPUSubtarget.h" #include "SPU.h" #include "SPUGenSubtarget.inc" +#include "llvm/ADT/SmallVector.h" +#include "SPURegisterInfo.h" using namespace llvm; @@ -34,3 +36,22 @@ SPUSubtarget::SPUSubtarget(const std::string &TT, const std::string &FS) : /// producing code for the JIT. void SPUSubtarget::SetJITMode() { } + +/// Enable PostRA scheduling for optimization levels -O2 and -O3. +bool SPUSubtarget::enablePostRAScheduler( + CodeGenOpt::Level OptLevel, + TargetSubtarget::AntiDepBreakMode& Mode, + RegClassVector& CriticalPathRCs) const { + Mode = TargetSubtarget::ANTIDEP_CRITICAL; + // CriticalPathsRCs seems to be the set of + // RegisterClasses that antidep breakings are performed for. + // Do it for all register classes + CriticalPathRCs.clear(); + CriticalPathRCs.push_back(&SPU::R8CRegClass); + CriticalPathRCs.push_back(&SPU::R16CRegClass); + CriticalPathRCs.push_back(&SPU::R32CRegClass); + CriticalPathRCs.push_back(&SPU::R32FPRegClass); + CriticalPathRCs.push_back(&SPU::R64CRegClass); + CriticalPathRCs.push_back(&SPU::VECREGRegClass); + return OptLevel >= CodeGenOpt::Default; +} diff --git a/llvm/lib/Target/CellSPU/SPUSubtarget.h b/llvm/lib/Target/CellSPU/SPUSubtarget.h index 147163d52ef..d7929302f08 100644 --- a/llvm/lib/Target/CellSPU/SPUSubtarget.h +++ b/llvm/lib/Target/CellSPU/SPUSubtarget.h @@ -84,6 +84,10 @@ namespace llvm { "-i16:16:128-i8:8:128-i1:8:128-a:0:128-v64:64:128-v128:128:128" "-s:128:128-n32:64"; } + + bool enablePostRAScheduler(CodeGenOpt::Level OptLevel, + TargetSubtarget::AntiDepBreakMode& Mode, + RegClassVector& CriticalPathRCs) const; }; } // End llvm namespace |

