Skip to content

Commit 2f6b06b

Browse files
authored
[CodeGen][NPM] Port PostRAHazardRecognizer to NPM (llvm#130066)
1 parent 949bf51 commit 2f6b06b

10 files changed

+69
-18
lines changed

Diff for: llvm/include/llvm/CodeGen/PostRAHazardRecognizer.h

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

Diff for: llvm/include/llvm/InitializePasses.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ void initializePostDomViewerWrapperPassPass(PassRegistry &);
239239
void initializePostDominatorTreeWrapperPassPass(PassRegistry &);
240240
void initializePostInlineEntryExitInstrumenterPass(PassRegistry &);
241241
void initializePostMachineSchedulerLegacyPass(PassRegistry &);
242-
void initializePostRAHazardRecognizerPass(PassRegistry &);
242+
void initializePostRAHazardRecognizerLegacyPass(PassRegistry &);
243243
void initializePostRAMachineSinkingPass(PassRegistry &);
244244
void initializePostRASchedulerLegacyPass(PassRegistry &);
245245
void initializePreISelIntrinsicLoweringLegacyPassPass(PassRegistry &);

Diff for: llvm/include/llvm/Passes/MachinePassRegistry.def

+1
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ MACHINE_FUNCTION_PASS("opt-phis", OptimizePHIsPass())
156156
MACHINE_FUNCTION_PASS("patchable-function", PatchableFunctionPass())
157157
MACHINE_FUNCTION_PASS("peephole-opt", PeepholeOptimizerPass())
158158
MACHINE_FUNCTION_PASS("phi-node-elimination", PHIEliminationPass())
159+
MACHINE_FUNCTION_PASS("post-RA-hazard-rec", PostRAHazardRecognizerPass())
159160
MACHINE_FUNCTION_PASS("post-RA-sched", PostRASchedulerPass(TM))
160161
MACHINE_FUNCTION_PASS("postmisched", PostMachineSchedulerPass(TM))
161162
MACHINE_FUNCTION_PASS("post-ra-pseudos", ExpandPostRAPseudosPass())

Diff for: llvm/lib/CodeGen/CodeGen.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
106106
initializePatchableFunctionLegacyPass(Registry);
107107
initializePeepholeOptimizerLegacyPass(Registry);
108108
initializePostMachineSchedulerLegacyPass(Registry);
109-
initializePostRAHazardRecognizerPass(Registry);
109+
initializePostRAHazardRecognizerLegacyPass(Registry);
110110
initializePostRAMachineSinkingPass(Registry);
111111
initializePostRASchedulerLegacyPass(Registry);
112112
initializePreISelIntrinsicLoweringLegacyPassPass(Registry);

Diff for: llvm/lib/CodeGen/PostRAHazardRecognizer.cpp

+32-15
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
//
2727
//===----------------------------------------------------------------------===//
2828

29+
#include "llvm/CodeGen/PostRAHazardRecognizer.h"
2930
#include "llvm/ADT/Statistic.h"
3031
#include "llvm/CodeGen/MachineFunctionPass.h"
3132
#include "llvm/CodeGen/ScheduleHazardRecognizer.h"
@@ -40,30 +41,46 @@ using namespace llvm;
4041
STATISTIC(NumNoops, "Number of noops inserted");
4142

4243
namespace {
43-
class PostRAHazardRecognizer : public MachineFunctionPass {
44+
struct PostRAHazardRecognizer {
45+
bool run(MachineFunction &MF);
46+
};
4447

45-
public:
46-
static char ID;
47-
PostRAHazardRecognizer() : MachineFunctionPass(ID) {}
48+
class PostRAHazardRecognizerLegacy : public MachineFunctionPass {
4849

49-
void getAnalysisUsage(AnalysisUsage &AU) const override {
50-
AU.setPreservesCFG();
51-
MachineFunctionPass::getAnalysisUsage(AU);
52-
}
50+
public:
51+
static char ID;
52+
PostRAHazardRecognizerLegacy() : MachineFunctionPass(ID) {}
5353

54-
bool runOnMachineFunction(MachineFunction &Fn) override;
54+
void getAnalysisUsage(AnalysisUsage &AU) const override {
55+
AU.setPreservesCFG();
56+
MachineFunctionPass::getAnalysisUsage(AU);
57+
}
5558

56-
};
57-
char PostRAHazardRecognizer::ID = 0;
59+
bool runOnMachineFunction(MachineFunction &Fn) override {
60+
return PostRAHazardRecognizer().run(Fn);
61+
}
62+
};
63+
char PostRAHazardRecognizerLegacy::ID = 0;
5864

59-
}
65+
} // namespace
6066

61-
char &llvm::PostRAHazardRecognizerID = PostRAHazardRecognizer::ID;
67+
char &llvm::PostRAHazardRecognizerID = PostRAHazardRecognizerLegacy::ID;
6268

