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)

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/hidden-loop-diverge.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_loop_diverge
34

45
# CHECK-LABEL: BLOCK bb.0

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/irreducible/branch-outside-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
# CHECK-LABEL: MachineUniformityInfo for function: basic
45
# CHECK-NEXT: CYCLES ASSSUMED DIVERGENT:

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/irreducible/diverged-entry-basic-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: divergent_cycle_1
34
# CHECK-NEXT: CYCLES ASSSUMED DIVERGENT:
45
# CHECK-NEXT: depth=1: entries(bb.3 bb.1) bb.4 bb.2

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/irreducible/exit-divergence-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: basic
34
# CHECK-NOT: CYCLES ASSSUMED DIVERGENT:
45
# CHECK: CYCLES WITH DIVERGENT EXIT:

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/irreducible/irreducible-2-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
# bb0(div)
45
# / \

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/join-loopexit-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: test
34

45
# CHECK-LABEL: BLOCK bb.0

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/loads-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: loads

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/never-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
# loads from flat non uniform
34
---
45
name: flatloads

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/temporal-divergence.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
# CHECK-LABEL: MachineUniformityInfo for function: temporal_diverge

llvm/test/Analysis/UniformityAnalysis/AMDGPU/MIR/uses-value-from-cycle.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=gfx1030 -run-pass=print-machine-uniformity -o - %s 2>&1 | FileCheck %s
2+
# RUN: llc -mtriple=amdgcn-- -mcpu=gfx1030 -passes='print<machine-uniformity>' -o - %s 2>&1 | FileCheck %s
23
---
34
name: f1
45
tracksRegLiveness: true

llvm/test/Analysis/UniformityAnalysis/AMDGPU/deprecated/hidden-diverge.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
# This test was generated using SelectionDAG, where the compilation flow does
45
# not match the assumptions made in MachineUA. For now, this test mostly serves

llvm/test/Analysis/UniformityAnalysis/AMDGPU/deprecated/irreducible-1.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
# This test was generated using SelectionDAG, where the compilation flow does
45
# not match the assumptions made in MachineUA. For now, this test mostly serves

0 commit comments

Comments
 (0)