Skip to content

Commit 7629fbb

Browse files
committed
[CodeGen] Port MachineUniformityAnalysis to new pass manager
1 parent c215318 commit 7629fbb

22 files changed

+69
-2
lines changed

llvm/include/llvm/CodeGen/MachineUniformityAnalysis.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "llvm/ADT/GenericUniformityInfo.h"
1818
#include "llvm/CodeGen/MachineCycleAnalysis.h"
1919
#include "llvm/CodeGen/MachineDominators.h"
20+
#include "llvm/CodeGen/MachinePassManager.h"
2021
#include "llvm/CodeGen/MachineSSAContext.h"
2122

2223
namespace llvm {
@@ -51,6 +52,27 @@ class MachineUniformityAnalysisPass : public MachineFunctionPass {
5152
// TODO: verify analysis
5253
};
5354

55+
class MachineUniformityAnalysis
56+
: public AnalysisInfoMixin<MachineUniformityAnalysis> {
57+
friend AnalysisInfoMixin<MachineUniformityAnalysis>;
58+
static AnalysisKey Key;
59+
60+
public:
61+
using Result = MachineUniformityInfo;
62+
Result run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM);
63+
};
64+
65+
class MachineUniformityPrinterPass
66+
: public PassInfoMixin<MachineUniformityAnalysis> {
67+
raw_ostream &OS;
68+
69+
public:
70+
explicit MachineUniformityPrinterPass(raw_ostream &OS) : OS(OS) {}
71+
PreservedAnalyses run(MachineFunction &MF,
72+
MachineFunctionAnalysisManager &MFAM);
73+
static bool isRequired() { return true; }
74+
};
75+
5476
} // namespace llvm
5577

