mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
name change: hasPattern() -> getMachineCombinerPatterns() ; NFC
This was suggested as part of D10460, but it's independent of any functional change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240192 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
152f3b5997
commit
30c3b2a4c2
@ -724,16 +724,16 @@ public:
|
||||
/// order since the pattern evaluator stops checking as soon as it finds a
|
||||
/// faster sequence.
|
||||
/// \param Root - Instruction that could be combined with one of its operands
|
||||
/// \param Pattern - Vector of possible combination pattern
|
||||
virtual bool hasPattern(
|
||||
/// \param Patterns - Vector of possible combination patterns
|
||||
virtual bool getMachineCombinerPatterns(
|
||||
MachineInstr &Root,
|
||||
SmallVectorImpl<MachineCombinerPattern::MC_PATTERN> &Pattern) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
/// When hasPattern() finds a pattern this function generates the instructions
|
||||
/// that could replace the original code sequence. The client has to decide
|
||||
/// whether the actual replacement is beneficial or not.
|
||||
/// When getMachineCombinerPatterns() finds patterns, this function generates
|
||||
/// the instructions that could replace the original code sequence. The client
|
||||
/// has to decide whether the actual replacement is beneficial or not.
|
||||
/// \param Root - Instruction that could be combined with one of its operands
|
||||
/// \param P - Combination pattern for Root
|
||||
/// \param InsInstrs - Vector of new instructions that implement P
|
||||
@ -742,7 +742,7 @@ public:
|
||||
/// \param InstrIdxForVirtReg - map of virtual register to instruction in
|
||||
/// InsInstr that defines it
|
||||
virtual void genAlternativeCodeSequence(
|
||||
MachineInstr &Root, MachineCombinerPattern::MC_PATTERN P,
|
||||
MachineInstr &Root, MachineCombinerPattern::MC_PATTERN Pattern,
|
||||
SmallVectorImpl<MachineInstr *> &InsInstrs,
|
||||
SmallVectorImpl<MachineInstr *> &DelInstrs,
|
||||
DenseMap<unsigned, unsigned> &InstrIdxForVirtReg) const {
|
||||
|
@ -322,7 +322,7 @@ bool MachineCombiner::combineInstructions(MachineBasicBlock *MBB) {
|
||||
auto &MI = *BlockIter++;
|
||||
|
||||
DEBUG(dbgs() << "INSTR "; MI.dump(); dbgs() << "\n";);
|
||||
SmallVector<MachineCombinerPattern::MC_PATTERN, 16> Pattern;
|
||||
SmallVector<MachineCombinerPattern::MC_PATTERN, 16> Patterns;
|
||||
// The motivating example is:
|
||||
//
|
||||
// MUL Other MUL_op1 MUL_op2 Other
|
||||
@ -345,11 +345,11 @@ bool MachineCombiner::combineInstructions(MachineBasicBlock *MBB) {
|
||||
//
|
||||
// The algorithm does not try to evaluate all patterns and pick the best.
|
||||
// This is only an artificial restriction though. In practice there is
|
||||
// mostly one pattern and hasPattern() can order patterns based on an
|
||||
// internal cost heuristic.
|
||||
// mostly one pattern, and getMachineCombinerPatterns() can order patterns
|
||||
// based on an internal cost heuristic.
|
||||
|
||||
if (TII->hasPattern(MI, Pattern)) {
|
||||
for (auto P : Pattern) {
|
||||
if (TII->getMachineCombinerPatterns(MI, Patterns)) {
|
||||
for (auto P : Patterns) {
|
||||
SmallVector<MachineInstr *, 16> InsInstrs;
|
||||
SmallVector<MachineInstr *, 16> DelInstrs;
|
||||
DenseMap<unsigned, unsigned> InstrIdxForVirtReg;
|
||||
|
@ -2459,15 +2459,15 @@ static bool canCombineWithMUL(MachineBasicBlock &MBB, MachineOperand &MO,
|
||||
return true;
|
||||
}
|
||||
|
||||
/// hasPattern - return true when there is potentially a faster code sequence
|
||||
/// Return true when there is potentially a faster code sequence
|
||||
/// for an instruction chain ending in \p Root. All potential patterns are
|
||||
/// listed
|
||||
/// in the \p Pattern vector. Pattern should be sorted in priority order since
|
||||
/// the pattern evaluator stops checking as soon as it finds a faster sequence.
|
||||
|
||||
bool AArch64InstrInfo::hasPattern(
|
||||
bool AArch64InstrInfo::getMachineCombinerPatterns(
|
||||
MachineInstr &Root,
|
||||
SmallVectorImpl<MachineCombinerPattern::MC_PATTERN> &Pattern) const {
|
||||
SmallVectorImpl<MachineCombinerPattern::MC_PATTERN> &Patterns) const {
|
||||
unsigned Opc = Root.getOpcode();
|
||||
MachineBasicBlock &MBB = *Root.getParent();
|
||||
bool Found = false;
|
||||
@ -2495,76 +2495,76 @@ bool AArch64InstrInfo::hasPattern(
|
||||
"ADDWrr does not have register operands");
|
||||
if (canCombineWithMUL(MBB, Root.getOperand(1), AArch64::MADDWrrr,
|
||||
AArch64::WZR)) {
|
||||
Pattern.push_back(MachineCombinerPattern::MC_MULADDW_OP1);
|
||||
Patterns.push_back(MachineCombinerPattern::MC_MULADDW_OP1);
|
||||
Found = true;
|
||||
}
|
||||
if (canCombineWithMUL(MBB, Root.getOperand(2), AArch64::MADDWrrr,
|
||||
AArch64::WZR)) {
|
||||
Pattern.push_back(MachineCombinerPattern::MC_MULADDW_OP2);
|
||||
Patterns.push_back(MachineCombinerPattern::MC_MULADDW_OP2);
|
||||
Found = true;
|
||||
}
|
||||
break;
|
||||
case AArch64::ADDXrr:
|
||||
if (canCombineWithMUL(MBB, Root.getOperand(1), AArch64::MADDXrrr,
|
||||
AArch64::XZR)) {
|
||||
Pattern.push_back(MachineCombinerPattern::MC_MULADDX_OP1);
|
||||
Patterns.push_back(MachineCombinerPattern::MC_MULADDX_OP1);
|
||||
Found = true;
|
||||
}
|
||||
if (canCombineWithMUL(MBB, Root.getOperand(2), AArch64::MADDXrrr,
|
||||
AArch64::XZR)) {
|
||||
Pattern.push_back(MachineCombinerPattern::MC_MULADDX_OP2);
|
||||
Patterns.push_back(MachineCombinerPattern::MC_MULADDX_OP2);
|
||||
Found = true;
|
||||
}
|
||||
break;
|
||||
case AArch64::SUBWrr:
|
||||
if (canCombineWithMUL(MBB, Root.getOperand(1), AArch64::MADDWrrr,
|
||||
AArch64::WZR)) {
|
||||
Pattern.push_back(MachineCombinerPattern::MC_MULSUBW_OP1);
|
||||
Patterns.push_back(MachineCombinerPattern::MC_MULSUBW_OP1);
|
||||
Found = true;
|
||||
}
|
||||
if (canCombineWithMUL(MBB, Root.getOperand(2), AArch64::MADDWrrr,
|
||||
AArch64::WZR)) {
|
||||
Pattern.push_back(MachineCombinerPattern::MC_MULSUBW_OP2);
|
||||
Patterns.push_back(MachineCombinerPattern::MC_MULSUBW_OP2);
|
||||
Found = true;
|
||||
}
|
||||
break;
|
||||
case AArch64::SUBXrr:
|
||||
if (canCombineWithMUL(MBB, Root.getOperand(1), AArch64::MADDXrrr,
|
||||
AArch64::XZR)) {
|
||||
Pattern.push_back(MachineCombinerPattern::MC_MULSUBX_OP1);
|
||||
Patterns.push_back(MachineCombinerPattern::MC_MULSUBX_OP1);
|
||||
Found = true;
|
||||
}
|
||||
if (canCombineWithMUL(MBB, Root.getOperand(2), AArch64::MADDXrrr,
|
||||
AArch64::XZR)) {
|
||||
Pattern.push_back(MachineCombinerPattern::MC_MULSUBX_OP2);
|
||||
Patterns.push_back(MachineCombinerPattern::MC_MULSUBX_OP2);
|
||||
Found = true;
|
||||
}
|
||||
break;
|
||||
case AArch64::ADDWri:
|
||||
if (canCombineWithMUL(MBB, Root.getOperand(1), AArch64::MADDWrrr,
|
||||
AArch64::WZR)) {
|
||||
Pattern.push_back(MachineCombinerPattern::MC_MULADDWI_OP1);
|
||||
Patterns.push_back(MachineCombinerPattern::MC_MULADDWI_OP1);
|
||||
Found = true;
|
||||
}
|
||||
break;
|
||||
case AArch64::ADDXri:
|
||||
if (canCombineWithMUL(MBB, Root.getOperand(1), AArch64::MADDXrrr,
|
||||
AArch64::XZR)) {
|
||||
Pattern.push_back(MachineCombinerPattern::MC_MULADDXI_OP1);
|
||||
Patterns.push_back(MachineCombinerPattern::MC_MULADDXI_OP1);
|
||||
Found = true;
|
||||
}
|
||||
break;
|
||||
case AArch64::SUBWri:
|
||||
if (canCombineWithMUL(MBB, Root.getOperand(1), AArch64::MADDWrrr,
|
||||
AArch64::WZR)) {
|
||||
Pattern.push_back(MachineCombinerPattern::MC_MULSUBWI_OP1);
|
||||
Patterns.push_back(MachineCombinerPattern::MC_MULSUBWI_OP1);
|
||||
Found = true;
|
||||
}
|
||||
break;
|
||||
case AArch64::SUBXri:
|
||||
if (canCombineWithMUL(MBB, Root.getOperand(1), AArch64::MADDXrrr,
|
||||
AArch64::XZR)) {
|
||||
Pattern.push_back(MachineCombinerPattern::MC_MULSUBXI_OP1);
|
||||
Patterns.push_back(MachineCombinerPattern::MC_MULSUBXI_OP1);
|
||||
Found = true;
|
||||
}
|
||||
break;
|
||||
@ -2667,7 +2667,7 @@ static MachineInstr *genMaddR(MachineFunction &MF, MachineRegisterInfo &MRI,
|
||||
return MUL;
|
||||
}
|
||||
|
||||
/// genAlternativeCodeSequence - when hasPattern() finds a pattern
|
||||
/// When getMachineCombinerPatterns() finds potential patterns,
|
||||
/// this function generates the instructions that could replace the
|
||||
/// original code sequence
|
||||
void AArch64InstrInfo::genAlternativeCodeSequence(
|
||||
|
@ -163,19 +163,17 @@ public:
|
||||
unsigned SrcReg2, int CmpMask, int CmpValue,
|
||||
const MachineRegisterInfo *MRI) const override;
|
||||
bool optimizeCondBranch(MachineInstr *MI) const override;
|
||||
/// hasPattern - return true when there is potentially a faster code sequence
|
||||
/// Return true when there is potentially a faster code sequence
|
||||
/// for an instruction chain ending in <Root>. All potential patterns are
|
||||
/// listed
|
||||
/// in the <Pattern> array.
|
||||
bool hasPattern(MachineInstr &Root,
|
||||
SmallVectorImpl<MachineCombinerPattern::MC_PATTERN> &Pattern)
|
||||
/// listed in the <Patterns> array.
|
||||
bool getMachineCombinerPatterns(MachineInstr &Root,
|
||||
SmallVectorImpl<MachineCombinerPattern::MC_PATTERN> &Patterns)
|
||||
const override;
|
||||
|
||||
/// genAlternativeCodeSequence - when hasPattern() finds a pattern
|
||||
/// this function generates the instructions that could replace the
|
||||
/// original code sequence
|
||||
/// When getMachineCombinerPatterns() finds patterns, this function generates
|
||||
/// the instructions that could replace the original code sequence
|
||||
void genAlternativeCodeSequence(
|
||||
MachineInstr &Root, MachineCombinerPattern::MC_PATTERN P,
|
||||
MachineInstr &Root, MachineCombinerPattern::MC_PATTERN Pattern,
|
||||
SmallVectorImpl<MachineInstr *> &InsInstrs,
|
||||
SmallVectorImpl<MachineInstr *> &DelInstrs,
|
||||
DenseMap<unsigned, unsigned> &InstrIdxForVirtReg) const override;
|
||||
|
@ -6408,8 +6408,8 @@ static MachineCombinerPattern::MC_PATTERN getPattern(bool CommutePrev,
|
||||
}
|
||||
}
|
||||
|
||||
bool X86InstrInfo::hasPattern(MachineInstr &Root,
|
||||
SmallVectorImpl<MachineCombinerPattern::MC_PATTERN> &Pattern) const {
|
||||
bool X86InstrInfo::getMachineCombinerPatterns(MachineInstr &Root,
|
||||
SmallVectorImpl<MachineCombinerPattern::MC_PATTERN> &Patterns) const {
|
||||
if (!Root.getParent()->getParent()->getTarget().Options.UnsafeFPMath)
|
||||
return false;
|
||||
|
||||
@ -6428,7 +6428,7 @@ bool X86InstrInfo::hasPattern(MachineInstr &Root,
|
||||
if (isReassocCandidate(*Prev, AssocOpcode, false, CommutePrev)) {
|
||||
// We found a sequence of instructions that may be suitable for a
|
||||
// reassociation of operands to increase ILP.
|
||||
Pattern.push_back(getPattern(CommutePrev, CommuteRoot));
|
||||
Patterns.push_back(getPattern(CommutePrev, CommuteRoot));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -461,12 +461,12 @@ public:
|
||||
/// Return true when there is potentially a faster code sequence
|
||||
/// for an instruction chain ending in <Root>. All potential patterns are
|
||||
/// output in the <Pattern> array.
|
||||
bool hasPattern(
|
||||
bool getMachineCombinerPatterns(
|
||||
MachineInstr &Root,
|
||||
SmallVectorImpl<MachineCombinerPattern::MC_PATTERN> &P) const override;
|
||||
|
||||
/// When hasPattern() finds a pattern, this function generates the
|
||||
/// instructions that could replace the original code sequence.
|
||||
/// When getMachineCombinerPatterns() finds a pattern, this function generates
|
||||
/// the instructions that could replace the original code sequence.
|
||||
void genAlternativeCodeSequence(
|
||||
MachineInstr &Root, MachineCombinerPattern::MC_PATTERN P,
|
||||
SmallVectorImpl<MachineInstr *> &InsInstrs,
|
||||
|
Loading…
Reference in New Issue
Block a user