diff --git a/llvm/include/llvm/CodeGen/TargetInstrInfo.h b/llvm/include/llvm/CodeGen/TargetInstrInfo.h --- a/llvm/include/llvm/CodeGen/TargetInstrInfo.h +++ b/llvm/include/llvm/CodeGen/TargetInstrInfo.h @@ -1095,6 +1095,9 @@ SmallVectorImpl &DelInstrs, DenseMap &InstrIdxForVirtReg) const; + /// The limit on resource length extension we accept in MachineCombiner Pass. + virtual int16_t getExtendResourceLenLimit() const { return 0; } + /// This is an architecture-specific helper function of reassociateOps. /// Set special operand attributes for new instructions after reassociation. virtual void setSpecialOperandAttr(MachineInstr &OldMI1, MachineInstr &OldMI2, diff --git a/llvm/lib/CodeGen/MachineCombiner.cpp b/llvm/lib/CodeGen/MachineCombiner.cpp --- a/llvm/lib/CodeGen/MachineCombiner.cpp +++ b/llvm/lib/CodeGen/MachineCombiner.cpp @@ -406,12 +406,14 @@ << ResLenBeforeCombine << " and after: " << ResLenAfterCombine << "\n";); LLVM_DEBUG( - ResLenAfterCombine <= ResLenBeforeCombine + ResLenAfterCombine <= + ResLenBeforeCombine + TII->getExtendResourceLenLimit() ? dbgs() << "\t\t As result it IMPROVES/PRESERVES Resource Length\n" : dbgs() << "\t\t As result it DOES NOT improve/preserve Resource " "Length\n"); - return ResLenAfterCombine <= ResLenBeforeCombine; + return ResLenAfterCombine <= + ResLenBeforeCombine + TII->getExtendResourceLenLimit(); } /// \returns true when new instruction sequence should be generated