forked from OSchip/llvm-project
[RegAllocGreedy] Provide a subtarget hook to disable the local reassignment
heuristic. By default, no functionality change. This is a follow-up of r212099. This hook provides a finer grain to control the optimization. <rdar://problem/17444599> llvm-svn: 212204
This commit is contained in:
parent
d47fb5b339
commit
5caa6a2da1
|
@ -100,6 +100,12 @@ public:
|
|||
AntiDepBreakMode& Mode,
|
||||
RegClassVector& CriticalPathRCs) const;
|
||||
|
||||
/// \brief True if the subtarget should run the local reassignment
|
||||
/// heuristic of the register allocator.
|
||||
/// This heuristic may be compile time intensive, \p OptLevel provides
|
||||
/// a finer grain to tune the register allocator.
|
||||
virtual bool enableRALocalReassignment(CodeGenOpt::Level OptLevel) const;
|
||||
|
||||
/// \brief Enable use of alias analysis during code generation (during MI
|
||||
/// scheduling, DAGCombine, etc.).
|
||||
virtual bool useAA() const;
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/Timer.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm/Target/TargetSubtargetInfo.h"
|
||||
#include <queue>
|
||||
|
||||
using namespace llvm;
|
||||
|
@ -83,7 +84,7 @@ static cl::opt<bool> EnableLocalReassignment(
|
|||
"enable-local-reassign", cl::Hidden,
|
||||
cl::desc("Local reassignment can yield better allocation decisions, but "
|
||||
"may be compile time intensive"),
|
||||
cl::init(true));
|
||||
cl::init(false));
|
||||
|
||||
// FIXME: Find a good default for this flag and remove the flag.
|
||||
static cl::opt<unsigned>
|
||||
|
@ -291,6 +292,10 @@ class RAGreedy : public MachineFunctionPass,
|
|||
/// Callee-save register cost, calculated once per machine function.
|
||||
BlockFrequency CSRCost;
|
||||
|
||||
/// Run or not the local reassignment heuristic. This information is
|
||||
/// obtained from the TargetSubtargetInfo.
|
||||
bool EnableLocalReassign;
|
||||
|
||||
public:
|
||||
RAGreedy();
|
||||
|
||||
|
@ -737,7 +742,7 @@ bool RAGreedy::canEvictInterference(LiveInterval &VirtReg, unsigned PhysReg,
|
|||
// Evicting another local live range in this case could lead to suboptimal
|
||||
// coloring.
|
||||
if (!MaxCost.isMax() && IsLocal && LIS->intervalIsInOneMBB(*Intf) &&
|
||||
(!EnableLocalReassignment || !canReassign(*Intf, PhysReg))) {
|
||||
(!EnableLocalReassign || !canReassign(*Intf, PhysReg))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -2314,9 +2319,14 @@ bool RAGreedy::runOnMachineFunction(MachineFunction &mf) {
|
|||
<< "********** Function: " << mf.getName() << '\n');
|
||||
|
||||
MF = &mf;
|
||||
TRI = MF->getTarget().getRegisterInfo();
|
||||
TII = MF->getTarget().getInstrInfo();
|
||||
const TargetMachine &TM = MF->getTarget();
|
||||
TRI = TM.getRegisterInfo();
|
||||
TII = TM.getInstrInfo();
|
||||
RCI.runOnMachineFunction(mf);
|
||||
|
||||
EnableLocalReassign = EnableLocalReassignment ||
|
||||
TM.getSubtargetImpl()->enableRALocalReassignment(TM.getOptLevel());
|
||||
|
||||
if (VerifyEnabled)
|
||||
MF->verify(this, "Before greedy register allocator");
|
||||
|
||||
|
|
|
@ -47,6 +47,11 @@ bool TargetSubtargetInfo::enableMachineScheduler() const {
|
|||
return false;
|
||||
}
|
||||
|
||||
bool TargetSubtargetInfo::enableRALocalReassignment(
|
||||
CodeGenOpt::Level OptLevel) const {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TargetSubtargetInfo::enablePostMachineScheduler() const {
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue