Skip to content

Commit 3060681

Browse files
committed
[CodeGen][NPM] Port PostRAHazardRecognizer to NPM
1 parent 586bcbc commit 3060681

10 files changed

+68
-18
lines changed
Lines changed: 26 additions & 0 deletions
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

llvm/include/llvm/InitializePasses.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ void initializePostDomViewerWrapperPassPass(PassRegistry &);
237237
void initializePostDominatorTreeWrapperPassPass(PassRegistry &);
238238
void initializePostInlineEntryExitInstrumenterPass(PassRegistry &);
239239
void initializePostMachineSchedulerLegacyPass(PassRegistry &);
240-
void initializePostRAHazardRecognizerPass(PassRegistry &);
240+
void initializePostRAHazardRecognizerLegacyPass(PassRegistry &);
241241
void initializePostRAMachineSinkingPass(PassRegistry &);
242242
void initializePostRASchedulerLegacyPass(PassRegistry &);
243243
void initializePreISelIntrinsicLoweringLegacyPassPass(PassRegistry &);

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ MACHINE_FUNCTION_PASS("opt-phis", OptimizePHIsPass())
155155
MACHINE_FUNCTION_PASS("patchable-function", PatchableFunctionPass())
156156
MACHINE_FUNCTION_PASS("peephole-opt", PeepholeOptimizerPass())
157157
MACHINE_FUNCTION_PASS("phi-node-elimination", PHIEliminationPass())
158+
MACHINE_FUNCTION_PASS("post-RA-hazard-rec", PostRAHazardRecognizerPass())
158159
MACHINE_FUNCTION_PASS("post-RA-sched", PostRASchedulerPass(TM))
159160
MACHINE_FUNCTION_PASS("postmisched", PostMachineSchedulerPass(TM))
160161
MACHINE_FUNCTION_PASS("post-ra-pseudos", ExpandPostRAPseudosPass())

llvm/lib/CodeGen/CodeGen.cpp

Lines changed: 1 addition & 1 deletion
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);

llvm/lib/CodeGen/PostRAHazardRecognizer.cpp

Lines changed: 31 additions & 15 deletions
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,45 @@ 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+
auto PA = getMachineFunctionPassPreservedAnalyses();
78+
PA.preserveSet<CFGAnalyses>();
79+
return PA;
80+
}
81+
82+
bool PostRAHazardRecognizer::run(MachineFunction &Fn) {
6783
const TargetInstrInfo *TII = Fn.getSubtarget().getInstrInfo();
6884
std::unique_ptr<ScheduleHazardRecognizer> HazardRec(
6985
TII->CreateTargetPostRAHazardRecognizer(Fn));

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@
132132
#include "llvm/CodeGen/PHIElimination.h"
133133
#include "llvm/CodeGen/PatchableFunction.h"
134134
#include "llvm/CodeGen/PeepholeOptimizer.h"
135+
#include "llvm/CodeGen/PostRAHazardRecognizer.h"
135136
#include "llvm/CodeGen/PostRASchedulerList.h"
136137
#include "llvm/CodeGen/PreISelIntrinsicLowering.h"
137138
#include "llvm/CodeGen/RegAllocEvictionAdvisor.h"

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
#include "llvm/CodeGen/MachineLICM.h"
7878
#include "llvm/CodeGen/MachineScheduler.h"
7979
#include "llvm/CodeGen/Passes.h"
80+
#include "llvm/CodeGen/PostRAHazardRecognizer.h"
8081
#include "llvm/CodeGen/RegAllocRegistry.h"
8182
#include "llvm/CodeGen/TargetPassConfig.h"
8283
#include "llvm/IR/IntrinsicsAMDGPU.h"
@@ -2177,7 +2178,7 @@ void AMDGPUCodeGenPassBuilder::addPreEmitPass(AddMachinePass &addPass) const {
21772178
//
21782179
// Here we add a stand-alone hazard recognizer pass which can handle all
21792180
// cases.
2180-
// TODO: addPass(PostRAHazardRecognizerPass());
2181+
addPass(PostRAHazardRecognizerPass());
21812182
addPass(AMDGPUWaitSGPRHazardsPass());
21822183

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

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

Lines changed: 2 additions & 0 deletions
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 -verify-machineinstrs -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

llvm/test/CodeGen/AMDGPU/dst-sel-hazard.mir

Lines changed: 2 additions & 0 deletions
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: |

llvm/test/CodeGen/AMDGPU/hazard-flat-instruction-valu-check.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 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 -verify-machineinstrs -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)