mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-18 10:24:45 +00:00
[ARM] Pass a callback to FunctionPass constructors to enable skipping execution
on a per-function basis. Previously some of the passes were conditionally added to ARM's pass pipeline based on the target machine's subtarget. This patch makes changes to add those passes unconditionally and execute them conditonally based on the predicate functor passed to the pass constructors. This enables running different sets of passes for different functions in the module. rdar://problem/20542263 Differential Revision: http://reviews.llvm.org/D8717 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239325 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -23,11 +23,15 @@ namespace {
|
||||
class UnpackMachineBundles : public MachineFunctionPass {
|
||||
public:
|
||||
static char ID; // Pass identification
|
||||
UnpackMachineBundles() : MachineFunctionPass(ID) {
|
||||
UnpackMachineBundles(std::function<bool(const Function &)> Ftor = nullptr)
|
||||
: MachineFunctionPass(ID), PredicateFtor(Ftor) {
|
||||
initializeUnpackMachineBundlesPass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
|
||||
bool runOnMachineFunction(MachineFunction &MF) override;
|
||||
|
||||
private:
|
||||
std::function<bool(const Function &)> PredicateFtor;
|
||||
};
|
||||
} // end anonymous namespace
|
||||
|
||||
@@ -37,6 +41,9 @@ INITIALIZE_PASS(UnpackMachineBundles, "unpack-mi-bundles",
|
||||
"Unpack machine instruction bundles", false, false)
|
||||
|
||||
bool UnpackMachineBundles::runOnMachineFunction(MachineFunction &MF) {
|
||||
if (PredicateFtor && !PredicateFtor(*MF.getFunction()))
|
||||
return false;
|
||||
|
||||
bool Changed = false;
|
||||
for (MachineFunction::iterator I = MF.begin(), E = MF.end(); I != E; ++I) {
|
||||
MachineBasicBlock *MBB = &*I;
|
||||
@@ -69,6 +76,10 @@ bool UnpackMachineBundles::runOnMachineFunction(MachineFunction &MF) {
|
||||
return Changed;
|
||||
}
|
||||
|
||||
FunctionPass *
|
||||
llvm::createUnpackMachineBundles(std::function<bool(const Function &)> Ftor) {
|
||||
return new UnpackMachineBundles(Ftor);
|
||||
}
|
||||
|
||||
namespace {
|
||||
class FinalizeMachineBundles : public MachineFunctionPass {
|
||||
|
Reference in New Issue
Block a user