[llvm] [AArch64] Consider MOVaddr* as cheap if fuse-adrp-add (PR #121904)

Guy David via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 7 01:06:55 PST 2025


https://github.com/guy-david updated https://github.com/llvm/llvm-project/pull/121904

>From d3a2ea706d4be30708fbf22ab618c236a1b29ce1 Mon Sep 17 00:00:00 2001
From: Guy David <guyda96 at gmail.com>
Date: Tue, 7 Jan 2025 10:57:12 +0200
Subject: [PATCH] [AArch64] Consider MOVaddr* as cheap if fuse-adrp-add

These pseudo-instructions usually translate into a pair of adrp+add and
have a single cycle latency on some micro-architectures.
---
 llvm/lib/Target/AArch64/AArch64InstrInfo.cpp | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
index fd24e49f948a20..c394e6768f6600 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
@@ -936,6 +936,15 @@ bool AArch64InstrInfo::isAsCheapAsAMove(const MachineInstr &MI) const {
     return isCheapImmediate(MI, 32);
   case AArch64::MOVi64imm:
     return isCheapImmediate(MI, 64);
+
+  case AArch64::MOVaddr:
+  case AArch64::MOVaddrJT:
+  case AArch64::MOVaddrCP:
+  case AArch64::MOVaddrBA:
+  case AArch64::MOVaddrTLS:
+  case AArch64::MOVaddrEXT:
+    return Subtarget.hasFuseAdrpAdd() &&
+           !(MI.getOperand(1).getTargetFlags() & AArch64II::MO_TAGGED);
   }
 }
 



More information about the llvm-commits mailing list