[llvm] Revert "[BOLT][BTI] Skip inlining BasicBlocks containing indirect tailcalls" (PR #169881)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 28 00:25:27 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-bolt
Author: Gergely Bálint (bgergely0)
<details>
<summary>Changes</summary>
Reverts llvm/llvm-project#<!-- -->168403
The attached lit test is failing in some build configurations.
---
Full diff: https://github.com/llvm/llvm-project/pull/169881.diff
2 Files Affected:
- (modified) bolt/lib/Passes/Inliner.cpp (-26)
- (removed) bolt/test/AArch64/inline-bti.s (-39)
``````````diff
diff --git a/bolt/lib/Passes/Inliner.cpp b/bolt/lib/Passes/Inliner.cpp
index 0740fcef9102b..5a7d02a34b4d8 100644
--- a/bolt/lib/Passes/Inliner.cpp
+++ b/bolt/lib/Passes/Inliner.cpp
@@ -491,32 +491,6 @@ bool Inliner::inlineCallsInFunction(BinaryFunction &Function) {
}
}
- // AArch64 BTI:
- // If the callee has an indirect tailcall (BR), we would transform it to
- // an indirect call (BLR) in InlineCall. Because of this, we would have to
- // update the BTI at the target of the tailcall. However, these targets
- // are not known. Instead, we skip inlining blocks with indirect
- // tailcalls.
- auto HasIndirectTailCall = [&](const BinaryFunction &BF) -> bool {
- for (const auto &BB : BF) {
- for (const auto &II : BB) {
- if (BC.MIB->isIndirectBranch(II) && BC.MIB->isTailCall(II)) {
- return true;
- }
- }
- }
- return false;
- };
-
- if (BC.isAArch64() && BC.usesBTI() &&
- HasIndirectTailCall(*TargetFunction)) {
- ++InstIt;
- LLVM_DEBUG(dbgs() << "BOLT-DEBUG: Skipping inlining block with tailcall"
- << " in " << Function << " : " << BB->getName()
- << " to keep BTIs consistent.\n");
- continue;
- }
-
LLVM_DEBUG(dbgs() << "BOLT-DEBUG: inlining call to " << *TargetFunction
<< " in " << Function << " : " << BB->getName()
<< ". Count: " << BB->getKnownExecutionCount()
diff --git a/bolt/test/AArch64/inline-bti.s b/bolt/test/AArch64/inline-bti.s
deleted file mode 100644
index c0b9ebe632b6c..0000000000000
--- a/bolt/test/AArch64/inline-bti.s
+++ /dev/null
@@ -1,39 +0,0 @@
-## This test checks that for AArch64 binaries with BTI, we do not inline blocks with indirect tailcalls.
-
-# REQUIRES: system-linux
-
-# RUN: llvm-mc -filetype=obj -triple aarch64-unknown-unknown %s -o %t.o
-# RUN: %clang %cflags -O0 %t.o -o %t.exe -Wl,-q -Wl,-z,force-bti
-# RUN: llvm-bolt --inline-all %t.exe -o %t.bolt --debug 2>&1 | FileCheck %s
-
-# For BTI, we should not inline foo.
-# CHECK: BOLT-DEBUG: Skipping inlining block with tailcall in _Z3barP1A : .LBB01 to keep BTIs consistent.
-# CHECK-NOT: BOLT-INFO: inlined {{[0-9]+}} calls at {{[0-9]+}} call sites in {{[0-9]+}} iteration(s). Change in binary size: {{[0-9]+}} bytes.
-
- .text
- .globl _Z3fooP1A
- .type _Z3fooP1A, at function
-_Z3fooP1A:
- ldr x8, [x0]
- ldr w0, [x8]
- br x30
- .size _Z3fooP1A, .-_Z3fooP1A
-
- .globl _Z3barP1A
- .type _Z3barP1A, at function
-_Z3barP1A:
- stp x29, x30, [sp, #-16]!
- mov x29, sp
- bl _Z3fooP1A
- mul w0, w0, w0
- ldp x29, x30, [sp], #16
- ret
- .size _Z3barP1A, .-_Z3barP1A
-
- .globl main
- .p2align 2
- .type main, at function
-main:
- mov w0, wzr
- ret
- .size main, .-main
``````````
</details>
https://github.com/llvm/llvm-project/pull/169881
More information about the llvm-commits
mailing list