Skip to content

Commit 60c911a

Browse files
authored
[NewPM] Adds a port for AArch64PointerAuth (#188352)
Adds a standard NewPM port for AArch64PointerAuth. No test updates since all `.mir` files referencing this pass run combinations of passes, not all of which are ported.
1 parent ce6d3a4 commit 60c911a

File tree

4 files changed

+44
-17
lines changed

4 files changed

+44
-17
lines changed

llvm/lib/Target/AArch64/AArch64.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ void initializeAArch64A53Fix835769LegacyPass(PassRegistry &);
8484
void initializeAArch64A57FPLoadBalancingPass(PassRegistry&);
8585
void initializeAArch64AdvSIMDScalarLegacyPass(PassRegistry &);
8686
void initializeAArch64AsmPrinterPass(PassRegistry &);
87-
void initializeAArch64PointerAuthPass(PassRegistry&);
87+
void initializeAArch64PointerAuthLegacyPass(PassRegistry &);
8888
void initializeAArch64BranchTargetsLegacyPass(PassRegistry &);
8989
void initializeAArch64CFIFixupPass(PassRegistry&);
9090
void initializeAArch64CollectLOHLegacyPass(PassRegistry &);
@@ -189,6 +189,12 @@ class AArch64ConditionOptimizerPass
189189
MachineFunctionAnalysisManager &MFAM);
190190
};
191191

192+
class AArch64PointerAuthPass : public PassInfoMixin<AArch64PointerAuthPass> {
193+
public:
194+
PreservedAnalyses run(MachineFunction &MF,
195+
MachineFunctionAnalysisManager &MFAM);
196+
};
197+
192198
} // end namespace llvm
193199

194200
#endif

