Skip to content

Commit 35e858f

Browse files
committed
[CodeGen][NewPM] Port OptimizePHIs to NPM
1 parent 2c3d7d5 commit 35e858f

File tree

15 files changed

+82
-27
lines changed

15 files changed

+82
-27
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//===- llvm/CodeGen/OptimizePHIs.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_OPTIMIZE_PHIS_H
10+
#define LLVM_CODEGEN_OPTIMIZE_PHIS_H
11+
12+
#include "llvm/CodeGen/MachinePassManager.h"
13+
14+
namespace llvm {
15+
16+
class OptimizePHIsPass : public PassInfoMixin<OptimizePHIsPass> {
17+
public:
18+
PreservedAnalyses run(MachineFunction &MF,
19+
MachineFunctionAnalysisManager &MFAM);
20+
};
21+
22+
} // namespace llvm
23+
24+
#endif // LLVM_CODEGEN_OPTIMIZE_PHIS_H
25+

llvm/include/llvm/CodeGen/Passes.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ namespace llvm {
367367

368368
/// OptimizePHIs - This pass optimizes machine instruction PHIs
369369
/// to take advantage of opportunities created during DAG legalization.
370-
extern char &OptimizePHIsID;
370+
extern char &OptimizePHIsLegacyID;
371371

372372
/// StackSlotColoring - This pass performs stack slot coloring.
373373
extern char &StackSlotColoringID;

llvm/include/llvm/InitializePasses.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ void initializeModuloScheduleTestPass(PassRegistry &);
221221
void initializeNaryReassociateLegacyPassPass(PassRegistry &);
222222
void initializeObjCARCContractLegacyPassPass(PassRegistry &);
223223
void initializeOptimizationRemarkEmitterWrapperPassPass(PassRegistry &);
224-
void initializeOptimizePHIsPass(PassRegistry &);
224+
void initializeOptimizePHIsLegacyPass(PassRegistry &);
225225
void initializePEIPass(PassRegistry &);
226226
void initializePHIEliminationPass(PassRegistry &);
227227
void initializePartiallyInlineLibCallsLegacyPassPass(PassRegistry &);

llvm/include/llvm/Passes/CodeGenPassBuilder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
#include "llvm/CodeGen/MachineModuleInfo.h"
5050
#include "llvm/CodeGen/MachinePassManager.h"
5151
#include "llvm/CodeGen/MachineVerifier.h"
52+
#include "llvm/CodeGen/OptimizePHIs.h"
5253
#include "llvm/CodeGen/PHIElimination.h"
5354
#include "llvm/CodeGen/PreISelIntrinsicLowering.h"
5455
#include "llvm/CodeGen/RegAllocFast.h"

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ MACHINE_FUNCTION_PASS("localstackalloc", LocalStackSlotAllocationPass())
138138
MACHINE_FUNCTION_PASS("machine-cse", MachineCSEPass())
139139
MACHINE_FUNCTION_PASS("machinelicm", MachineLICMPass())
140140
MACHINE_FUNCTION_PASS("no-op-machine-function", NoOpMachineFunctionPass())
141+
MACHINE_FUNCTION_PASS("opt-phis", OptimizePHIsPass())
141142
MACHINE_FUNCTION_PASS("phi-node-elimination", PHIEliminationPass())
142143
MACHINE_FUNCTION_PASS("print", PrintMIRPass())
143144
MACHINE_FUNCTION_PASS("print<live-intervals>", LiveIntervalsPrinterPass(dbgs()))
@@ -233,7 +234,6 @@ DUMMY_MACHINE_FUNCTION_PASS("machine-sink", MachineSinkingPass)
233234
DUMMY_MACHINE_FUNCTION_PASS("machine-uniformity", MachineUniformityInfoWrapperPass)
234235
DUMMY_MACHINE_FUNCTION_PASS("machineinstr-printer", MachineFunctionPrinterPass)
235236
DUMMY_MACHINE_FUNCTION_PASS("mirfs-discriminators", MIRAddFSDiscriminatorsPass)
236-
DUMMY_MACHINE_FUNCTION_PASS("opt-phis", OptimizePHIsPass)
237237
DUMMY_MACHINE_FUNCTION_PASS("patchable-function", PatchableFunctionPass)
238238
DUMMY_MACHINE_FUNCTION_PASS("peephole-opt", PeepholeOptimizerPass)
239239
DUMMY_MACHINE_FUNCTION_PASS("post-RA-sched", PostRASchedulerPass)

llvm/lib/CodeGen/CodeGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
9999
initializeMachineUniformityInfoPrinterPassPass(Registry);
100100
initializeMachineVerifierLegacyPassPass(Registry);
101101
initializeObjCARCContractLegacyPassPass(Registry);
102-
initializeOptimizePHIsPass(Registry);
102+
initializeOptimizePHIsLegacyPass(Registry);
103103
initializePEIPass(Registry);
104104
initializePHIEliminationPass(Registry);
105105
initializePatchableFunctionPass(Registry);

llvm/lib/CodeGen/OptimizePHIs.cpp

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,18 @@
1111
//
1212
//===----------------------------------------------------------------------===//
1313

14+
#include "llvm/CodeGen/OptimizePHIs.h"
1415
#include "llvm/ADT/SmallPtrSet.h"
1516
#include "llvm/ADT/Statistic.h"
1617
#include "llvm/CodeGen/MachineBasicBlock.h"
1718
#include "llvm/CodeGen/MachineFunction.h"
1819
#include "llvm/CodeGen/MachineFunctionPass.h"
1920
#include "llvm/CodeGen/MachineInstr.h"
2021
#include "llvm/CodeGen/MachineOperand.h"
22+
#include "llvm/CodeGen/MachinePassManager.h"
2123
#include "llvm/CodeGen/MachineRegisterInfo.h"
2224
#include "llvm/CodeGen/TargetSubtargetInfo.h"
25+
#include "llvm/IR/Analysis.h"
2326
#include "llvm/InitializePasses.h"
2427
#include "llvm/Pass.h"
2528
#include <cassert>
@@ -33,23 +36,12 @@ STATISTIC(NumDeadPHICycles, "Number of dead PHI cycles");
3336

3437
namespace {
3538

36-
class OptimizePHIs : public MachineFunctionPass {
39+
class OptimizePHIs {
3740
MachineRegisterInfo *MRI = nullptr;
3841
const TargetInstrInfo *TII = nullptr;
3942

4043
public:
41-
static char ID; // Pass identification
42-
43-
OptimizePHIs() : MachineFunctionPass(ID) {
44-
initializeOptimizePHIsPass(*PassRegistry::getPassRegistry());
45-
}
46-
47-
bool runOnMachineFunction(MachineFunction &Fn) override;
48-
49-
void getAnalysisUsage(AnalysisUsage &AU) const override {
50-
AU.setPreservesCFG();
51-
MachineFunctionPass::getAnalysisUsage(AU);
52-
}
44+
bool run(MachineFunction &Fn);
5345

5446
private:
5547
using InstrSet = SmallPtrSet<MachineInstr *, 16>;
@@ -61,19 +53,45 @@ namespace {
6153
bool OptimizeBB(MachineBasicBlock &MBB);
6254
};
6355

56+
class OptimizePHIsLegacy : public MachineFunctionPass {
57+
public:
58+
static char ID;
59+
OptimizePHIsLegacy() : MachineFunctionPass(ID) {
60+
initializeOptimizePHIsLegacyPass(*PassRegistry::getPassRegistry());
61+
}
62+
63+
bool runOnMachineFunction(MachineFunction &MF) override {
64+
if (skipFunction(MF.getFunction()))
65+
return false;
66+
OptimizePHIs OP;
67+
return OP.run(MF);
68+
}
69+
70+
void getAnalysisUsage(AnalysisUsage &AU) const override {
71+
AU.setPreservesCFG();
72+
MachineFunctionPass::getAnalysisUsage(AU);
73+
}
74+
};
6475
} // end anonymous namespace
6576

66-
char OptimizePHIs::ID = 0;
77+
char OptimizePHIsLegacy::ID = 0;
6778

68-
char &llvm::OptimizePHIsID = OptimizePHIs::ID;
79+
char &llvm::OptimizePHIsLegacyID = OptimizePHIsLegacy::ID;
6980

70-
INITIALIZE_PASS(OptimizePHIs, DEBUG_TYPE,
81+
INITIALIZE_PASS(OptimizePHIsLegacy, DEBUG_TYPE,
7182
"Optimize machine instruction PHIs", false, false)
7283

73-
bool OptimizePHIs::runOnMachineFunction(MachineFunction &Fn) {
74-
if (skipFunction(Fn.getFunction()))
75-
return false;
84+
PreservedAnalyses OptimizePHIsPass::run(MachineFunction &MF,
85+
MachineFunctionAnalysisManager &MFAM) {
86+
OptimizePHIs OP;
87+
if (!OP.run(MF))
88+
return PreservedAnalyses::all();
89+
auto PA = getMachineFunctionPassPreservedAnalyses();
90+
PA.preserveSet<CFGAnalyses>();
91+
return PA;
92+
}
7693

94+
bool OptimizePHIs::run(MachineFunction &Fn) {
7795
MRI = &Fn.getRegInfo();
7896
TII = Fn.getSubtarget().getInstrInfo();
7997

llvm/lib/CodeGen/TargetPassConfig.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1283,7 +1283,7 @@ void TargetPassConfig::addMachineSSAOptimization() {
12831283

12841284
// Optimize PHIs before DCE: removing dead PHI cycles may make more
12851285
// instructions dead.
1286-
addPass(&OptimizePHIsID);
1286+
addPass(&OptimizePHIsLegacyID);
12871287

12881288
// This pass merges large allocas. StackSlotColoring is a different pass
12891289
// which merges spill slots.

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@
114114
#include "llvm/CodeGen/MachineRegisterInfo.h"
115115
#include "llvm/CodeGen/MachineTraceMetrics.h"
116116
#include "llvm/CodeGen/MachineVerifier.h"
117+
#include "llvm/CodeGen/OptimizePHIs.h"
117118
#include "llvm/CodeGen/PHIElimination.h"
118119
#include "llvm/CodeGen/PreISelIntrinsicLowering.h"
119120
#include "llvm/CodeGen/RegAllocFast.h"

llvm/lib/Passes/StandardInstrumentations.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
#include "llvm/Passes/StandardInstrumentations.h"
1616
#include "llvm/ADT/Any.h"
17+
#include "llvm/ADT/FloatingPointMode.h"
1718
#include "llvm/ADT/StringRef.h"
1819
#include "llvm/Analysis/CallGraphSCCPass.h"
1920
#include "llvm/Analysis/LazyCallGraph.h"
@@ -1048,12 +1049,15 @@ void OptNoneInstrumentation::registerCallbacks(
10481049
}
10491050

10501051
bool OptNoneInstrumentation::shouldRun(StringRef PassID, Any IR) {
1052+
errs() << "shouldRun callback for " << PassID << " on " << getIRName(IR)
1053+
<< "\n";
10511054
const auto *F = unwrapIR<Function>(IR);
10521055
if (!F) {
10531056
if (const auto *L = unwrapIR<Loop>(IR))
10541057
F = L->getHeader()->getParent();
10551058
}
10561059
bool ShouldRun = !(F && F->hasOptNone());
1060+
errs() << "\tShouldRun is " << ShouldRun << " and F is " << F << "\n";
10571061
if (!ShouldRun && DebugLogging) {
10581062
errs() << "Skipping pass " << PassID << " on " << F->getName()
10591063
<< " due to optnone attribute\n";

0 commit comments

Comments
 (0)