[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