[NewPM] Port AArch64CollectLOHPass (#185789)
This commit is contained in:
parent
e45c8b6555
commit
7f34bd2cf4
@ -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
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -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())
|
||||
|
||||
@ -248,7 +248,7 @@ LLVMInitializeAArch64Target() {
|
||||
initializeAArch64AdvSIMDScalarLegacyPass(PR);
|
||||
initializeAArch64AsmPrinterPass(PR);
|
||||
initializeAArch64BranchTargetsLegacyPass(PR);
|
||||
initializeAArch64CollectLOHPass(PR);
|
||||
initializeAArch64CollectLOHLegacyPass(PR);
|
||||
initializeAArch64CompressJumpTablesPass(PR);
|
||||
initializeAArch64ConditionalComparesPass(PR);
|
||||
initializeAArch64ConditionOptimizerPass(PR);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user