[llvm] 3f58ff2 - AArch64: Remove the PAUTH_BLEND pseudo-instruction.
via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 15 11:08:51 PDT 2025
Author: Peter Collingbourne
Date: 2025-04-15T11:08:48-07:00
New Revision: 3f58ff20fe540fbbc2e5bfea1606f8cdc00d4157
URL: https://github.com/llvm/llvm-project/commit/3f58ff20fe540fbbc2e5bfea1606f8cdc00d4157
DIFF: https://github.com/llvm/llvm-project/commit/3f58ff20fe540fbbc2e5bfea1606f8cdc00d4157.diff
LOG: AArch64: Remove the PAUTH_BLEND pseudo-instruction.
It can be represented using a regular MOVK instruction
which also has the advantage of sometimes being selectable
without a preceding MOV.
Reviewers: ahmedbougacha, asl, atrosinenko
Reviewed By: atrosinenko
Pull Request: https://github.com/llvm/llvm-project/pull/134765
Added:
Modified:
llvm/lib/Target/AArch64/AArch64InstrInfo.td
llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
Removed:
llvm/test/CodeGen/AArch64/ptrauth-pseudo-instructions.mir
################################################################################
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.td b/llvm/lib/Target/AArch64/AArch64InstrInfo.td
index b90792d60d102..99f2b79d31bb7 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.td
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.td
@@ -1798,9 +1798,6 @@ def PAUTH_PROLOGUE : Pseudo<(outs), (ins), []>, Sched<[]> {
def PAUTH_EPILOGUE : Pseudo<(outs), (ins), []>, Sched<[]>;
}
-def PAUTH_BLEND : Pseudo<(outs GPR64:$disc),
- (ins GPR64:$addr_disc, i32imm:$int_disc), []>, Sched<[]>;
-
// These pointer authentication instructions require armv8.3a
let Predicates = [HasPAuth] in {
@@ -10130,7 +10127,7 @@ let Predicates = [HasMOPS, HasMTE], Defs = [NZCV], Size = 12, mayLoad = 0, maySt
// v8.3 Pointer Authentication late patterns
def : Pat<(int_ptrauth_blend GPR64:$Rd, imm64_0_65535:$imm),
- (PAUTH_BLEND GPR64:$Rd, (trunc_imm imm64_0_65535:$imm))>;
+ (MOVKXi GPR64:$Rd, (trunc_imm imm64_0_65535:$imm), 48)>;
def : Pat<(int_ptrauth_blend GPR64:$Rd, GPR64:$Rn),
(BFMXri GPR64:$Rd, GPR64:$Rn, 16, 15)>;
diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index c3bc70ad6f427..ba03f4e257b69 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -42,13 +42,6 @@ class AArch64PointerAuth : public MachineFunctionPass {
void authenticateLR(MachineFunction &MF,
MachineBasicBlock::iterator MBBI) const;
- /// Stores blend(AddrDisc, IntDisc) to the Result register.
- void emitBlend(MachineBasicBlock::iterator MBBI, Register Result,
- Register AddrDisc, unsigned IntDisc) const;
-
- /// Expands PAUTH_BLEND pseudo instruction.
- void expandPAuthBlend(MachineBasicBlock::iterator MBBI) const;
-
bool checkAuthenticatedLR(MachineBasicBlock::iterator TI) const;
};
@@ -249,32 +242,6 @@ unsigned llvm::AArch64PAuth::getCheckerSizeInBytes(AuthCheckMethod Method) {
llvm_unreachable("Unknown AuthCheckMethod enum");
}
-void AArch64PointerAuth::emitBlend(MachineBasicBlock::iterator MBBI,
- Register Result, Register AddrDisc,
- unsigned IntDisc) const {
- MachineBasicBlock &MBB = *MBBI->getParent();
- DebugLoc DL = MBBI->getDebugLoc();
-
- if (Result != AddrDisc)
- BuildMI(MBB, MBBI, DL, TII->get(AArch64::ORRXrs), Result)
- .addReg(AArch64::XZR)
- .addReg(AddrDisc)
- .addImm(0);
-
- BuildMI(MBB, MBBI, DL, TII->get(AArch64::MOVKXi), Result)
- .addReg(Result)
- .addImm(IntDisc)
- .addImm(48);
-}
-
-void AArch64PointerAuth::expandPAuthBlend(
- MachineBasicBlock::iterator MBBI) const {
- Register ResultReg = MBBI->getOperand(0).getReg();
- Register AddrDisc = MBBI->getOperand(1).getReg();
- unsigned IntDisc = MBBI->getOperand(2).getImm();
- emitBlend(MBBI, ResultReg, AddrDisc, IntDisc);
-}
-
bool AArch64PointerAuth::runOnMachineFunction(MachineFunction &MF) {
Subtarget = &MF.getSubtarget<AArch64Subtarget>();
TII = Subtarget->getInstrInfo();
@@ -290,7 +257,6 @@ bool AArch64PointerAuth::runOnMachineFunction(MachineFunction &MF) {
break;
case AArch64::PAUTH_PROLOGUE:
case AArch64::PAUTH_EPILOGUE:
- case AArch64::PAUTH_BLEND:
PAuthPseudoInstrs.push_back(MI.getIterator());
break;
}
@@ -305,9 +271,6 @@ bool AArch64PointerAuth::runOnMachineFunction(MachineFunction &MF) {
case AArch64::PAUTH_EPILOGUE:
authenticateLR(MF, It);
break;
- case AArch64::PAUTH_BLEND:
- expandPAuthBlend(It);
- break;
default:
llvm_unreachable("Unhandled opcode");
}
diff --git a/llvm/test/CodeGen/AArch64/ptrauth-pseudo-instructions.mir b/llvm/test/CodeGen/AArch64/ptrauth-pseudo-instructions.mir
deleted file mode 100644
index d7fe1953deb47..0000000000000
--- a/llvm/test/CodeGen/AArch64/ptrauth-pseudo-instructions.mir
+++ /dev/null
@@ -1,27 +0,0 @@
-# RUN: llc -mtriple=aarch64--- -run-pass=aarch64-ptrauth -verify-machineinstrs %s -o - | FileCheck %s
-
-# Test the corner cases that cannot be reliably tested using LLVM IR as input.
-
---- |
- define i64 @blend_untied(i64 %unused, i64 %ptr_arg) {
- ret i64 0
- }
-...
----
-# Check that the input register is copied to the output one, if not tied.
-
-name: blend_untied
-tracksRegLiveness: true
-body: |
- bb.0:
- liveins: $lr, $x0, $x1
- $x0 = PAUTH_BLEND $x1, 42
- RET undef $lr
-
-# CHECK: liveins: $lr, $x0, $x1
-# CHECK-NEXT: {{^ +$}}
-# CHECK-NEXT: $x0 = ORRXrs $xzr, $x1, 0
-# CHECK-NEXT: $x0 = MOVKXi $x0, 42, 48
-# CHECK-NEXT: RET undef $lr
-
-...
More information about the llvm-commits
mailing list