Skip to content

Commit 6fe6f1b

Browse files
authored
[CodeGen] Add MachineBlockHashInfoAnalysis for the new pass manager (#193107)
This patch introduces MachineBlockHashInfoAnalysis and its corresponding printer pass MachineBlockHashInfoPrinterPass to the new pass manager. This allows running -passes="print<machine-block-hash>" via llc. Can't merge before #192826, and don't want to mix test patch with determinism fix in #192826. This is #192911 which was accidentally merged into spr/users branch.
1 parent 75790bf commit 6fe6f1b

5 files changed

Lines changed: 103 additions & 1 deletion

File tree

llvm/include/llvm/CodeGen/MachineBlockHashInfo.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,29 @@ class MachineBlockHashInfoResult {
106106
uint64_t getMBBHash(const MachineBasicBlock &MBB) const;
107107
};
108108

109+
class MachineBlockHashInfoAnalysis
110+
: public AnalysisInfoMixin<MachineBlockHashInfoAnalysis> {
111+
friend AnalysisInfoMixin<MachineBlockHashInfoAnalysis>;
112+
static AnalysisKey Key;
113+
114+
public:
115+
using Result = MachineBlockHashInfoResult;
116+
Result run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM);
117+
};
118+
119+
/// Printer pass for the \c MachineBlockHashInfoAnalysis results.
120+
class MachineBlockHashInfoPrinterPass
121+
: public PassInfoMixin<MachineBlockHashInfoPrinterPass> {
122+
raw_ostream &OS;
123+
124+
public:
125+
explicit MachineBlockHashInfoPrinterPass(raw_ostream &OS) : OS(OS) {}
126+
PreservedAnalyses run(MachineFunction &MF,
127+
MachineFunctionAnalysisManager &MFAM);
128+
static bool isRequired() { return true; }
129+
};
130+
131+
/// Legacy MachineFunctionPass for MachineBlockHashInfo.
109132
class MachineBlockHashInfo : public MachineFunctionPass {
110133
MachineBlockHashInfoResult Result;
111134

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ MACHINE_FUNCTION_ANALYSIS("live-reg-matrix", LiveRegMatrixAnalysis())
7272
MACHINE_FUNCTION_ANALYSIS("live-stacks", LiveStacksAnalysis())
7373
MACHINE_FUNCTION_ANALYSIS("live-vars", LiveVariablesAnalysis())
7474
MACHINE_FUNCTION_ANALYSIS("machine-block-freq", MachineBlockFrequencyAnalysis())
75+
MACHINE_FUNCTION_ANALYSIS("machine-block-hash", MachineBlockHashInfoAnalysis())
7576
MACHINE_FUNCTION_ANALYSIS("machine-branch-prob",
7677
MachineBranchProbabilityAnalysis())
7778
MACHINE_FUNCTION_ANALYSIS("machine-cycles", MachineCycleAnalysis())
@@ -143,6 +144,8 @@ MACHINE_FUNCTION_PASS("print<live-stacks>", LiveStacksPrinterPass(errs()))
143144
MACHINE_FUNCTION_PASS("print<live-vars>", LiveVariablesPrinterPass(errs()))
144145
MACHINE_FUNCTION_PASS("print<machine-block-freq>",
145146
MachineBlockFrequencyPrinterPass(errs()))
147+
MACHINE_FUNCTION_PASS("print<machine-block-hash>",
148+
MachineBlockHashInfoPrinterPass(errs()))
146149
MACHINE_FUNCTION_PASS("print<machine-branch-prob>",
147150
MachineBranchProbabilityPrinterPass(errs()))
148151
MACHINE_FUNCTION_PASS("print<machine-cycles>", MachineCycleInfoPrinterPass(errs()))

llvm/lib/CodeGen/MachineBlockHashInfo.cpp

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@
1212

1313
#include "llvm/CodeGen/MachineBlockHashInfo.h"
1414
#include "llvm/ADT/Hashing.h"
15+
#include "llvm/CodeGen/MachineFunction.h"
1516
#include "llvm/CodeGen/MachineStableHash.h"
1617
#include "llvm/CodeGen/Passes.h"
1718
#include "llvm/InitializePasses.h"
19+
#include "llvm/Support/raw_ostream.h"
1820
#include "llvm/Target/TargetMachine.h"
1921

2022
using namespace llvm;
@@ -111,7 +113,7 @@ MachineBlockHashInfoResult::MachineBlockHashInfoResult(
111113
uint64_t
112114
MachineBlockHashInfoResult::getMBBHash(const MachineBasicBlock &MBB) const {
113115
auto it = MBBHashInfo.find(&MBB);
114-
return it == MBBHashInfo.end() ? 0 : it->second;
116+
return it->second;
115117
}
116118

117119
bool MachineBlockHashInfo::runOnMachineFunction(MachineFunction &F) {
@@ -126,3 +128,23 @@ uint64_t MachineBlockHashInfo::getMBBHash(const MachineBasicBlock &MBB) const {
126128
MachineFunctionPass *llvm::createMachineBlockHashInfoPass() {
127129
return new MachineBlockHashInfo();
128130
}
131+
132+
AnalysisKey MachineBlockHashInfoAnalysis::Key;
133+
134+
MachineBlockHashInfoResult
135+
MachineBlockHashInfoAnalysis::run(MachineFunction &MF,
136+
MachineFunctionAnalysisManager &MFAM) {
137+
return MachineBlockHashInfoResult{MF};
138+
}
139+
140+
PreservedAnalyses
141+
MachineBlockHashInfoPrinterPass::run(MachineFunction &MF,
142+
MachineFunctionAnalysisManager &MFAM) {
143+
auto &MBHI = MFAM.getResult<MachineBlockHashInfoAnalysis>(MF);
144+
OS << "Machine Block Hash Info for function: " << MF.getName() << "\n";
145+
for (const auto &MBB : MF) {
146+
OS << " BB#" << MBB.getNumber() << ": "
147+
<< format_hex(MBHI.getMBBHash(MBB), 16) << "\n";
148+
}
149+
return PreservedAnalyses::all();
150+
}

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@
119119
#include "llvm/CodeGen/LowerEmuTLS.h"
120120
#include "llvm/CodeGen/MIRPrinter.h"
121121
#include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
122+
#include "llvm/CodeGen/MachineBlockHashInfo.h"
122123
#include "llvm/CodeGen/MachineBlockPlacement.h"
123124
#include "llvm/CodeGen/MachineBranchProbabilityInfo.h"
124125
#include "llvm/CodeGen/MachineCSE.h"
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
2+
# RUN: llc -mtriple=x86_64-pc-linux -passes="print<machine-block-hash>" -filetype=null %s 2>&1 | FileCheck %s --check-prefix=HASH
3+
4+
name: foo
5+
body: |
6+
; HASH-LABEL: Machine Block Hash Info for function: foo
7+
; HASH-NEXT: BB#0: 0xa6e9dab7a6e90002
8+
; HASH-NEXT: BB#1: 0xa6e912e7a6e90002
9+
bb.0:
10+
$eax = MOV32ri 1
11+
RET 0
12+
13+
bb.1:
14+
$eax = MOV32ri 2
15+
RET 0
16+
...
17+
---
18+
name: func_mbb
19+
body: |
20+
; HASH-LABEL: Machine Block Hash Info for function: func_mbb
21+
; HASH-NEXT: BB#0: 0x60fdab7a6e90002
22+
; HASH-NEXT: BB#1: 0x60f12e7a6e90002
23+
bb.0:
24+
successors: %bb.1
25+
$eax = MOV32ri 1
26+
JMP_1 %bb.1
27+
28+
bb.1:
29+
$eax = MOV32ri 2
30+
RET 0
31+
...
32+
---
33+
name: func_global
34+
body: |
35+
; HASH-LABEL: Machine Block Hash Info for function: func_global
36+
; HASH-NEXT: BB#0: 0xcc1bf164cc1b0002
37+
bb.0:
38+
$rax = MOV64rm $rip, 1, $noreg, @foo, $noreg
39+
RET 0
40+
...
41+
---
42+
name: func_fp
43+
body: |
44+
; HASH-LABEL: Machine Block Hash Info for function: func_fp
45+
; HASH-NEXT: BB#0: 0x9d668f2d9d660002
46+
bb.0:
47+
$xmm0 = MOVSSrm $rip, 1, $noreg, %const.0, $noreg
48+
RET 0
49+
constants:
50+
- id: 0
51+
value: 'float 1.000000e+00'
52+
alignment: 4
53+
...

0 commit comments

Comments
 (0)