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,@function -_Z3fooP1A: - ldr x8, [x0] - ldr w0, [x8] - br x30 - .size _Z3fooP1A, .-_Z3fooP1A - - .globl _Z3barP1A - .type _Z3barP1A,@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,@function -main: - mov w0, wzr - ret - .size main, .-main