From 8bc4f3ba6d45d16d2752ac5908d7d9827f9dabde Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 18 Nov 2025 14:31:42 +0000 Subject: [PATCH 1/4] Initial plan From 4bab6bedaf9c6291daa3b75a49ea350b8c6bc8ec Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 18 Nov 2025 15:06:24 +0000 Subject: [PATCH 2/4] Move RBM_SAVED_LOCALLOC_SP code from compCompile to setFrameType in LSRA Co-authored-by: jakobbotsch <7887810+jakobbotsch@users.noreply.github.com> --- src/coreclr/jit/compiler.cpp | 8 -------- src/coreclr/jit/lsra.cpp | 8 ++++++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/coreclr/jit/compiler.cpp b/src/coreclr/jit/compiler.cpp index 998a7d7717d12d..b02c5938a0e122 100644 --- a/src/coreclr/jit/compiler.cpp +++ b/src/coreclr/jit/compiler.cpp @@ -4950,14 +4950,6 @@ void Compiler::compCompile(void** methodCodePtr, uint32_t* methodCodeSize, JitFl // call and register argument info, flowgraph and loop info, etc. compJitStats(); -#ifdef TARGET_ARM - if (compLocallocUsed) - { - // We reserve REG_SAVED_LOCALLOC_SP to store SP on entry for stack unwinding - codeGen->regSet.rsMaskResvd |= RBM_SAVED_LOCALLOC_SP; - } -#endif // TARGET_ARM - if (compIsAsync()) { DoPhase(this, PHASE_ASYNC, &Compiler::TransformAsync); diff --git a/src/coreclr/jit/lsra.cpp b/src/coreclr/jit/lsra.cpp index 68bd77e9c70971..ff2a087f4bff7f 100644 --- a/src/coreclr/jit/lsra.cpp +++ b/src/coreclr/jit/lsra.cpp @@ -2717,6 +2717,14 @@ void LinearScan::setFrameType() } #endif // TARGET_ARMARCH || TARGET_RISCV64 +#ifdef TARGET_ARM + if (compiler->compLocallocUsed) + { + // We reserve REG_SAVED_LOCALLOC_SP to store SP on entry for stack unwinding + compiler->codeGen->regSet.rsMaskResvd |= RBM_SAVED_LOCALLOC_SP; + } +#endif // TARGET_ARM + if ((removeMask != RBM_NONE) && ((availableIntRegs & removeMask) != 0)) { // We know that we're already in "read mode" for availableIntRegs. However, From 8da758e346ecbc644f1be82561fc4f8d538ef1cf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 18 Nov 2025 16:47:58 +0000 Subject: [PATCH 3/4] Add JITDUMP for RBM_SAVED_LOCALLOC_SP reservation Co-authored-by: jakobbotsch <7887810+jakobbotsch@users.noreply.github.com> --- src/coreclr/jit/lsra.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/coreclr/jit/lsra.cpp b/src/coreclr/jit/lsra.cpp index ff2a087f4bff7f..3b2b2aa54becf1 100644 --- a/src/coreclr/jit/lsra.cpp +++ b/src/coreclr/jit/lsra.cpp @@ -2722,6 +2722,7 @@ void LinearScan::setFrameType() { // We reserve REG_SAVED_LOCALLOC_SP to store SP on entry for stack unwinding compiler->codeGen->regSet.rsMaskResvd |= RBM_SAVED_LOCALLOC_SP; + JITDUMP(" Reserved REG_SAVED_LOCALLOC_SP (%s) due to localloc\n", getRegName(REG_SAVED_LOCALLOC_SP)); } #endif // TARGET_ARM From b5be71185000e28da95703b1bc74e202f543ecf3 Mon Sep 17 00:00:00 2001 From: Jakob Botsch Nielsen Date: Tue, 18 Nov 2025 19:47:38 +0100 Subject: [PATCH 4/4] Update src/coreclr/jit/lsra.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/coreclr/jit/lsra.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/coreclr/jit/lsra.cpp b/src/coreclr/jit/lsra.cpp index 3b2b2aa54becf1..0a712d4c82df3e 100644 --- a/src/coreclr/jit/lsra.cpp +++ b/src/coreclr/jit/lsra.cpp @@ -2723,6 +2723,7 @@ void LinearScan::setFrameType() // We reserve REG_SAVED_LOCALLOC_SP to store SP on entry for stack unwinding compiler->codeGen->regSet.rsMaskResvd |= RBM_SAVED_LOCALLOC_SP; JITDUMP(" Reserved REG_SAVED_LOCALLOC_SP (%s) due to localloc\n", getRegName(REG_SAVED_LOCALLOC_SP)); + removeMask |= RBM_SAVED_LOCALLOC_SP.GetIntRegSet(); } #endif // TARGET_ARM