forked from OSchip/llvm-project
[GlobalISel] Localizer: Allow targets not to run the pass conditionally
Summary: Previously, it was not possible to skip running the localizer pass conditionally. This patch adds an input function to the pass which decides if the pass should run on the given MachineFunction or not. No test case as there is no upstream target needs this functionality. Reviewers: qcolombet Reviewed By: qcolombet Subscribers: rovka, hiraditya, Petar.Avramovic, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D71038
This commit is contained in:
parent
f688570d5c
commit
bfa3d260b8
|
@ -42,6 +42,10 @@ public:
|
|||
static char ID;
|
||||
|
||||
private:
|
||||
/// An input function to decide if the pass should run or not
|
||||
/// on the given MachineFunction.
|
||||
std::function<bool(const MachineFunction &)> DoNotRunPass;
|
||||
|
||||
/// MRI contains all the register class/bank information that this
|
||||
/// pass uses and updates.
|
||||
MachineRegisterInfo *MRI;
|
||||
|
@ -72,6 +76,7 @@ private:
|
|||
|
||||
public:
|
||||
Localizer();
|
||||
Localizer(std::function<bool(const MachineFunction &)>);
|
||||
|
||||
StringRef getPassName() const override { return "Localizer"; }
|
||||
|
||||
|
|
|
@ -29,7 +29,11 @@ INITIALIZE_PASS_END(Localizer, DEBUG_TYPE,
|
|||
"Move/duplicate certain instructions close to their use",
|
||||
false, false)
|
||||
|
||||
Localizer::Localizer() : MachineFunctionPass(ID) { }
|
||||
Localizer::Localizer(std::function<bool(const MachineFunction &)> F)
|
||||
: MachineFunctionPass(ID), DoNotRunPass(F) {}
|
||||
|
||||
Localizer::Localizer()
|
||||
: Localizer([](const MachineFunction &) { return false; }) {}
|
||||
|
||||
void Localizer::init(MachineFunction &MF) {
|
||||
MRI = &MF.getRegInfo();
|
||||
|
@ -212,6 +216,10 @@ bool Localizer::runOnMachineFunction(MachineFunction &MF) {
|
|||
MachineFunctionProperties::Property::FailedISel))
|
||||
return false;
|
||||
|
||||
// Don't run the pass if the target asked so.
|
||||
if (DoNotRunPass(MF))
|
||||
return false;
|
||||
|
||||
LLVM_DEBUG(dbgs() << "Localize instructions for: " << MF.getName() << '\n');
|
||||
|
||||
init(MF);
|
||||
|
|
Loading…
Reference in New Issue