Skip to content

Commit 4d0d35c

Browse files
committed
[CodeGen][NPM] Port PatchableFunction to NPM
1 parent 1fe702f commit 4d0d35c

File tree

7 files changed

+62
-13
lines changed

7 files changed

+62
-13
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
//===- llvm/CodeGen/PatchableFunction.h -------------------------*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_CODEGEN_PATCHABLEFUNCTION_H
10+
#define LLVM_CODEGEN_PATCHABLEFUNCTION_H
11+
12+
#include "llvm/CodeGen/MachinePassManager.h"
13+
14+
namespace llvm {
15+
16+
class PatchableFunctionPass : public PassInfoMixin<PatchableFunctionPass> {
17+
public:
18+
PreservedAnalyses run(MachineFunction &MF,
19+
MachineFunctionAnalysisManager &MFAM);
20+
21+
MachineFunctionProperties getRequiredProperties() const {
22+
return MachineFunctionProperties().set(
23+
MachineFunctionProperties::Property::NoVRegs);
24+
}
25+
static bool isRequired() { return true; }
26+
};
27+
28+
} // namespace llvm
29+
30+
#endif // LLVM_CODEGEN_PATCHABLEFUNCTION_H

llvm/include/llvm/InitializePasses.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ void initializeOptimizePHIsLegacyPass(PassRegistry &);
225225
void initializePEIPass(PassRegistry &);
226226
void initializePHIEliminationPass(PassRegistry &);
227227
void initializePartiallyInlineLibCallsLegacyPassPass(PassRegistry &);
228-
void initializePatchableFunctionPass(PassRegistry &);
228+
void initializePatchableFunctionLegacyPass(PassRegistry &);
229229
void initializePeepholeOptimizerLegacyPass(PassRegistry &);
230230
void initializePhiValuesWrapperPassPass(PassRegistry &);
231231
void initializePhysicalRegisterUsageInfoWrapperLegacyPass(PassRegistry &);

llvm/include/llvm/Passes/CodeGenPassBuilder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
#include "llvm/CodeGen/MachineVerifier.h"
5959
#include "llvm/CodeGen/OptimizePHIs.h"
6060
#include "llvm/CodeGen/PHIElimination.h"
61+
#include "llvm/CodeGen/PatchableFunction.h"
6162
#include "llvm/CodeGen/PeepholeOptimizer.h"
6263
#include "llvm/CodeGen/PostRASchedulerList.h"
6364
#include "llvm/CodeGen/PreISelIntrinsicLowering.h"

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ MACHINE_FUNCTION_PASS("machine-scheduler", MachineSchedulerPass(TM))
151151
MACHINE_FUNCTION_PASS("machinelicm", MachineLICMPass())
152152
MACHINE_FUNCTION_PASS("no-op-machine-function", NoOpMachineFunctionPass())
153153
MACHINE_FUNCTION_PASS("opt-phis", OptimizePHIsPass())
154+
MACHINE_FUNCTION_PASS("patchable-function", PatchableFunctionPass())
154155
MACHINE_FUNCTION_PASS("peephole-opt", PeepholeOptimizerPass())
155156
MACHINE_FUNCTION_PASS("phi-node-elimination", PHIEliminationPass())
156157
MACHINE_FUNCTION_PASS("post-RA-sched", PostRASchedulerPass(TM))
@@ -270,7 +271,6 @@ DUMMY_MACHINE_FUNCTION_PASS("machine-sanmd", MachineSanitizerBinaryMetadata)
270271
DUMMY_MACHINE_FUNCTION_PASS("machine-uniformity", MachineUniformityInfoWrapperPass)
271272
DUMMY_MACHINE_FUNCTION_PASS("machineinstr-printer", MachineFunctionPrinterPass)
272273
DUMMY_MACHINE_FUNCTION_PASS("mirfs-discriminators", MIRAddFSDiscriminatorsPass)
273-
DUMMY_MACHINE_FUNCTION_PASS("patchable-function", PatchableFunctionPass)
274274
DUMMY_MACHINE_FUNCTION_PASS("postra-machine-sink", PostRAMachineSinkingPass)
275275
DUMMY_MACHINE_FUNCTION_PASS("print-machine-uniformity", MachineUniformityInfoPrinterPass)
276276
DUMMY_MACHINE_FUNCTION_PASS("processimpdefs", ProcessImplicitDefsPass)

