From 35691ab7bce555cb40608fef4f08a9edaefacae6 Mon Sep 17 00:00:00 2001 From: rain2133 <1370973498@qq.com> Date: Thu, 31 Jul 2025 17:19:57 +0800 Subject: [PATCH] =?UTF-8?q?[midend-SCCP]=E4=B8=BA=E8=B7=B3=E8=BD=AC?= =?UTF-8?q?=E6=8C=87=E4=BB=A4=E5=A2=9E=E5=8A=A0getSuccessors=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/include/midend/IR.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/include/midend/IR.h b/src/include/midend/IR.h index 91d7f72..2902c64 100644 --- a/src/include/midend/IR.h +++ b/src/include/midend/IR.h @@ -1074,6 +1074,16 @@ public: auto getArguments() const { return make_range(std::next(operand_begin()), operand_end()); } + std::vector getSuccessors() const { + std::vector succs; + // 假设无条件分支的目标块是它的第一个操作数 + if (getNumOperands() > 0) { + if (auto target_bb = dynamic_cast(getOperand(0))) { + succs.push_back(target_bb); + } + } + return succs; + } }; // class UncondBrInst @@ -1105,6 +1115,20 @@ public: BasicBlock* getElseBlock() const { return dynamic_cast(getOperand(2)); } + std::vector getSuccessors() const { + std::vector succs; + // 假设条件分支的真实块是第二个操作数,假块是第三个操作数 + // 操作数通常是:[0] 条件值, [1] TrueTargetBlock, [2] FalseTargetBlock + if (getNumOperands() > 2) { + if (auto true_bb = getThenBlock()) { + succs.push_back(true_bb); + } + if (auto false_bb = getElseBlock()) { + succs.push_back(false_bb); + } + } + return succs; + } // auto getThenArguments() const { // auto begin = std::next(operand_begin(), 3); // // auto end = std::next(begin, getThenBlock()->getNumArguments());