Enable thumb1 register scavenging by default.
llvm-svn: 83496
This commit is contained in:
parent
6c966c458a
commit
267fa622fa
|
@ -561,6 +561,12 @@ public:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// requiresFrameIndexScavenging - returns true if the target requires post
|
||||||
|
/// PEI scavenging of registers for materializing frame index constants.
|
||||||
|
virtual bool requiresFrameIndexScavenging(const MachineFunction &MF) const {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/// hasFP - Return true if the specified function should have a dedicated
|
/// hasFP - Return true if the specified function should have a dedicated
|
||||||
/// frame pointer register. For most targets this is true only if the function
|
/// frame pointer register. For most targets this is true only if the function
|
||||||
/// has variable sized allocas or if frame pointer elimination is disabled.
|
/// has variable sized allocas or if frame pointer elimination is disabled.
|
||||||
|
|
|
@ -44,16 +44,6 @@ char PEI::ID = 0;
|
||||||
static RegisterPass<PEI>
|
static RegisterPass<PEI>
|
||||||
X("prologepilog", "Prologue/Epilogue Insertion");
|
X("prologepilog", "Prologue/Epilogue Insertion");
|
||||||
|
|
||||||
// FIXME: For now, the frame index scavenging is off by default and only
|
|
||||||
// used by the Thumb1 target. When it's the default and replaces the current
|
|
||||||
// on-the-fly PEI scavenging for all targets, requiresRegisterScavenging()
|
|
||||||
// will replace this.
|
|
||||||
cl::opt<bool>
|
|
||||||
FrameIndexVirtualScavenging("enable-frame-index-scavenging",
|
|
||||||
cl::Hidden,
|
|
||||||
cl::desc("Enable frame index elimination with"
|
|
||||||
"virtual register scavenging"));
|
|
||||||
|
|
||||||
/// createPrologEpilogCodeInserter - This function returns a pass that inserts
|
/// createPrologEpilogCodeInserter - This function returns a pass that inserts
|
||||||
/// prolog and epilog code, and eliminates abstract frame references.
|
/// prolog and epilog code, and eliminates abstract frame references.
|
||||||
///
|
///
|
||||||
|
@ -66,6 +56,7 @@ bool PEI::runOnMachineFunction(MachineFunction &Fn) {
|
||||||
const Function* F = Fn.getFunction();
|
const Function* F = Fn.getFunction();
|
||||||
const TargetRegisterInfo *TRI = Fn.getTarget().getRegisterInfo();
|
const TargetRegisterInfo *TRI = Fn.getTarget().getRegisterInfo();
|
||||||
RS = TRI->requiresRegisterScavenging(Fn) ? new RegScavenger() : NULL;
|
RS = TRI->requiresRegisterScavenging(Fn) ? new RegScavenger() : NULL;
|
||||||
|
FrameIndexVirtualScavenging = TRI->requiresFrameIndexScavenging(Fn);
|
||||||
|
|
||||||
// Get MachineModuleInfo so that we can track the construction of the
|
// Get MachineModuleInfo so that we can track the construction of the
|
||||||
// frame.
|
// frame.
|
||||||
|
|
|
@ -95,6 +95,11 @@ namespace llvm {
|
||||||
// functions.
|
// functions.
|
||||||
bool ShrinkWrapThisFunction;
|
bool ShrinkWrapThisFunction;
|
||||||
|
|
||||||
|
// Flag to control whether to use the register scavenger to resolve
|
||||||
|
// frame index materialization registers. Set according to
|
||||||
|
// TRI->requiresFrameIndexScavenging() for the curren function.
|
||||||
|
bool FrameIndexVirtualScavenging;
|
||||||
|
|
||||||
// When using the scavenger post-pass to resolve frame reference
|
// When using the scavenger post-pass to resolve frame reference
|
||||||
// materialization registers, maintain a map of the registers to
|
// materialization registers, maintain a map of the registers to
|
||||||
// the constant value and SP adjustment associated with it.
|
// the constant value and SP adjustment associated with it.
|
||||||
|
|
Loading…
Reference in New Issue