llvm/lib/Target/AArch64/AArch64PassRegistry.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,6 @@ MACHINE_FUNCTION_PASS("aarch64-fix-cortex-a53-835769", AArch64A53Fix835769Pass()
3535
MACHINE_FUNCTION_PASS("aarch64-jump-tables", AArch64CompressJumpTablesPass())
3636
MACHINE_FUNCTION_PASS("aarch64-ldst-opt", AArch64LoadStoreOptPass())
3737
MACHINE_FUNCTION_PASS("aarch64-mi-peephole-opt", AArch64MIPeepholeOptPass())
38+
MACHINE_FUNCTION_PASS("aarch64-ptrauth", AArch64PointerAuthPass())
3839
MACHINE_FUNCTION_PASS("aarch64-simd-scalar", AArch64AdvSIMDScalarPass())
3940
#undef MACHINE_FUNCTION_PASS

llvm/lib/Target/AArch64/AArch64PointerAuth.cpp

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,9 @@ using namespace llvm::AArch64PAuth;
2424

2525
namespace {
2626

27-
class AArch64PointerAuth : public MachineFunctionPass {
27+
class AArch64PointerAuthImpl {
2828
public:
29-
static char ID;
30-
31-
AArch64PointerAuth() : MachineFunctionPass(ID) {}
32-
33-
bool runOnMachineFunction(MachineFunction &MF) override;
34-
35-
StringRef getPassName() const override { return AARCH64_POINTER_AUTH_NAME; }
29+
bool run(MachineFunction &MF);
3630

3731
private:
3832
const AArch64Subtarget *Subtarget = nullptr;
@@ -44,16 +38,27 @@ class AArch64PointerAuth : public MachineFunctionPass {
4438
MachineBasicBlock::iterator MBBI) const;
4539
};
4640

41+
class AArch64PointerAuthLegacy : public MachineFunctionPass {
42+
public:
43+
static char ID;
44+
45+
AArch64PointerAuthLegacy() : MachineFunctionPass(ID) {}
46+
47+
bool runOnMachineFunction(MachineFunction &MF) override;
48+
49+
StringRef getPassName() const override { return AARCH64_POINTER_AUTH_NAME; }
50+
};
51+
4752
} // end anonymous namespace
4853

49-
INITIALIZE_PASS(AArch64PointerAuth, "aarch64-ptrauth",
54+
INITIALIZE_PASS(AArch64PointerAuthLegacy, "aarch64-ptrauth",
5055
AARCH64_POINTER_AUTH_NAME, false, false)
5156

5257
FunctionPass *llvm::createAArch64PointerAuthPass() {
53-
return new AArch64PointerAuth();
58+
return new AArch64PointerAuthLegacy();
5459
}
5560

56-
char AArch64PointerAuth::ID = 0;
61+
char AArch64PointerAuthLegacy::ID = 0;
5762

5863
static void emitPACSymOffsetIntoX16(const TargetInstrInfo &TII,
5964
MachineBasicBlock &MBB,
@@ -80,8 +85,8 @@ static void emitPACCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
8085
: CFIBuilder.buildNegateRAState();
8186
}
8287

83-
void AArch64PointerAuth::signLR(MachineFunction &MF,
84-
MachineBasicBlock::iterator MBBI) const {
88+
void AArch64PointerAuthImpl::signLR(MachineFunction &MF,
89+
MachineBasicBlock::iterator MBBI) const {
8590
auto &MFnI = *MF.getInfo<AArch64FunctionInfo>();
8691
bool UseBKey = MFnI.shouldSignWithBKey();
8792
bool EmitCFI = MFnI.needsDwarfUnwindInfo(MF);
@@ -134,7 +139,7 @@ void AArch64PointerAuth::signLR(MachineFunction &MF,
134139
}
135140
}
136141

137-
void AArch64PointerAuth::authenticateLR(
142+
void AArch64PointerAuthImpl::authenticateLR(
138143
MachineFunction &MF, MachineBasicBlock::iterator MBBI) const {
139144
const AArch64FunctionInfo *MFnI = MF.getInfo<AArch64FunctionInfo>();
140145
bool UseBKey = MFnI->shouldSignWithBKey();
@@ -223,7 +228,7 @@ unsigned llvm::AArch64PAuth::getCheckerSizeInBytes(AuthCheckMethod Method) {
223228
llvm_unreachable("Unknown AuthCheckMethod enum");
224229
}
225230

226-
bool AArch64PointerAuth::runOnMachineFunction(MachineFunction &MF) {
231+
bool AArch64PointerAuthImpl::run(MachineFunction &MF) {
227232
Subtarget = &MF.getSubtarget<AArch64Subtarget>();
228233
TII = Subtarget->getInstrInfo();
229234

@@ -261,3 +266,18 @@ bool AArch64PointerAuth::runOnMachineFunction(MachineFunction &MF) {
261266

262267
return Modified;
263268
}
269+
270+
bool AArch64PointerAuthLegacy::runOnMachineFunction(MachineFunction &MF) {
271+
return AArch64PointerAuthImpl().run(MF);
272+
}
273+
274+
PreservedAnalyses
275+
AArch64PointerAuthPass::run(MachineFunction &MF,
276+
MachineFunctionAnalysisManager &MFAM) {
277+
const bool Changed = AArch64PointerAuthImpl().run(MF);
278+
if (!Changed)
279+
return PreservedAnalyses::all();
280+
PreservedAnalyses PA = getMachineFunctionPassPreservedAnalyses();
281+
PA.preserveSet<CFGAnalyses>();
282+
return PA;
283+
}

llvm/lib/Target/AArch64/AArch64TargetMachine.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ LLVMInitializeAArch64Target() {
259259
initializeAArch64SIMDInstrOptPass(PR);
260260
initializeAArch64O0PreLegalizerCombinerPass(PR);
261261
initializeAArch64PreLegalizerCombinerPass(PR);
262-
initializeAArch64PointerAuthPass(PR);
262+
initializeAArch64PointerAuthLegacyPass(PR);
263263
initializeAArch64PostCoalescerPass(PR);
264264
initializeAArch64PostLegalizerCombinerPass(PR);
265265
initializeAArch64PostLegalizerLoweringPass(PR);

0 commit comments

Comments
 (0)