[llvm] [BOLT][AArch64] Use minimal code alignment for cold functions (PR #172598)

Maksim Panchenko via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 16 22:11:24 PST 2025


https://github.com/maksfb updated https://github.com/llvm/llvm-project/pull/172598

>From 3c15943ec0247564f7fc82a430bfa1113d68527c Mon Sep 17 00:00:00 2001
From: Maksim Panchenko <maks at fb.com>
Date: Tue, 16 Dec 2025 21:51:33 -0800
Subject: [PATCH] [BOLT][AArch64] Use minimal code alignment for cold functions

On AArch64, a larger cold code size can result in more veneers,
increasing potential overhead for hot code. This change minimizes cold
code size when the `--use-compact-aligner` option (default) is enabled.
---
 bolt/lib/Passes/Aligner.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/bolt/lib/Passes/Aligner.cpp b/bolt/lib/Passes/Aligner.cpp
index 5d21bdb3f154a..c631120e9de09 100644
--- a/bolt/lib/Passes/Aligner.cpp
+++ b/bolt/lib/Passes/Aligner.cpp
@@ -77,6 +77,13 @@ static void alignCompact(BinaryFunction &Function,
   size_t HotSize = 0;
   size_t ColdSize = 0;
 
+  // On AArch64, larger cold code size may lead to more veneers and higher
+  // potential overhead for hot code. Minimize the cold code size.
+  if (!Function.hasProfile() && BC.isAArch64()) {
+    Function.setAlignment(Function.getMinAlignment());
+    return;
+  }
+
   for (const BinaryBasicBlock &BB : Function)
     if (BB.isSplit())
       ColdSize += BC.computeCodeSize(BB.begin(), BB.end(), Emitter);



More information about the llvm-commits mailing list