[NewPM] Port AArch64CollectLOHPass (#185789)

This commit is contained in:
Anshul Nigham 2026-03-11 12:20:50 -07:00 committed by GitHub
parent e45c8b6555
commit 7f34bd2cf4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 52 additions and 35 deletions

View File

@ -87,7 +87,7 @@ void initializeAArch64AsmPrinterPass(PassRegistry &);
void initializeAArch64PointerAuthPass(PassRegistry&);
void initializeAArch64BranchTargetsLegacyPass(PassRegistry &);
void initializeAArch64CFIFixupPass(PassRegistry&);
void initializeAArch64CollectLOHPass(PassRegistry &);
void initializeAArch64CollectLOHLegacyPass(PassRegistry &);
void initializeAArch64CompressJumpTablesPass(PassRegistry&);
void initializeAArch64CondBrTuningPass(PassRegistry &);
void initializeAArch64ConditionOptimizerPass(PassRegistry&);
@ -149,6 +149,12 @@ public:
MachineFunctionAnalysisManager &MFAM);
};
class AArch64CollectLOHPass : public PassInfoMixin<AArch64CollectLOHPass> {
public:
PreservedAnalyses run(MachineFunction &MF,
MachineFunctionAnalysisManager &MFAM);
};
} // end namespace llvm
#endif

View File

@ -123,33 +123,6 @@ STATISTIC(NumADRSimpleCandidate, "Number of simplifiable ADRP + ADD");
#define AARCH64_COLLECT_LOH_NAME "AArch64 Collect Linker Optimization Hint (LOH)"
namespace {
struct AArch64CollectLOH : public MachineFunctionPass {
static char ID;
AArch64CollectLOH() : MachineFunctionPass(ID) {}
bool runOnMachineFunction(MachineFunction &MF) override;
MachineFunctionProperties getRequiredProperties() const override {
return MachineFunctionProperties().setNoVRegs();
}
StringRef getPassName() const override { return AARCH64_COLLECT_LOH_NAME; }
void getAnalysisUsage(AnalysisUsage &AU) const override {
MachineFunctionPass::getAnalysisUsage(AU);
AU.setPreservesAll();
}
};
char AArch64CollectLOH::ID = 0;
} // end anonymous namespace.
INITIALIZE_PASS(AArch64CollectLOH, "aarch64-collect-loh",
AARCH64_COLLECT_LOH_NAME, false, false)
static bool canAddBePartOfLOH(const MachineInstr &MI) {
// Check immediate to see if the immediate is an address.
switch (MI.getOperand(2).getType()) {
@ -536,10 +509,9 @@ static void handleNormalInst(const MachineInstr &MI, LOHInfo *LOHInfos) {
}
}
bool AArch64CollectLOH::runOnMachineFunction(MachineFunction &MF) {
if (skipFunction(MF.getFunction()))
return false;
namespace {
void runAArch64CollectLOH(MachineFunction &MF) {
LLVM_DEBUG(dbgs() << "********** AArch64 Collect LOH **********\n"
<< "Looking in function " << MF.getName() << '\n');
@ -590,11 +562,49 @@ bool AArch64CollectLOH::runOnMachineFunction(MachineFunction &MF) {
handleNormalInst(MI, LOHInfos);
}
}
}
// Return "no change": The pass only collects information.
return false;
struct AArch64CollectLOHLegacy : public MachineFunctionPass {
static char ID;
AArch64CollectLOHLegacy() : MachineFunctionPass(ID) {}
bool runOnMachineFunction(MachineFunction &MF) override {
if (skipFunction(MF.getFunction()))
return false;
runAArch64CollectLOH(MF);
// Return "no change": The pass only collects information.
return false;
}
MachineFunctionProperties getRequiredProperties() const override {
return MachineFunctionProperties().setNoVRegs();
}
StringRef getPassName() const override { return AARCH64_COLLECT_LOH_NAME; }
void getAnalysisUsage(AnalysisUsage &AU) const override {
MachineFunctionPass::getAnalysisUsage(AU);
AU.setPreservesAll();
}
};
char AArch64CollectLOHLegacy::ID = 0;
} // end anonymous namespace.
INITIALIZE_PASS(AArch64CollectLOHLegacy, "aarch64-collect-loh",
AARCH64_COLLECT_LOH_NAME, false, false)
PreservedAnalyses
AArch64CollectLOHPass::run(MachineFunction &MF,
MachineFunctionAnalysisManager &MFAM) {
runAArch64CollectLOH(MF);
// This pass only collects information.
return PreservedAnalyses::all();
}
FunctionPass *llvm::createAArch64CollectLOHPass() {
return new AArch64CollectLOH();
return new AArch64CollectLOHLegacy();
}

View File

@ -27,6 +27,7 @@
#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
#endif
MACHINE_FUNCTION_PASS("aarch64-branch-targets", AArch64BranchTargetsPass())
MACHINE_FUNCTION_PASS("aarch64-collect-loh", AArch64CollectLOHPass())
MACHINE_FUNCTION_PASS("aarch64-fix-cortex-a53-835769", AArch64A53Fix835769Pass())
MACHINE_FUNCTION_PASS("aarch64-ldst-opt", AArch64LoadStoreOptPass())
MACHINE_FUNCTION_PASS("aarch64-simd-scalar", AArch64AdvSIMDScalarPass())

View File

@ -248,7 +248,7 @@ LLVMInitializeAArch64Target() {
initializeAArch64AdvSIMDScalarLegacyPass(PR);
initializeAArch64AsmPrinterPass(PR);
initializeAArch64BranchTargetsLegacyPass(PR);
initializeAArch64CollectLOHPass(PR);
initializeAArch64CollectLOHLegacyPass(PR);
initializeAArch64CompressJumpTablesPass(PR);
initializeAArch64ConditionalComparesPass(PR);
initializeAArch64ConditionOptimizerPass(PR);