63-
INITIALIZE_PASS(PostRAHazardRecognizer, DEBUG_TYPE,
69+
INITIALIZE_PASS(PostRAHazardRecognizerLegacy, DEBUG_TYPE,
6470
"Post RA hazard recognizer", false, false)
6571

66-
bool PostRAHazardRecognizer::runOnMachineFunction(MachineFunction &Fn) {
72+
PreservedAnalyses
73+
llvm::PostRAHazardRecognizerPass::run(MachineFunction &MF,
74+
MachineFunctionAnalysisManager &MFAM) {
75+
if (!PostRAHazardRecognizer().run(MF))
76+
return PreservedAnalyses::all();
77+
78+
auto PA = getMachineFunctionPassPreservedAnalyses();
79+
PA.preserveSet<CFGAnalyses>();
80+
return PA;
81+
}
82+
83+
bool PostRAHazardRecognizer::run(MachineFunction &Fn) {
6784
const TargetInstrInfo *TII = Fn.getSubtarget().getInstrInfo();
6885
std::unique_ptr<ScheduleHazardRecognizer> HazardRec(
6986
TII->CreateTargetPostRAHazardRecognizer(Fn));

Diff for: llvm/lib/Passes/PassBuilder.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@
137137
#include "llvm/CodeGen/PHIElimination.h"
138138
#include "llvm/CodeGen/PatchableFunction.h"
139139
#include "llvm/CodeGen/PeepholeOptimizer.h"
140+
#include "llvm/CodeGen/PostRAHazardRecognizer.h"
140141
#include "llvm/CodeGen/PostRASchedulerList.h"
141142
#include "llvm/CodeGen/PreISelIntrinsicLowering.h"
142143
#include "llvm/CodeGen/RegAllocEvictionAdvisor.h"

Diff for: llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
#include "llvm/CodeGen/MachineLICM.h"
7979
#include "llvm/CodeGen/MachineScheduler.h"
8080
#include "llvm/CodeGen/Passes.h"
81+
#include "llvm/CodeGen/PostRAHazardRecognizer.h"
8182
#include "llvm/CodeGen/RegAllocRegistry.h"
8283
#include "llvm/CodeGen/TargetPassConfig.h"
8384
#include "llvm/IR/IntrinsicsAMDGPU.h"
@@ -2184,7 +2185,7 @@ void AMDGPUCodeGenPassBuilder::addPreEmitPass(AddMachinePass &addPass) const {
21842185
//
21852186
// Here we add a stand-alone hazard recognizer pass which can handle all
21862187
// cases.
2187-
// TODO: addPass(PostRAHazardRecognizerPass());
2188+
addPass(PostRAHazardRecognizerPass());
21882189
addPass(AMDGPUWaitSGPRHazardsPass());
21892190

21902191
if (isPassEnabled(EnableInsertDelayAlu, CodeGenOptLevel::Less)) {

Diff for: llvm/test/CodeGen/AMDGPU/break-smem-soft-clauses.mir

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# RUN: llc -mtriple=amdgcn -mcpu=carrizo -verify-machineinstrs -run-pass post-RA-hazard-rec %s -o - | FileCheck -check-prefixes=GCN,XNACK %s
22
# RUN: llc -mtriple=amdgcn -mcpu=fiji -mattr=-xnack -verify-machineinstrs -run-pass post-RA-hazard-rec %s -o - | FileCheck -check-prefixes=GCN %s
33

4+
# RUN: llc -mtriple=amdgcn -mcpu=fiji -mattr=-xnack -passes post-RA-hazard-rec %s -o - | FileCheck -check-prefixes=GCN %s
5+
46
---
57
# Trivial clause at beginning of program
68
name: trivial_smem_clause_load_smrd4_x1

Diff for: llvm/test/CodeGen/AMDGPU/dst-sel-hazard.mir

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
# RUN: llc -mtriple=amdgcn -mcpu=gfx9-4-generic -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefix=HAZARD %s
44
# RUN: llc -mtriple=amdgcn -mcpu=gfx90a -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefix=NOHAZARD %s
55

6+
# RUN: llc -mtriple=amdgcn -mcpu=gfx90a -passes post-RA-hazard-rec -o - %s | FileCheck -check-prefix=NOHAZARD %s
7+
68
---
79
name: sdwa_opsel_hazard
810
body: |

Diff for: llvm/test/CodeGen/AMDGPU/hazard-flat-instruction-valu-check.mir

+1
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 UTC_ARGS: --version 5
22
# RUN: llc -mtriple=amdgcn -mcpu=gfx942 -verify-machineinstrs -run-pass=post-RA-hazard-rec %s -o - | FileCheck -check-prefix=GCN %s
3+
# RUN: llc -mtriple=amdgcn -mcpu=gfx942 -passes=post-RA-hazard-rec %s -o - | FileCheck -check-prefix=GCN %s
34

45
---
56
name: test_flat_valu_hazard

0 commit comments

Comments
 (0)