[llvm] [NewPM] Port for AArch64A53Fix835769 (PR #184965)
Anshul Nigham via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 5 23:59:30 PST 2026
https://github.com/nigham created https://github.com/llvm/llvm-project/pull/184965
None
>From b42afdd5f77ea6f9cbf32c0204e5baeeace3b626 Mon Sep 17 00:00:00 2001
From: Anshul Nigham <nigham at google.com>
Date: Thu, 5 Mar 2026 23:39:08 -0800
Subject: [PATCH 1/2] Extract AArch64A53Fix835769 logic to separate class for
porting to NewPM
---
.../Target/AArch64/AArch64A53Fix835769.cpp | 21 ++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/llvm/lib/Target/AArch64/AArch64A53Fix835769.cpp b/llvm/lib/Target/AArch64/AArch64A53Fix835769.cpp
index 407714adfb8b8..b4feaf649abd1 100644
--- a/llvm/lib/Target/AArch64/AArch64A53Fix835769.cpp
+++ b/llvm/lib/Target/AArch64/AArch64A53Fix835769.cpp
@@ -76,9 +76,16 @@ static bool isSecondInstructionInSequence(MachineInstr *MI) {
//===----------------------------------------------------------------------===//
namespace {
-class AArch64A53Fix835769 : public MachineFunctionPass {
+class AArch64A53Fix835769Impl {
+public:
+ bool run(MachineFunction &F);
+
+private:
const TargetInstrInfo *TII;
+ bool runOnBasicBlock(MachineBasicBlock &MBB);
+};
+class AArch64A53Fix835769 : public MachineFunctionPass {
public:
static char ID;
explicit AArch64A53Fix835769() : MachineFunctionPass(ID) {}
@@ -97,9 +104,6 @@ class AArch64A53Fix835769 : public MachineFunctionPass {
AU.setPreservesCFG();
MachineFunctionPass::getAnalysisUsage(AU);
}
-
-private:
- bool runOnBasicBlock(MachineBasicBlock &MBB);
};
char AArch64A53Fix835769::ID = 0;
@@ -110,8 +114,11 @@ INITIALIZE_PASS(AArch64A53Fix835769, "aarch64-fix-cortex-a53-835769-pass",
//===----------------------------------------------------------------------===//
-bool
-AArch64A53Fix835769::runOnMachineFunction(MachineFunction &F) {
+bool AArch64A53Fix835769::runOnMachineFunction(MachineFunction &F) {
+ return AArch64A53Fix835769Impl().run(F);
+}
+
+bool AArch64A53Fix835769Impl::run(MachineFunction &F) {
LLVM_DEBUG(dbgs() << "***** AArch64A53Fix835769 *****\n");
auto &STI = F.getSubtarget<AArch64Subtarget>();
// Fix not requested, skip pass.
@@ -188,7 +195,7 @@ static void insertNopBeforeInstruction(MachineBasicBlock &MBB, MachineInstr* MI,
}
bool
-AArch64A53Fix835769::runOnBasicBlock(MachineBasicBlock &MBB) {
+AArch64A53Fix835769Impl::runOnBasicBlock(MachineBasicBlock &MBB) {
bool Changed = false;
LLVM_DEBUG(dbgs() << "Running on MBB: " << MBB
<< " - scanning instructions...\n");
>From c0988ad81d704389fd1d503b2981a87a830faf4c Mon Sep 17 00:00:00 2001
From: Anshul Nigham <nigham at google.com>
Date: Thu, 5 Mar 2026 23:57:44 -0800
Subject: [PATCH 2/2] Add NewPM port for AArch64A53Fix835769
---
llvm/lib/Target/AArch64/AArch64.h | 10 ++++++--
.../Target/AArch64/AArch64A53Fix835769.cpp | 25 +++++++++++++------
.../Target/AArch64/AArch64PassRegistry.def | 1 +
.../Target/AArch64/AArch64TargetMachine.cpp | 4 +--
4 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/llvm/lib/Target/AArch64/AArch64.h b/llvm/lib/Target/AArch64/AArch64.h
index 597827f524c94..d8d2445d085c0 100644
--- a/llvm/lib/Target/AArch64/AArch64.h
+++ b/llvm/lib/Target/AArch64/AArch64.h
@@ -51,7 +51,7 @@ FunctionPass *createAArch64SIMDInstrOptPass();
ModulePass *createAArch64PromoteConstantPass();
FunctionPass *createAArch64ConditionOptimizerPass();
FunctionPass *createAArch64A57FPLoadBalancing();
-FunctionPass *createAArch64A53Fix835769();
+FunctionPass *createAArch64A53Fix835769LegacyPass();
FunctionPass *createFalkorHWPFFixPass();
FunctionPass *createFalkorMarkStridedAccessesPass();
FunctionPass *createAArch64PointerAuthPass();
@@ -80,7 +80,7 @@ FunctionPass *createAArch64StackTaggingPass(bool IsOptNone);
FunctionPass *createAArch64StackTaggingPreRAPass();
ModulePass *createAArch64Arm64ECCallLoweringPass();
-void initializeAArch64A53Fix835769Pass(PassRegistry&);
+void initializeAArch64A53Fix835769LegacyPass(PassRegistry &);
void initializeAArch64A57FPLoadBalancingPass(PassRegistry&);
void initializeAArch64AdvSIMDScalarPass(PassRegistry&);
void initializeAArch64AsmPrinterPass(PassRegistry &);
@@ -129,6 +129,12 @@ class AArch64LoadStoreOptPass : public PassInfoMixin<AArch64LoadStoreOptPass> {
MachineFunctionAnalysisManager &MFAM);
};
+class AArch64A53Fix835769Pass : public PassInfoMixin<AArch64A53Fix835769Pass> {
+public:
+ PreservedAnalyses run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM);
+};
+
} // end namespace llvm
#endif
diff --git a/llvm/lib/Target/AArch64/AArch64A53Fix835769.cpp b/llvm/lib/Target/AArch64/AArch64A53Fix835769.cpp
index b4feaf649abd1..0987475287ecd 100644
--- a/llvm/lib/Target/AArch64/AArch64A53Fix835769.cpp
+++ b/llvm/lib/Target/AArch64/AArch64A53Fix835769.cpp
@@ -85,10 +85,10 @@ class AArch64A53Fix835769Impl {
bool runOnBasicBlock(MachineBasicBlock &MBB);
};
-class AArch64A53Fix835769 : public MachineFunctionPass {
+class AArch64A53Fix835769Legacy : public MachineFunctionPass {
public:
static char ID;
- explicit AArch64A53Fix835769() : MachineFunctionPass(ID) {}
+ explicit AArch64A53Fix835769Legacy() : MachineFunctionPass(ID) {}
bool runOnMachineFunction(MachineFunction &F) override;
@@ -105,16 +105,27 @@ class AArch64A53Fix835769 : public MachineFunctionPass {
MachineFunctionPass::getAnalysisUsage(AU);
}
};
-char AArch64A53Fix835769::ID = 0;
+char AArch64A53Fix835769Legacy::ID = 0;
} // end anonymous namespace
-INITIALIZE_PASS(AArch64A53Fix835769, "aarch64-fix-cortex-a53-835769-pass",
+INITIALIZE_PASS(AArch64A53Fix835769Legacy, "aarch64-fix-cortex-a53-835769-pass",
"AArch64 fix for A53 erratum 835769", false, false)
//===----------------------------------------------------------------------===//
-bool AArch64A53Fix835769::runOnMachineFunction(MachineFunction &F) {
+PreservedAnalyses
+AArch64A53Fix835769Pass::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ bool Changed = AArch64A53Fix835769Impl().run(MF);
+ if (!Changed)
+ return PreservedAnalyses::all();
+ PreservedAnalyses PA = getMachineFunctionPassPreservedAnalyses();
+ PA.preserveSet<CFGAnalyses>();
+ return PA;
+}
+
+bool AArch64A53Fix835769Legacy::runOnMachineFunction(MachineFunction &F) {
return AArch64A53Fix835769Impl().run(F);
}
@@ -248,6 +259,6 @@ AArch64A53Fix835769Impl::runOnBasicBlock(MachineBasicBlock &MBB) {
// Factory function used by AArch64TargetMachine to add the pass to
// the passmanager.
-FunctionPass *llvm::createAArch64A53Fix835769() {
- return new AArch64A53Fix835769();
+FunctionPass *llvm::createAArch64A53Fix835769LegacyPass() {
+ return new AArch64A53Fix835769Legacy();
}
diff --git a/llvm/lib/Target/AArch64/AArch64PassRegistry.def b/llvm/lib/Target/AArch64/AArch64PassRegistry.def
index 2ed3808e6b315..6e90560f64f17 100644
--- a/llvm/lib/Target/AArch64/AArch64PassRegistry.def
+++ b/llvm/lib/Target/AArch64/AArch64PassRegistry.def
@@ -27,4 +27,5 @@
#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
#endif
MACHINE_FUNCTION_PASS("aarch64-ldst-opt", AArch64LoadStoreOptPass())
+MACHINE_FUNCTION_PASS("aarch64-fix-cortex-a53-835769", AArch64A53Fix835769Pass())
#undef MACHINE_FUNCTION_PASS
diff --git a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
index 6fa937be87eea..7880f4a8c6233 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
@@ -243,7 +243,7 @@ LLVMInitializeAArch64Target() {
RegisterTargetMachine<AArch64leTargetMachine> V(getTheAArch64_32Target());
auto &PR = *PassRegistry::getPassRegistry();
initializeGlobalISel(PR);
- initializeAArch64A53Fix835769Pass(PR);
+ initializeAArch64A53Fix835769LegacyPass(PR);
initializeAArch64A57FPLoadBalancingPass(PR);
initializeAArch64AdvSIMDScalarPass(PR);
initializeAArch64AsmPrinterPass(PR);
@@ -910,7 +910,7 @@ void AArch64PassConfig::addPreEmitPass() {
if (TM->getOptLevel() != CodeGenOptLevel::None)
addPass(createAArch64RedundantCondBranchPass());
- addPass(createAArch64A53Fix835769());
+ addPass(createAArch64A53Fix835769LegacyPass());
if (TM->getTargetTriple().isOSWindows()) {
// Identify valid longjmp targets for Windows Control Flow Guard.
More information about the llvm-commits
mailing list