From 64ba25a77ea89dc29604c1afe0f6f939f8414a5a Mon Sep 17 00:00:00 2001 From: Lixuanwang Date: Mon, 4 Aug 2025 14:11:27 +0800 Subject: [PATCH] =?UTF-8?q?[backend]=E7=A7=BB=E9=99=A4=E4=BA=86=E5=86=97?= =?UTF-8?q?=E4=BD=99=E7=9A=84keepalive=E4=BC=AA=E6=8C=87=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/RISCv64/RISCv64ISel.cpp | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/src/backend/RISCv64/RISCv64ISel.cpp b/src/backend/RISCv64/RISCv64ISel.cpp index 4758b37..a96b578 100644 --- a/src/backend/RISCv64/RISCv64ISel.cpp +++ b/src/backend/RISCv64/RISCv64ISel.cpp @@ -167,33 +167,6 @@ void RISCv64ISel::selectBasicBlock(BasicBlock* bb) { select_recursive(node_to_select); } } - - if (CurMBB == MFunc->getBlocks().front().get()) { // 只对入口块操作 - auto keepalive = std::make_unique(RVOpcodes::PSEUDO_KEEPALIVE); - for (Argument* arg : F->getArguments()) { - keepalive->addOperand(std::make_unique(getVReg(arg))); - } - - auto& instrs = CurMBB->getInstructions(); - auto insert_pos = instrs.end(); - - // 关键:检查基本块是否以一个“终止指令”结尾 - if (!instrs.empty()) { - RVOpcodes last_op = instrs.back()->getOpcode(); - // 扩充了判断条件,涵盖所有可能的终止指令 - if (last_op == RVOpcodes::J || last_op == RVOpcodes::RET || - last_op == RVOpcodes::BEQ || last_op == RVOpcodes::BNE || - last_op == RVOpcodes::BLT || last_op == RVOpcodes::BGE || - last_op == RVOpcodes::BLTU || last_op == RVOpcodes::BGEU) - { - // 如果是,插入点就在这个终止指令之前 - insert_pos = std::prev(instrs.end()); - } - } - - // 在计算出的正确位置插入伪指令 - instrs.insert(insert_pos, std::move(keepalive)); - } } // 核心函数:为DAG节点选择并生成MachineInstr (已修复和增强的完整版本)