Enable thumb1 register scavenging by default.

llvm-svn: 83496
This commit is contained in:
Jim Grosbach 2009-10-07 22:26:31 +00:00
parent a9d83ba92c
commit cc952b2ff8
3 changed files with 12 additions and 10 deletions

View File

@ -561,6 +561,12 @@ public:
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
/// frame pointer register. For most targets this is true only if the function
/// has variable sized allocas or if frame pointer elimination is disabled.

View File

@ -44,16 +44,6 @@ char PEI::ID = 0;
static RegisterPass<PEI>
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
/// prolog and epilog code, and eliminates abstract frame references.
///
@ -66,6 +56,7 @@ bool PEI::runOnMachineFunction(MachineFunction &Fn) {
const Function* F = Fn.getFunction();
const TargetRegisterInfo *TRI = Fn.getTarget().getRegisterInfo();
RS = TRI->requiresRegisterScavenging(Fn) ? new RegScavenger() : NULL;
FrameIndexVirtualScavenging = TRI->requiresFrameIndexScavenging(Fn);
// Get MachineModuleInfo so that we can track the construction of the
// frame.

View File

@ -95,6 +95,11 @@ namespace llvm {
// functions.
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
// materialization registers, maintain a map of the registers to
// the constant value and SP adjustment associated with it.