From c8a8bf9a37140f12faa3e9b8ddd6162f4bb2db34 Mon Sep 17 00:00:00 2001 From: Lixuanwang Date: Sun, 3 Aug 2025 23:28:38 +0800 Subject: [PATCH] =?UTF-8?q?[backend]=E4=BF=AE=E5=A4=8D=E4=BA=86=E6=BA=A2?= =?UTF-8?q?=E5=87=BA=E4=BD=8D=E7=BD=AE=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/RISCv64/RISCv64RegAlloc.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/backend/RISCv64/RISCv64RegAlloc.cpp b/src/backend/RISCv64/RISCv64RegAlloc.cpp index 87f276f..195ef6c 100644 --- a/src/backend/RISCv64/RISCv64RegAlloc.cpp +++ b/src/backend/RISCv64/RISCv64RegAlloc.cpp @@ -656,7 +656,7 @@ void RISCv64RegAlloc::rewriteProgram() { StackFrameInfo& frame_info = MFunc->getFrameInfo(); // 使用 EFI Pass 确定的 locals_end_offset 作为溢出分配的基准。 // locals_end_offset 本身是负数,代表局部变量区域的下边界地址。 - int spill_current_offset = frame_info.locals_end_offset; + int spill_current_offset = frame_info.locals_end_offset - frame_info.spill_size; // 保存溢出区域的起始点,用于最后计算总的 spill_size const int spill_start_offset = frame_info.locals_end_offset; @@ -787,6 +787,11 @@ void RISCv64RegAlloc::rewriteProgram() { std::make_unique(frame_info.spill_offsets.at(old_vreg)) )); new_instructions.push_back(std::move(store)); + if (DEEPERDEBUG) { + std::cerr << "[Spill] Inserted spill store for %vreg" << old_vreg + << " at offset " << frame_info.spill_offsets.at(old_vreg) + << " with new temp vreg " << regIdToString(new_temp_vreg) << ".\n"; + } } } mbb->getInstructions() = std::move(new_instructions);