Move the check whether it's worth remating to caller.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55434 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng
2008-08-27 20:58:54 +00:00
parent 18bb2788a0
commit 8763c1c544
2 changed files with 2 additions and 3 deletions

View File

@@ -714,8 +714,6 @@ bool MachineInstr::isSafeToMove(const TargetInstrInfo *TII, bool &SawStore) {
/// isSafeToReMat - Return true if it's safe to rematerialize the specified /// isSafeToReMat - Return true if it's safe to rematerialize the specified
/// instruction which defined the specified register instead of copying it. /// instruction which defined the specified register instead of copying it.
bool MachineInstr::isSafeToReMat(const TargetInstrInfo *TII, unsigned DstReg) { bool MachineInstr::isSafeToReMat(const TargetInstrInfo *TII, unsigned DstReg) {
if (!TID->isAsCheapAsAMove())
return false;
bool SawStore = false; bool SawStore = false;
if (!isSafeToMove(TII, SawStore)) if (!isSafeToMove(TII, SawStore))
return false; return false;
@@ -726,7 +724,7 @@ bool MachineInstr::isSafeToReMat(const TargetInstrInfo *TII, unsigned DstReg) {
// FIXME: For now, do not remat any instruction with register operands. // FIXME: For now, do not remat any instruction with register operands.
// Later on, we can loosen the restriction is the register operands have // Later on, we can loosen the restriction is the register operands have
// not been modified between the def and use. Note, this is different from // not been modified between the def and use. Note, this is different from
// MachineSink because the code in no longer in two-address form (at least // MachineSink because the code is no longer in two-address form (at least
// partially). // partially).
if (MO.isUse()) if (MO.isUse())
return false; return false;

View File

@@ -403,6 +403,7 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
// If it's safe and profitable, remat the definition instead of // If it's safe and profitable, remat the definition instead of
// copying it. // copying it.
if (DefMI && if (DefMI &&
DefMI->getDesc().isAsCheapAsAMove() &&
DefMI->isSafeToReMat(TII, regB) && DefMI->isSafeToReMat(TII, regB) &&
isProfitableToReMat(regB, rc, mi, DefMI, mbbi, Dist,DistanceMap)){ isProfitableToReMat(regB, rc, mi, DefMI, mbbi, Dist,DistanceMap)){
DEBUG(cerr << "2addr: REMATTING : " << *DefMI << "\n"); DEBUG(cerr << "2addr: REMATTING : " << *DefMI << "\n");