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 (已修复和增强的完整版本)