Skip to content

Commit 3a5a2bd

Browse files
committed
[CodeGen][NPM] Port MIRFSDiscriminator to NPM
1 parent 4147316 commit 3a5a2bd

File tree

6 files changed

+83
-15
lines changed

6 files changed

+83
-15
lines changed

llvm/include/llvm/CodeGen/MIRFSDiscriminator.h

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "llvm/ADT/StringRef.h"
2121
#include "llvm/CodeGen/MachineFunction.h"
2222
#include "llvm/CodeGen/MachineFunctionPass.h"
23+
#include "llvm/CodeGen/MachinePassManager.h"
2324
#include "llvm/Support/Discriminator.h"
2425

2526
#include <cassert>
@@ -29,26 +30,21 @@ namespace llvm {
2930
class MachineFunction;
3031

3132
using namespace sampleprof;
32-
class MIRAddFSDiscriminators : public MachineFunctionPass {
33+
class MIRAddFSDiscriminators {
3334
MachineFunction *MF = nullptr;
3435
FSDiscriminatorPass Pass;
3536
unsigned LowBit;
3637
unsigned HighBit;
3738

3839
public:
39-
static char ID;
4040
/// PassNum is the sequence number this pass is called, start from 1.
4141
MIRAddFSDiscriminators(FSDiscriminatorPass P = FSDiscriminatorPass::Pass1)
42-
: MachineFunctionPass(ID), Pass(P) {
42+
: Pass(P) {
4343
LowBit = getFSPassBitBegin(P);
4444
HighBit = getFSPassBitEnd(P);
4545
assert(LowBit < HighBit && "HighBit needs to be greater than Lowbit");
4646
}
4747

48-
StringRef getPassName() const override {
49-
return "Add FS discriminators in MIR";
50-
}
51-
5248
/// getNumFSBBs() - Return the number of machine BBs that have FS samples.
5349
unsigned getNumFSBBs();
5450

@@ -59,8 +55,33 @@ class MIRAddFSDiscriminators : public MachineFunctionPass {
5955
/// getMachineFunction - Return the current machine function.
6056
const MachineFunction *getMachineFunction() const { return MF; }
6157

58+
bool runOnMachineFunction(MachineFunction &);
59+
};
60+
61+
class MIRAddFSDiscriminatorsLegacy : public MachineFunctionPass {
62+
FSDiscriminatorPass Pass;
63+
64+
public:
65+
static char ID;
66+
MIRAddFSDiscriminatorsLegacy(
67+
FSDiscriminatorPass P = FSDiscriminatorPass::Pass1)
68+
: MachineFunctionPass(ID), Pass(P) {}
69+
StringRef getPassName() const override {
70+
return "Add FS discriminators in MIR";
71+
}
72+
6273
private:
63-
bool runOnMachineFunction(MachineFunction &) override;
74+
bool runOnMachineFunction(MachineFunction &MF) override;
75+
};
76+
77+
class MIRAddFSDiscriminatorsPass
78+
: public PassInfoMixin<MIRAddFSDiscriminatorsPass> {
79+
FSDiscriminatorPass Pass;
80+
81+
public:
82+
MIRAddFSDiscriminatorsPass(FSDiscriminatorPass P = FSDiscriminatorPass::Pass1)
83+
: Pass(P) {}
84+
PreservedAnalyses run(MachineFunction &F, MachineFunctionAnalysisManager &AM);
6485
};
6586

6687
} // namespace llvm

llvm/include/llvm/InitializePasses.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ void initializeLowerIntrinsicsPass(PassRegistry &);
179179
void initializeLowerInvokeLegacyPassPass(PassRegistry &);
180180
void initializeLowerSwitchLegacyPassPass(PassRegistry &);
181181
void initializeKCFIPass(PassRegistry &);
182-
void initializeMIRAddFSDiscriminatorsPass(PassRegistry &);
182+
void initializeMIRAddFSDiscriminatorsLegacyPass(PassRegistry &);
183183
void initializeMIRCanonicalizerPass(PassRegistry &);
184184
void initializeMIRNamerPass(PassRegistry &);
185185
void initializeMIRPrintingPassPass(PassRegistry &);

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,14 @@ MACHINE_FUNCTION_PASS_WITH_PARAMS(
198198
return MachineSinkingPass(EnableSinkAndFold);
199199
},
200200
parseMachineSinkingPassOptions, "enable-sink-fold")
201+
202+
MACHINE_FUNCTION_PASS_WITH_PARAMS(
203+
"mirfs-discriminators", "MIRAddFSDiscriminatorsPass",
204+
[](FSDiscriminatorPass Pass) { return MIRAddFSDiscriminatorsPass(Pass); },
205+
[PB = this](StringRef Params) {
206+
return parseFSDiscriminatorPassOptions(*PB, Params);
207+
},
208+
"fs-discr-pass")
201209

202210
MACHINE_FUNCTION_PASS_WITH_PARAMS(
203211
"regallocfast", "RegAllocFastPass",
@@ -269,7 +277,6 @@ DUMMY_MACHINE_FUNCTION_PASS("machine-function-splitter", MachineFunctionSplitter
269277
DUMMY_MACHINE_FUNCTION_PASS("machine-sanmd", MachineSanitizerBinaryMetadata)
270278
DUMMY_MACHINE_FUNCTION_PASS("machine-uniformity", MachineUniformityInfoWrapperPass)
271279
DUMMY_MACHINE_FUNCTION_PASS("machineinstr-printer", MachineFunctionPrinterPass)
272-
DUMMY_MACHINE_FUNCTION_PASS("mirfs-discriminators", MIRAddFSDiscriminatorsPass)
273280
DUMMY_MACHINE_FUNCTION_PASS("patchable-function", PatchableFunctionPass)
274281
DUMMY_MACHINE_FUNCTION_PASS("postra-machine-sink", PostRAMachineSinkingPass)
275282
DUMMY_MACHINE_FUNCTION_PASS("print-machine-uniformity", MachineUniformityInfoPrinterPass)

llvm/lib/CodeGen/CodeGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
6767
initializeLocalStackSlotPassPass(Registry);
6868
initializeLowerGlobalDtorsLegacyPassPass(Registry);
6969
initializeLowerIntrinsicsPass(Registry);
70-
initializeMIRAddFSDiscriminatorsPass(Registry);
70+
initializeMIRAddFSDiscriminatorsLegacyPass(Registry);
7171
initializeMIRCanonicalizerPass(Registry);
7272
initializeMIRNamerPass(Registry);
7373
initializeMIRProfileLoaderPassPass(Registry);

llvm/lib/CodeGen/MIRFSDiscriminator.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,16 @@ cl::opt<bool> ImprovedFSDiscriminator(
4242
"encoding)"));
4343
}
4444

45-
char MIRAddFSDiscriminators::ID = 0;
45+
char MIRAddFSDiscriminatorsLegacy::ID = 0;
4646

47-
INITIALIZE_PASS(MIRAddFSDiscriminators, DEBUG_TYPE,
47+
INITIALIZE_PASS(MIRAddFSDiscriminatorsLegacy, DEBUG_TYPE,
4848
"Add MIR Flow Sensitive Discriminators",
4949
/* cfg = */ false, /* is_analysis = */ false)
5050

51-
char &llvm::MIRAddFSDiscriminatorsID = MIRAddFSDiscriminators::ID;
51+
char &llvm::MIRAddFSDiscriminatorsID = MIRAddFSDiscriminatorsLegacy::ID;
5252

5353
FunctionPass *llvm::createMIRAddFSDiscriminatorsPass(FSDiscriminatorPass P) {
54-
return new MIRAddFSDiscriminators(P);
54+
return new MIRAddFSDiscriminatorsLegacy(P);
5555
}
5656

5757
// TODO(xur): Remove this once we switch to ImprovedFSDiscriminator.
@@ -88,6 +88,18 @@ static uint64_t getCallStackHash(const DILocation *DIL) {
8888
return Ret;
8989
}
9090

91+
PreservedAnalyses
92+
MIRAddFSDiscriminatorsPass::run(MachineFunction &MF,
93+
MachineFunctionAnalysisManager &) {
94+
if (MIRAddFSDiscriminators(Pass).runOnMachineFunction(MF))
95+
return PreservedAnalyses::none();
96+
return getMachineFunctionPassPreservedAnalyses();
97+
}
98+
99+
bool MIRAddFSDiscriminatorsLegacy::runOnMachineFunction(MachineFunction &MF) {
100+
return MIRAddFSDiscriminators(Pass).runOnMachineFunction(MF);
101+
}
102+
91103
// Traverse the CFG and assign FD discriminators. If two instructions
92104
// have the same lineno and discriminator, but residing in different BBs,
93105
// the latter instruction will get a new discriminator value. The new

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107
#include "llvm/CodeGen/LiveVariables.h"
108108
#include "llvm/CodeGen/LocalStackSlotAllocation.h"
109109
#include "llvm/CodeGen/LowerEmuTLS.h"
110+
#include "llvm/CodeGen/MIRFSDiscriminator.h"
110111
#include "llvm/CodeGen/MIRPrinter.h"
111112
#include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
112113
#include "llvm/CodeGen/MachineBranchProbabilityInfo.h"
@@ -1433,9 +1434,36 @@ parseRegAllocGreedyFilterFunc(PassBuilder &PB, StringRef Params) {
14331434
inconvertibleErrorCode());
14341435
}
14351436

1437+
<<<<<<< HEAD
14361438
Expected<bool> parseMachineSinkingPassOptions(StringRef Params) {
14371439
return PassBuilder::parseSinglePassOption(Params, "enable-sink-fold",
14381440
"MachineSinkingPass");
1441+
}
1442+
1443+
Expected<FSDiscriminatorPass>
1444+
parseFSDiscriminatorPassOptions(PassBuilder &PB, StringRef Params) {
1445+
if (Params == "Base")
1446+
return FSDiscriminatorPass::Base;
1447+
if (Params.consume_front("Pass")) {
1448+
switch (Params.front()) {
1449+
case '0':
1450+
return FSDiscriminatorPass::Pass0;
1451+
case '1':
1452+
return FSDiscriminatorPass::Pass1;
1453+
case '2':
1454+
return FSDiscriminatorPass::Pass2;
1455+
case '3':
1456+
return FSDiscriminatorPass::Pass3;
1457+
case '4':
1458+
return FSDiscriminatorPass::Pass4;
1459+
default:
1460+
if (Params == "Last")
1461+
return FSDiscriminatorPass::PassLast;
1462+
}
1463+
}
1464+
return make_error<StringError>(
1465+
formatv("invalid FSDiscriminator pass parameter '{0}' ", Params).str(),
1466+
inconvertibleErrorCode());
14391467
}
14401468

14411469
} // namespace

0 commit comments

Comments
 (0)