[PATCH] D152221: Avoid cross-section branches in AArch64 inline asm

Daniel Hoekwater via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 6 01:46:44 PDT 2023

dhoekwater added a comment.

I'm adding this so that, once enabled, function splitting and basic block sections won't create link failures for AArch64.

If we have two basic blocks: BB1 and BB2 where BB1 contains an inline assembly label and BB2 contains inline assembly that branches to that label, function splitting and `fbasic-block-sections=all` can both place BB1 and BB2 in different text sections. Ex: https://godbolt.org/z/z8KareGn7. With function splitting, if the `beq label1` instruction is rarely taken, `label1` will be placed in the `.text.split` section, while `beq label1` remains in `.text`. If the linker places the two sections more than 1MB away from each other, the program will fail to link because the offset doesn't fit in `beq` machine code instruction.

  rG LLVM Github Monorepo



More information about the llvm-commits mailing list