[llvm] [bolt] Support arm64 FP register spills (PR #73021)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 5 11:14:13 PST 2023
https://github.com/eleviant updated https://github.com/llvm/llvm-project/pull/73021
>From d9b00ed088ac6d7e25b97a78ca7441c10386a639 Mon Sep 17 00:00:00 2001
From: Evgeny Leviant <eleviant at accesssoftek.com>
Date: Tue, 21 Nov 2023 20:35:56 +0300
Subject: [PATCH] [bolt] Support arm64 FP register spills
At the moment llvm-bolt fails when analyzing jump tables on aarch64
in case FP register spill/reload is used.
---
.../Target/AArch64/AArch64MCPlusBuilder.cpp | 6 ++++++
bolt/test/AArch64/fp-reg-spill.s | 19 +++++++++++++++++++
2 files changed, 25 insertions(+)
create mode 100644 bolt/test/AArch64/fp-reg-spill.s
diff --git a/bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp b/bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
index b852b9fbc9c52..d90512e212258 100644
--- a/bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
+++ b/bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
@@ -314,6 +314,12 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
bool isRegToRegMove(const MCInst &Inst, MCPhysReg &From,
MCPhysReg &To) const override {
+ if (Inst.getOpcode() == AArch64::FMOVDXr) {
+ From = Inst.getOperand(1).getReg();
+ To = Inst.getOperand(0).getReg();
+ return true;
+ }
+
if (Inst.getOpcode() != AArch64::ORRXrs)
return false;
if (Inst.getOperand(1).getReg() != AArch64::XZR)
diff --git a/bolt/test/AArch64/fp-reg-spill.s b/bolt/test/AArch64/fp-reg-spill.s
new file mode 100644
index 0000000000000..65523148edd3f
--- /dev/null
+++ b/bolt/test/AArch64/fp-reg-spill.s
@@ -0,0 +1,19 @@
+# Check that we correctly handle arm64 fp register spills in
+# bolt when we are processing jump tables.
+# REQUIRES: system-linux
+# RUN: llvm-mc -filetype=obj -triple=aarch64 %s -o %t.o
+# RUN: ld.lld --emit-relocs %t.o -o %t.elf
+# RUN: llvm-bolt --jump-tables=move %t.elf -o %t.bolt
+
+.globl _foo, _start
+
+_foo:
+ ret
+
+_start:
+ adr x6, _foo
+ fmov d18,x6
+ fmov x5,d18
+ ldrb w5, [x5, w1, uxtw]
+ add x5, x6, w5, sxtb #2
+ br x5
More information about the llvm-commits
mailing list