Skip to content

Commit 740a240

Browse files
committed
[CodeGen][NPM] Port BranchRelaxation to NPM
This completes the PreEmitPasses
1 parent 0a495b8 commit 740a240

10 files changed

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

llvm/include/llvm/InitializePasses.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ void initializeBasicAAWrapperPassPass(PassRegistry &);
6161
void initializeBlockFrequencyInfoWrapperPassPass(PassRegistry &);
6262
void initializeBranchFolderPassPass(PassRegistry &);
6363
void initializeBranchProbabilityInfoWrapperPassPass(PassRegistry &);
64-
void initializeBranchRelaxationPass(PassRegistry &);
64+
void initializeBranchRelaxationLegacyPass(PassRegistry &);
6565
void initializeBreakCriticalEdgesPass(PassRegistry &);
6666
void initializeBreakFalseDepsPass(PassRegistry &);
6767
void initializeCanonicalizeFreezeInLoopsPass(PassRegistry &);

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ MACHINE_FUNCTION_ANALYSIS("virtregmap", VirtRegMapAnalysis())
138138
#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
139139
#endif
140140
MACHINE_FUNCTION_PASS("block-placement-stats", MachineBlockPlacementStatsPass())
141+
MACHINE_FUNCTION_PASS("branch-relaxation", BranchRelaxationPass())
141142
MACHINE_FUNCTION_PASS("dead-mi-elimination", DeadMachineInstructionElimPass())
142143
MACHINE_FUNCTION_PASS("early-ifcvt", EarlyIfConverterPass())
143144
MACHINE_FUNCTION_PASS("early-machinelicm", EarlyMachineLICMPass())

llvm/lib/CodeGen/BranchRelaxation.cpp

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9+
#include "llvm/CodeGen/BranchRelaxation.h"
910
#include "llvm/ADT/SmallVector.h"
1011
#include "llvm/ADT/Statistic.h"
1112
#include "llvm/CodeGen/LivePhysRegs.h"
@@ -44,7 +45,7 @@ STATISTIC(NumUnconditionalRelaxed, "Number of unconditional branches relaxed");
4445