llvm/lib/CodeGen/CodeGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
103103
initializeOptimizePHIsLegacyPass(Registry);
104104
initializePEIPass(Registry);
105105
initializePHIEliminationPass(Registry);
106-
initializePatchableFunctionPass(Registry);
106+
initializePatchableFunctionLegacyPass(Registry);
107107
initializePeepholeOptimizerLegacyPass(Registry);
108108
initializePostMachineSchedulerLegacyPass(Registry);
109109
initializePostRAHazardRecognizerPass(Registry);

llvm/lib/CodeGen/PatchableFunction.cpp

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
//
1212
//===----------------------------------------------------------------------===//
1313

14+
#include "llvm/CodeGen/PatchableFunction.h"
1415
#include "llvm/CodeGen/MachineFunction.h"
1516
#include "llvm/CodeGen/MachineFunctionPass.h"
1617
#include "llvm/CodeGen/MachineInstrBuilder.h"
@@ -23,21 +24,37 @@
2324
using namespace llvm;
2425

2526
namespace {
26-
struct PatchableFunction : public MachineFunctionPass {
27-
static char ID; // Pass identification, replacement for typeid
28-
PatchableFunction() : MachineFunctionPass(ID) {
29-
initializePatchableFunctionPass(*PassRegistry::getPassRegistry());
27+
struct PatchableFunction {
28+
bool run(MachineFunction &F);
29+
};
30+
31+
struct PatchableFunctionLegacy : public MachineFunctionPass {
32+
static char ID;
33+
PatchableFunctionLegacy() : MachineFunctionPass(ID) {
34+
initializePatchableFunctionLegacyPass(*PassRegistry::getPassRegistry());
35+
}
36+
bool runOnMachineFunction(MachineFunction &F) override {
37+
return PatchableFunction().run(F);
3038
}
3139

32-
bool runOnMachineFunction(MachineFunction &F) override;
33-
MachineFunctionProperties getRequiredProperties() const override {
40+
MachineFunctionProperties getRequiredProperties() const override {
3441
return MachineFunctionProperties().set(
3542
MachineFunctionProperties::Property::NoVRegs);
3643
}
3744
};
45+
46+
} // namespace
47+
48+
PreservedAnalyses
49+
PatchableFunctionPass::run(MachineFunction &MF,
50+
MachineFunctionAnalysisManager &MFAM) {
51+
MFPropsModifier _(*this, MF);
52+
if (!PatchableFunction().run(MF))
53+
return PreservedAnalyses::all();
54+
return getMachineFunctionPassPreservedAnalyses();
3855
}
3956

40-
bool PatchableFunction::runOnMachineFunction(MachineFunction &MF) {
57+
bool PatchableFunction::run(MachineFunction &MF) {
4158
MachineBasicBlock &FirstMBB = *MF.begin();
4259

4360
if (MF.getFunction().hasFnAttribute("patchable-function-entry")) {
@@ -62,7 +79,7 @@ bool PatchableFunction::runOnMachineFunction(MachineFunction &MF) {
6279
return false;
6380
}
6481

65-
char PatchableFunction::ID = 0;
66-
char &llvm::PatchableFunctionID = PatchableFunction::ID;
67-
INITIALIZE_PASS(PatchableFunction, "patchable-function",
82+
char PatchableFunctionLegacy::ID = 0;
83+
char &llvm::PatchableFunctionID = PatchableFunctionLegacy::ID;
84+
INITIALIZE_PASS(PatchableFunctionLegacy, "patchable-function",
6885
"Implement the 'patchable-function' attribute", false, false)

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@
129129
#include "llvm/CodeGen/MachineVerifier.h"
130130
#include "llvm/CodeGen/OptimizePHIs.h"
131131
#include "llvm/CodeGen/PHIElimination.h"
132+
#include "llvm/CodeGen/PatchableFunction.h"
132133
#include "llvm/CodeGen/PeepholeOptimizer.h"
133134
#include "llvm/CodeGen/PostRASchedulerList.h"
134135
#include "llvm/CodeGen/PreISelIntrinsicLowering.h"

0 commit comments

Comments
 (0)