5678
#endif // LLVM_CODEGEN_MACHINEUNIFORMITYANALYSIS_H

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ MACHINE_FUNCTION_ANALYSIS("machine-opt-remark-emitter",
114114
MACHINE_FUNCTION_ANALYSIS("machine-post-dom-tree",
115115
MachinePostDominatorTreeAnalysis())
116116
MACHINE_FUNCTION_ANALYSIS("machine-trace-metrics", MachineTraceMetricsAnalysis())
117+
MACHINE_FUNCTION_ANALYSIS("machine-uniformity", MachineUniformityAnalysis())
117118
MACHINE_FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC))
118119
MACHINE_FUNCTION_ANALYSIS("regalloc-evict", RegAllocEvictionAdvisorAnalysis())
119120
MACHINE_FUNCTION_ANALYSIS("regalloc-priority", RegAllocPriorityAdvisorAnalysis())
@@ -178,6 +179,8 @@ MACHINE_FUNCTION_PASS("print<machine-dom-tree>",
178179
MACHINE_FUNCTION_PASS("print<machine-loops>", MachineLoopPrinterPass(errs()))
179180
MACHINE_FUNCTION_PASS("print<machine-post-dom-tree>",
180181
MachinePostDominatorTreePrinterPass(errs()))
182+
MACHINE_FUNCTION_PASS("print<machine-uniformity>",
183+
MachineUniformityPrinterPass(errs()))
181184
MACHINE_FUNCTION_PASS("print<slot-indexes>", SlotIndexesPrinterPass(errs()))
182185
MACHINE_FUNCTION_PASS("print<virtregmap>", VirtRegMapPrinterPass(errs()))
183186
MACHINE_FUNCTION_PASS("reg-usage-collector", RegUsageInfoCollectorPass())
@@ -302,11 +305,9 @@ DUMMY_MACHINE_FUNCTION_PASS("lrshrink", LiveRangeShrinkPass)
302305
DUMMY_MACHINE_FUNCTION_PASS("machine-combiner", MachineCombinerPass)
303306
DUMMY_MACHINE_FUNCTION_PASS("static-data-splitter", StaticDataSplitter)
304307
DUMMY_MACHINE_FUNCTION_PASS("machine-function-splitter", MachineFunctionSplitterPass)
305-
DUMMY_MACHINE_FUNCTION_PASS("machine-uniformity", MachineUniformityInfoWrapperPass)
306308
DUMMY_MACHINE_FUNCTION_PASS("machineinstr-printer", MachineFunctionPrinterPass)
307309
DUMMY_MACHINE_FUNCTION_PASS("mirfs-discriminators", MIRAddFSDiscriminatorsPass)
308310
DUMMY_MACHINE_FUNCTION_PASS("postra-machine-sink", PostRAMachineSinkingPass)
309-
DUMMY_MACHINE_FUNCTION_PASS("print-machine-uniformity", MachineUniformityInfoPrinterPass)
310311
DUMMY_MACHINE_FUNCTION_PASS("processimpdefs", ProcessImplicitDefsPass)
311312
DUMMY_MACHINE_FUNCTION_PASS("prologepilog", PrologEpilogInserterPass)
312313
DUMMY_MACHINE_FUNCTION_PASS("prologepilog-code", PrologEpilogCodeInserterPass)

llvm/lib/CodeGen/MachineUniformityAnalysis.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#include "llvm/CodeGen/MachineUniformityAnalysis.h"
1010
#include "llvm/ADT/GenericUniformityImpl.h"
11+
#include "llvm/Analysis/TargetTransformInfo.h"
1112
#include "llvm/CodeGen/MachineCycleAnalysis.h"
1213
#include "llvm/CodeGen/MachineDominators.h"
1314
#include "llvm/CodeGen/MachineRegisterInfo.h"
@@ -177,6 +178,30 @@ class MachineUniformityInfoPrinterPass : public MachineFunctionPass {
177178

178179
} // namespace
179180

181+
AnalysisKey MachineUniformityAnalysis::Key;
182+
183+
MachineUniformityAnalysis::Result
184+
MachineUniformityAnalysis::run(MachineFunction &MF,
185+
MachineFunctionAnalysisManager &MFAM) {
186+
auto &DomTree = MFAM.getResult<MachineDominatorTreeAnalysis>(MF);
187+
auto &CI = MFAM.getResult<MachineCycleAnalysis>(MF);
188+
auto &FAM = MFAM.getResult<FunctionAnalysisManagerMachineFunctionProxy>(MF)
189+
.getManager();
190+
auto &F = MF.getFunction();
191+
auto &TTI = FAM.getResult<TargetIRAnalysis>(F);
192+
return computeMachineUniformityInfo(MF, CI, DomTree,
193+
TTI.hasBranchDivergence(&F));
194+
}
195+
196+
PreservedAnalyses
197+
MachineUniformityPrinterPass::run(MachineFunction &MF,
198+
MachineFunctionAnalysisManager &MFAM) {
199+
auto &MUI = MFAM.getResult<MachineUniformityAnalysis>(MF);
200+
OS << "MachineUniformityInfo for function: " << MF.getName() << '\n';
201+
MUI.print(OS);
202+
return PreservedAnalyses::all();
203+
}
204+
180205
char MachineUniformityAnalysisPass::ID = 0;
181206

182207
MachineUniformityAnalysisPass::MachineUniformityAnalysisPass()

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@
133133
#include "llvm/CodeGen/MachineScheduler.h"
134134
#include "llvm/CodeGen/MachineSink.h"
135135
#include "llvm/CodeGen/MachineTraceMetrics.h"
136+
#include "llvm/CodeGen/MachineUniformityAnalysis.h"
136137
#include "llvm/CodeGen/MachineVerifier.h"
137138
#include "llvm/CodeGen/OptimizePHIs.h"
138139
#include "llvm/CodeGen/PHIElimination.h"

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/always-uniform-gmir.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# NOTE: This file is Generic MIR translation of test/Analysis/UniformityAnalysis/AMDGPU/always_uniform.ll test file
22
# RUN: llc -mtriple=amdgcn-- -run-pass=print-machine-uniformity -o - %s 2>&1 | FileCheck %s
3+
# RUN: llc -mtriple=amdgcn-- -passes='print<machine-uniformity>' -o - %s 2>&1 | FileCheck %s
34
---
45
name: readfirstlane
56
body: |

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/always-uniform.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# RUN: llc -mtriple=amdgcn-- -mcpu=gfx900 -run-pass=print-machine-uniformity -o - %s 2>&1 | FileCheck %s
2+
# RUN: llc -mtriple=amdgcn-- -mcpu=gfx900 -passes='print<machine-uniformity>' -o - %s 2>&1 | FileCheck %s
23

34
# readlane, readfirstlane is always uniform
45

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/atomics-gmir.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# RUN: llc -mtriple=amdgcn-- -run-pass=print-machine-uniformity -o - %s 2>&1 | FileCheck %s
2+
# RUN: llc -mtriple=amdgcn-- -passes='print<machine-uniformity>' -o - %s 2>&1 | FileCheck %s
23

34
---
45
name: test1

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/atomics.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# RUN: llc -mtriple=amdgcn-- -run-pass=print-machine-uniformity -o - %s 2>&1 | FileCheck %s
2+
# RUN: llc -mtriple=amdgcn-- -passes='print<machine-uniformity>' -o - %s 2>&1 | FileCheck %s
23

34
---
45
name: test1

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/control-flow-intrinsics.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# RUN: llc -mtriple=amdgcn-- -mcpu=gfx900 -run-pass=print-machine-uniformity -o - %s 2>&1 | FileCheck %s
2+
# RUN: llc -mtriple=amdgcn-- -mcpu=gfx900 -passes='print<machine-uniformity>' -o - %s 2>&1 | FileCheck %s
23

34
---
45
name: f1

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/hidden-diverge-gmir.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# RUN: llc -mtriple=amdgcn-- -run-pass=print-machine-uniformity -o - %s 2>&1 | FileCheck %s
2+
# RUN: llc -mtriple=amdgcn-- -passes='print<machine-uniformity>' -o - %s 2>&1 | FileCheck %s
23
# CHECK-LABEL: MachineUniformityInfo for function: hidden_diverge
34
# CHECK-LABEL: BLOCK bb.0
45
# CHECK: DIVERGENT: %{{[0-9]*}}: %{{[0-9]*}}:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.workitem.id.x)

0 commit comments

Comments
 (0)