[llvm-branch-commits] [CodeGen] Add Printer pass for MachineBlockHashInfo and tests (PR #192911)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Apr 20 01:15:40 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-x86
Author: Vitaly Buka (vitalybuka)
<details>
<summary>Changes</summary>
Mostly AI generated.
---
Full diff: https://github.com/llvm/llvm-project/pull/192911.diff
5 Files Affected:
- (modified) llvm/include/llvm/CodeGen/Passes.h (+4)
- (modified) llvm/include/llvm/InitializePasses.h (+1)
- (modified) llvm/lib/CodeGen/CodeGen.cpp (+1)
- (modified) llvm/lib/CodeGen/MachineBlockHashInfo.cpp (+46)
- (added) llvm/test/CodeGen/X86/machine-block-hash.mir (+68)
``````````diff
diff --git a/llvm/include/llvm/CodeGen/Passes.h b/llvm/include/llvm/CodeGen/Passes.h
index d9cfe065ffbec..f492401d1e9f9 100644
--- a/llvm/include/llvm/CodeGen/Passes.h
+++ b/llvm/include/llvm/CodeGen/Passes.h
@@ -80,6 +80,10 @@ LLVM_ABI MachineFunctionPass *createInsertCodePrefetchPass();
/// createMachineBlockHashInfoPass - This pass computes basic block hashes.
LLVM_ABI MachineFunctionPass *createMachineBlockHashInfoPass();
+/// createMachineBlockHashInfoPrinterPass - This pass prints basic block hashes.
+LLVM_ABI MachineFunctionPass *
+createMachineBlockHashInfoPrinterPass(raw_ostream &OS);
+
/// createMachineFunctionSplitterPass - This pass splits machine functions
/// using profile information.
LLVM_ABI MachineFunctionPass *createMachineFunctionSplitterPass();
diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
index 012f1fb0ebd90..d6aa67bbc5295 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -65,6 +65,7 @@ LLVM_ABI void initializeBarrierNoopPass(PassRegistry &);
LLVM_ABI void initializeBasicAAWrapperPassPass(PassRegistry &);
LLVM_ABI void initializeBlockFrequencyInfoWrapperPassPass(PassRegistry &);
LLVM_ABI void initializeMachineBlockHashInfoPass(PassRegistry &);
+LLVM_ABI void initializeMachineBlockHashInfoPrinterPass(PassRegistry &);
LLVM_ABI void initializeBranchFolderLegacyPass(PassRegistry &);
LLVM_ABI void initializeBranchProbabilityInfoWrapperPassPass(PassRegistry &);
LLVM_ABI void initializeBranchRelaxationLegacyPass(PassRegistry &);
diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp
index bb8bbc4f44eed..2a5bd5f427af3 100644
--- a/llvm/lib/CodeGen/CodeGen.cpp
+++ b/llvm/lib/CodeGen/CodeGen.cpp
@@ -83,6 +83,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
initializeMIRProfileLoaderPassPass(Registry);
initializeMachineBlockFrequencyInfoWrapperPassPass(Registry);
initializeMachineBlockHashInfoPass(Registry);
+ initializeMachineBlockHashInfoPrinterPass(Registry);
initializeMachineBlockPlacementLegacyPass(Registry);
initializeMachineBlockPlacementStatsLegacyPass(Registry);
initializeMachineBranchProbabilityInfoWrapperPassPass(Registry);
diff --git a/llvm/lib/CodeGen/MachineBlockHashInfo.cpp b/llvm/lib/CodeGen/MachineBlockHashInfo.cpp
index eeddaf6d48de4..5b0569cbdba26 100644
--- a/llvm/lib/CodeGen/MachineBlockHashInfo.cpp
+++ b/llvm/lib/CodeGen/MachineBlockHashInfo.cpp
@@ -12,9 +12,11 @@
#include "llvm/CodeGen/MachineBlockHashInfo.h"
#include "llvm/ADT/Hashing.h"
+#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineStableHash.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/InitializePasses.h"
+#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetMachine.h"
using namespace llvm;
@@ -44,9 +46,48 @@ static uint16_t fold_64_to_16(const uint64_t Value) {
return Res;
}
+namespace {
+class MachineBlockHashInfoPrinter : public MachineFunctionPass {
+ raw_ostream &OS;
+
+public:
+ static char ID;
+ MachineBlockHashInfoPrinter() : MachineFunctionPass(ID), OS(errs()) {}
+ MachineBlockHashInfoPrinter(raw_ostream &OS)
+ : MachineFunctionPass(ID), OS(OS) {}
+
+ StringRef getPassName() const override {
+ return "Machine Block Hash Info Printer";
+ }
+
+ void getAnalysisUsage(AnalysisUsage &AU) const override {
+ AU.setPreservesAll();
+ AU.addRequired<MachineBlockHashInfo>();
+ MachineFunctionPass::getAnalysisUsage(AU);
+ }
+
+ bool runOnMachineFunction(MachineFunction &MF) override {
+ MachineBlockHashInfo &MBHI = getAnalysis<MachineBlockHashInfo>();
+ OS << "Machine Block Hash Info for function: " << MF.getName() << "\n";
+ for (const auto &MBB : MF) {
+ OS << " BB#" << MBB.getNumber() << ": "
+ << format_hex(MBHI.getMBBHash(MBB), 16) << "\n";
+ }
+ return false;
+ }
+};
+char MachineBlockHashInfoPrinter::ID = 0;
+} // end anonymous namespace
+
INITIALIZE_PASS(MachineBlockHashInfo, "machine-block-hash",
"Machine Block Hash Analysis", true, true)
+INITIALIZE_PASS_BEGIN(MachineBlockHashInfoPrinter, "print-machine-block-hash",
+ "Machine Block Hash Info Printer", true, true)
+INITIALIZE_PASS_DEPENDENCY(MachineBlockHashInfo)
+INITIALIZE_PASS_END(MachineBlockHashInfoPrinter, "print-machine-block-hash",
+ "Machine Block Hash Info Printer", true, true)
+
char MachineBlockHashInfo::ID = 0;
MachineBlockHashInfo::MachineBlockHashInfo() : MachineFunctionPass(ID) {}
@@ -114,3 +155,8 @@ uint64_t MachineBlockHashInfo::getMBBHash(const MachineBasicBlock &MBB) {
MachineFunctionPass *llvm::createMachineBlockHashInfoPass() {
return new MachineBlockHashInfo();
}
+
+MachineFunctionPass *
+llvm::createMachineBlockHashInfoPrinterPass(raw_ostream &OS) {
+ return new MachineBlockHashInfoPrinter(OS);
+}
\ No newline at end of file
diff --git a/llvm/test/CodeGen/X86/machine-block-hash.mir b/llvm/test/CodeGen/X86/machine-block-hash.mir
new file mode 100644
index 0000000000000..36a6909ea179d
--- /dev/null
+++ b/llvm/test/CodeGen/X86/machine-block-hash.mir
@@ -0,0 +1,68 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
+# RUN: llc -mtriple=x86_64-pc-linux -run-pass=print-machine-block-hash -o /dev/null %s 2>&1 | FileCheck %s --check-prefix=HASH
+
+--- |
+ define void @foo() {
+ ret void
+ }
+ define void @func_mbb() {
+ ret void
+ }
+ define void @func_global() {
+ ret void
+ }
+ define void @func_fp() {
+ ret void
+ }
+...
+---
+name: foo
+body: |
+ ; HASH-LABEL: Machine Block Hash Info for function: foo
+ ; HASH-NEXT: BB#0: 0xa6e9dab7a6e90002
+ ; HASH-NEXT: BB#1: 0xa6e912e7a6e90002
+ bb.0:
+ $eax = MOV32ri 1
+ RET 0
+
+ bb.1:
+ $eax = MOV32ri 2
+ RET 0
+...
+---
+name: func_mbb
+body: |
+ ; HASH-LABEL: Machine Block Hash Info for function: func_mbb
+ ; HASH-NEXT: BB#0: 0x60fdab7a6e90002
+ ; HASH-NEXT: BB#1: 0x60f12e7a6e90002
+ bb.0:
+ successors: %bb.1
+ $eax = MOV32ri 1
+ JMP_1 %bb.1
+
+ bb.1:
+ $eax = MOV32ri 2
+ RET 0
+...
+---
+name: func_global
+body: |
+ ; HASH-LABEL: Machine Block Hash Info for function: func_global
+ ; HASH-NEXT: BB#0: 0xcc1bf164cc1b0002
+ bb.0:
+ $rax = MOV64rm $rip, 1, $noreg, @foo, $noreg
+ RET 0
+...
+---
+name: func_fp
+body: |
+ ; HASH-LABEL: Machine Block Hash Info for function: func_fp
+ ; HASH-NEXT: BB#0: 0x9d668f2d9d660002
+ bb.0:
+ $xmm0 = MOVSSrm $rip, 1, $noreg, %const.0, $noreg
+ RET 0
+constants:
+ - id: 0
+ value: 'float 1.000000e+00'
+ alignment: 4
+...
``````````
</details>
https://github.com/llvm/llvm-project/pull/192911
More information about the llvm-branch-commits
mailing list