[llvm] [BOLT][AArch64] Speedup `computeInstructionSize` (PR #121106)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 9 17:48:34 PST 2025
https://github.com/liusy58 updated https://github.com/llvm/llvm-project/pull/121106
>From 1a0680a3b8157c9a36eeb069acef6aa4f1870001 Mon Sep 17 00:00:00 2001
From: liusy58 <liusy58 at linux.alibaba.com>
Date: Wed, 25 Dec 2024 19:45:08 +0800
Subject: [PATCH] [BOLT][AArch64] Speedup `computeInstructionSize`
---
bolt/include/bolt/Core/BinaryContext.h | 6 ++++++
bolt/include/bolt/Core/MCPlusBuilder.h | 5 +++++
bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp | 5 +++++
3 files changed, 16 insertions(+)
diff --git a/bolt/include/bolt/Core/BinaryContext.h b/bolt/include/bolt/Core/BinaryContext.h
index 115e59ca0697e5..844783716ba650 100644
--- a/bolt/include/bolt/Core/BinaryContext.h
+++ b/bolt/include/bolt/Core/BinaryContext.h
@@ -1363,6 +1363,12 @@ class BinaryContext {
if (std::optional<uint32_t> Size = MIB->getSize(Inst))
return *Size;
+ if(MIB->isPseudo(Inst))
+ return 0;
+
+ if (std::optional<uint32_t> Size = MIB->getInstructionSize(Inst))
+ return *Size;
+
if (!Emitter)
Emitter = this->MCE.get();
SmallString<256> Code;
diff --git a/bolt/include/bolt/Core/MCPlusBuilder.h b/bolt/include/bolt/Core/MCPlusBuilder.h
index 3634fed9757ceb..5d77e6faff2fc6 100644
--- a/bolt/include/bolt/Core/MCPlusBuilder.h
+++ b/bolt/include/bolt/Core/MCPlusBuilder.h
@@ -1204,6 +1204,11 @@ class MCPlusBuilder {
/// Get instruction size specified via annotation.
std::optional<uint32_t> getSize(const MCInst &Inst) const;
+ /// Get target-specific instruction size.
+ virtual std::optional<uint32_t> getInstructionSize(const MCInst &Inst) const {
+ return std::nullopt;
+ }
+
/// Set instruction size.
void setSize(MCInst &Inst, uint32_t Size) const;
diff --git a/bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp b/bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
index 7e08e5c81d26ff..a2f2b607510c30 100644
--- a/bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
+++ b/bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
@@ -1790,6 +1790,11 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
}
uint16_t getMinFunctionAlignment() const override { return 4; }
+
+ std::optional<uint32_t>
+ getInstructionSize(const MCInst &Inst) const override {
+ return 4;
+ }
};
} // end anonymous namespace
More information about the llvm-commits
mailing list