[llvm] WIP: [bolt][aarch64] Change indirect call instrumentation snippet (PR #180229)
Alexey Moksyakov via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 10 02:47:54 PST 2026
================
@@ -2625,39 +2626,68 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
MCSymbol *HandlerFuncAddr,
int CallSiteID,
MCContext *Ctx) override {
- InstructionListType Insts;
// Code sequence used to enter indirect call instrumentation helper:
- // stp x0, x1, [sp, #-16]! createPushRegisters
- // mov target x0 convertIndirectCallToLoad -> orr x0 target xzr
+ // stp x0, x1, [sp, #-16]! createPushRegisters (1)
+ // mov target, x0 convertIndirectCallToLoad -> orr x0 target xzr
// mov x1 CallSiteID createLoadImmediate ->
// movk x1, #0x0, lsl #48
// movk x1, #0x0, lsl #32
// movk x1, #0x0, lsl #16
// movk x1, #0x0
- // stp x0, x1, [sp, #-16]!
- // bl *HandlerFuncAddr createIndirectCall ->
+ // stp x0, x1, [sp, #-16]! (2)
+ // str x30, [sp, #-16]! (3)
// adr x0 *HandlerFuncAddr -> adrp + add
- // blr x0
+ // blr x0 (__bolt_instr_ind_call_handler_func)
+ // ldr x30, [sp], #16 (3)
+ // ldp x0, x1, [sp], #16 (2)
+ // mov x0, target ; move target address to used register
----------------
yavtuk wrote:
Thanks, good point, I've made the snippet symmetrical to make it easier to read, but in general, the fewer instructions, the less overhead.
https://github.com/llvm/llvm-project/pull/180229
More information about the llvm-commits
mailing list