4546
namespace {
4647

47-
class BranchRelaxation : public MachineFunctionPass {
48+
class BranchRelaxation {
4849
/// BasicBlockInfo - Information about the offset and size of a single
4950
/// basic block.
5051
struct BasicBlockInfo {
@@ -115,23 +116,31 @@ class BranchRelaxation : public MachineFunctionPass {
115116
void dumpBBs();
116117
void verify();
117118

119+
public:
120+
bool run(MachineFunction &MF);
121+
};
122+
123+
class BranchRelaxationLegacy : public MachineFunctionPass {
118124
public:
119125
static char ID;
120126

121-
BranchRelaxation() : MachineFunctionPass(ID) {}
127+
BranchRelaxationLegacy() : MachineFunctionPass(ID) {}
122128

123-
bool runOnMachineFunction(MachineFunction &MF) override;
129+
bool runOnMachineFunction(MachineFunction &MF) override {
130+
return BranchRelaxation().run(MF);
131+
}
124132

125133
StringRef getPassName() const override { return BRANCH_RELAX_NAME; }
126134
};
127135

128136
} // end anonymous namespace
129137

130-
char BranchRelaxation::ID = 0;
138+
char BranchRelaxationLegacy::ID = 0;
131139

132-
char &llvm::BranchRelaxationPassID = BranchRelaxation::ID;
140+
char &llvm::BranchRelaxationPassID = BranchRelaxationLegacy::ID;
133141

134-
INITIALIZE_PASS(BranchRelaxation, DEBUG_TYPE, BRANCH_RELAX_NAME, false, false)
142+
INITIALIZE_PASS(BranchRelaxationLegacy, DEBUG_TYPE, BRANCH_RELAX_NAME, false,
143+
false)
135144

136145
/// verify - check BBOffsets, BBSizes, alignment of islands
137146
void BranchRelaxation::verify() {
@@ -744,7 +753,15 @@ bool BranchRelaxation::relaxBranchInstructions() {
744753
return Changed;
745754
}
746755

747-
bool BranchRelaxation::runOnMachineFunction(MachineFunction &mf) {
756+
PreservedAnalyses
757+
BranchRelaxationPass::run(MachineFunction &MF,
758+
MachineFunctionAnalysisManager &MFAM) {
759+
if (!BranchRelaxation().run(MF))
760+
return PreservedAnalyses::all();
761+
return getMachineFunctionPassPreservedAnalyses();
762+
}
763+
764+
bool BranchRelaxation::run(MachineFunction &mf) {
748765
MF = &mf;
749766

750767
LLVM_DEBUG(dbgs() << "***** BranchRelaxation *****\n");

llvm/lib/CodeGen/CodeGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
2323
initializeBasicBlockPathCloningPass(Registry);
2424
initializeBasicBlockSectionsPass(Registry);
2525
initializeBranchFolderPassPass(Registry);
26-
initializeBranchRelaxationPass(Registry);
26+
initializeBranchRelaxationLegacyPass(Registry);
2727
initializeBreakFalseDepsPass(Registry);
2828
initializeCallBrPreparePass(Registry);
2929
initializeCFGuardLongjmpPass(Registry);

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
#include "llvm/CodeGen/AssignmentTrackingAnalysis.h"
8181
#include "llvm/CodeGen/AtomicExpand.h"
8282
#include "llvm/CodeGen/BasicBlockSectionsProfileReader.h"
83+
#include "llvm/CodeGen/BranchRelaxation.h"
8384
#include "llvm/CodeGen/CallBrPrepare.h"
8485
#include "llvm/CodeGen/CodeGenPrepare.h"
8586
#include "llvm/CodeGen/ComplexDeinterleavingPass.h"

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
#include "llvm/Analysis/KernelInfo.h"
6666
#include "llvm/Analysis/UniformityAnalysis.h"
6767
#include "llvm/CodeGen/AtomicExpand.h"
68+
#include "llvm/CodeGen/BranchRelaxation.h"
6869
#include "llvm/CodeGen/DeadMachineInstructionElim.h"
6970
#include "llvm/CodeGen/GlobalISel/CSEInfo.h"
7071
#include "llvm/CodeGen/GlobalISel/IRTranslator.h"
@@ -2186,7 +2187,7 @@ void AMDGPUCodeGenPassBuilder::addPreEmitPass(AddMachinePass &addPass) const {
21862187
addPass(AMDGPUInsertDelayAluPass());
21872188
}
21882189

2189-
// TODO: addPass(BranchRelaxationPass());
2190+
addPass(BranchRelaxationPass());
21902191
}
21912192

21922193
bool AMDGPUCodeGenPassBuilder::isPassEnabled(const cl::opt<bool> &Opt,

llvm/test/CodeGen/AArch64/branch-relax-block-size.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# REQUIRES: asserts
22
# RUN: llc -mtriple=aarch64--linux-gnu -run-pass=branch-relaxation -debug-only=branch-relaxation %s -o /dev/null 2>&1 | FileCheck %s
3+
# RUN: llc -mtriple=aarch64--linux-gnu -passes=branch-relaxation -debug-only=branch-relaxation %s -o /dev/null 2>&1 | FileCheck %s
34

45
# Ensure meta instructions (e.g. CFI_INSTRUCTION) don't contribute to the code
56
# size of a basic block.

llvm/test/CodeGen/AArch64/branch-relax-cross-section.mir

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass branch-relaxation -aarch64-b-offset-bits=64 -aarch64-tbz-offset-bits=9 -aarch64-cbz-offset-bits=9 %s -o - | FileCheck %s
22
# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass branch-relaxation -aarch64-tbz-offset-bits=9 -aarch64-cbz-offset-bits=9 %s -o - | FileCheck --check-prefix=INDIRECT %s
33

4+
# RUN: llc -mtriple=aarch64-none-linux-gnu -passes branch-relaxation -aarch64-tbz-offset-bits=9 -aarch64-cbz-offset-bits=9 %s -o - | FileCheck --check-prefix=INDIRECT %s
5+
46
--- |
57
declare i32 @bar()
68
declare i32 @baz()

llvm/test/CodeGen/AMDGPU/branch-relax-no-terminators.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
22
# RUN: llc -verify-machineinstrs -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a --amdgpu-s-branch-bits=5 -run-pass branch-relaxation %s -o - | FileCheck %s
3+
# RUN: llc -verify-machineinstrs -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a --amdgpu-s-branch-bits=5 -passes=branch-relaxation %s -o - | FileCheck %s
34

45
---
56
name: branch_no_terminators

0 commit comments

Comments
 (0)