================ @@ -14389,6 +14389,35 @@ Semantics: Note this intrinsic is only verified on AArch64 and ARM. +'``llvm.stackaddress``' Intrinsic +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Syntax: +""""""" + +:: + + declare ptr @llvm.stackaddress.p0() + +Overview: +""""""""" + +The '``llvm.stackaddress``' instrinsic returns the starting address of the +stack region that may be used by called functions. + +Semantics: +"""""""""" + +This intrinsic returns the *logical* value of the stack pointer register, that +is, the address separating the stack space of the current function from the +stack space that may be modified by called functions. + +On certain targets (e.g. x86), the logical and actual (or physical) values of +the stack pointer register are the same. However, on other architectures (e.g. +SPARCv9), the logical value of the stack pointer register may differ from the +physical value. '``llvm.stackaddress``' handles this discrepancy and returns +the correct boundary address. + ---------------- moorabbit wrote:
I added a sentence in the docs clarifying the difference. Within a function, `llvm.sponentry` returns the address marking the start of the stackframe (before prologue adjustments and stack allocations), while `llvm.stackaddress` returns the address marking the end of the stackframe. https://github.com/llvm/llvm-project/pull/148281 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
