OSDN Git Service

Move the check whether it's worth remating to caller.
authorEvan Cheng <evan.cheng@apple.com>
Wed, 27 Aug 2008 20:58:54 +0000 (20:58 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 27 Aug 2008 20:58:54 +0000 (20:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55434 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/MachineInstr.cpp
lib/CodeGen/TwoAddressInstructionPass.cpp

index 966d172..0b1afa3 100644 (file)
@@ -714,8 +714,6 @@ bool MachineInstr::isSafeToMove(const TargetInstrInfo *TII, bool &SawStore) {
 /// isSafeToReMat - Return true if it's safe to rematerialize the specified
 /// instruction which defined the specified register instead of copying it.
 bool MachineInstr::isSafeToReMat(const TargetInstrInfo *TII, unsigned DstReg) {
-  if (!TID->isAsCheapAsAMove())
-    return false;
   bool SawStore = false;
   if (!isSafeToMove(TII, SawStore))
     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.
     // 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
-    // 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).
     if (MO.isUse())
       return false;
index 5093321..51a3c5f 100644 (file)
@@ -403,6 +403,7 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
           // If it's safe and profitable, remat the definition instead of
           // copying it.
           if (DefMI &&
+              DefMI->getDesc().isAsCheapAsAMove() &&
               DefMI->isSafeToReMat(TII, regB) &&
               isProfitableToReMat(regB, rc, mi, DefMI, mbbi, Dist,DistanceMap)){
             DEBUG(cerr << "2addr: REMATTING : " << *DefMI << "\n");