[llvm] [BOLT][AArch64] Support Compare-and-Branch instructions without compact code (PR #182045)

Gergely Bálint via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 19 00:12:37 PST 2026


================
@@ -0,0 +1,77 @@
+# This test checks that splitting functions which contain short range
+# conditional branches works without compact code model.
+
+# REQUIRES: system-linux, asserts
+
+# RUN: %clang %cflags -march=armv9-a+cmpbr -Wl,-q %s -o %t -DNUM_NOPS=0 -DRESERVE_SPACE=0
+# RUN: link_fdata --no-lbr %s %t %t.fdata
+# RUN: llvm-bolt %t -o %t.bolt --data %t.fdata -split-functions
+# RUN: llvm-objdump -d %t.bolt | FileCheck %s
+
+# RUN: %clang %cflags -march=armv9-a+cmpbr -Wl,-q %s -o %t -DNUM_NOPS=256 -DRESERVE_SPACE=0
+# RUN: link_fdata --no-lbr %s %t %t.fdata
+# RUN: llvm-bolt %t -o %t.bolt --data %t.fdata -split-functions --keep-nops
+# RUN: llvm-objdump -d %t.bolt | FileCheck %s
+
+# RUN: %clang %cflags -march=armv9-a+cmpbr -Wl,-q %s -o %t -DNUM_NOPS=0 -DRESERVE_SPACE=1
+# RUN: link_fdata --no-lbr %s %t %t.fdata
+# RUN: llvm-bolt %t -o %t.bolt --data %t.fdata -split-functions
+# RUN: llvm-objdump -d %t.bolt | FileCheck %s --check-prefix=BEYOND-128MB
+
+  .globl foo
+  .type foo, %function
+foo:
+.entry_foo:
+# FDATA: 1 foo #.entry_foo# 10
+    cbgt x0, #0, .Lcold_foo
+    mov x0, #1
+.Lcold_foo:
+    ret
+
+  .globl large_function
+  .type large_function, %function
+large_function:
+.entry_large_function:
+# FDATA: 1 large_function #.entry_large_function# 10
+  .rept NUM_NOPS
+    nop
+  .endr
+    ret
+
+.if RESERVE_SPACE
+.space 0x8000000
+.endif
+
+## Force relocation mode.
+.reloc 0, R_AARCH64_NONE
+
+# CHECK: Disassembly of section .text:
+
+# CHECK: <foo>:
+# CHECK-NEXT:            {{.*}} cblt x0, #0x1, 0x[[ADDR0:[0-9a-f]+]] <{{.*}}>
+# CHECK-NEXT:            {{.*}} b              0x[[ADDR1:[0-9a-f]+]] <{{.*}}>
+# CHECK-NEXT: [[ADDR0]]: {{.*}} b              0x[[ADDR2:[0-9a-f]+]] <{{.*}}>
+
+# CHECK: Disassembly of section .text.cold:
+
+# CHECK: <foo.cold.0>:
+# CHECK-NEXT: [[ADDR2]]: {{.*}} mov x0, #0x1 // =1
+# CHECK-NEXT: [[ADDR1]]: {{.*}} ret
+
+# BEYOND-128MB: Disassembly of section .text:
+
+## FIXME: x16 may be clobbered here!
----------------
bgergely0 wrote:

On a high level, what is the suggested follow-up fix for this? 

https://github.com/llvm/llvm-project/pull/182045


More information about the llvm-commits mailing list