forked from OSchip/llvm-project
[MachineLICM] Add shouldHoist method to TargetInstrInfo
Add a shouldHoist method to TargetInstrInfo which is queried by MachineLICM to override hoisting decisions for a given target. This mirrors functionality provided by shouldSink. Reviewed By: foad Differential Revision: https://reviews.llvm.org/D118773
This commit is contained in:
parent
fe2f5c976c
commit
42ac4e1a12
|
@ -382,6 +382,17 @@ public:
|
||||||
/// to which instructions should be sunk.
|
/// to which instructions should be sunk.
|
||||||
virtual bool shouldSink(const MachineInstr &MI) const { return true; }
|
virtual bool shouldSink(const MachineInstr &MI) const { return true; }
|
||||||
|
|
||||||
|
/// Return false if the instruction should not be hoisted by MachineLICM.
|
||||||
|
///
|
||||||
|
/// MachineLICM determines on its own whether the instruction is safe to
|
||||||
|
/// hoist; this gives the target a hook to extend this assessment and prevent
|
||||||
|
/// an instruction being hoisted from a given loop for target specific
|
||||||
|
/// reasons.
|
||||||
|
virtual bool shouldHoist(const MachineInstr &MI,
|
||||||
|
const MachineLoop *FromLoop) const {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/// Re-issue the specified 'original' instruction at the
|
/// Re-issue the specified 'original' instruction at the
|
||||||
/// specific location targeting a new destination register.
|
/// specific location targeting a new destination register.
|
||||||
/// The register in Orig->getOperand(0).getReg() will be substituted by
|
/// The register in Orig->getOperand(0).getReg() will be substituted by
|
||||||
|
|
|
@ -999,6 +999,9 @@ bool MachineLICMBase::IsLICMCandidate(MachineInstr &I) {
|
||||||
if (I.isConvergent())
|
if (I.isConvergent())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (!TII->shouldHoist(I, CurLoop))
|
||||||
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue