From fa40cef0b12a6b7e527284967c7be42000341489 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Wed, 3 Dec 2025 14:15:01 +0300 Subject: [PATCH] rsx/fp/cfg: Insert bi-directional edges correctly during traversal --- rpcs3/Emu/RSX/Program/Assembler/FPToCFG.cpp | 22 +++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/rpcs3/Emu/RSX/Program/Assembler/FPToCFG.cpp b/rpcs3/Emu/RSX/Program/Assembler/FPToCFG.cpp index 055d74a88c..7887a8a9f4 100644 --- a/rpcs3/Emu/RSX/Program/Assembler/FPToCFG.cpp +++ b/rpcs3/Emu/RSX/Program/Assembler/FPToCFG.cpp @@ -101,6 +101,28 @@ namespace rsx::assembler if (found) { + if (!bb->pred.empty()) + { + switch (bb->pred.back().type) + { + case EdgeType::IF: + case EdgeType::ELSE: + bb->insert_succ(*found, EdgeType::ENDIF); + break; + case EdgeType::LOOP: + bb->insert_succ(*found, EdgeType::ENDLOOP); + break; + default: + // Missing an edge type? + rsx_log.error("CFG: Unexpected block exit. Report to developers."); + } + } + else + { + // Impossible situation. + rsx_log.error("CFG: Child block has no parent but has successor! Report to developers."); + } + bb = *found; }