From 1336c47d18d2c5f2e176e8c12c650d49afbb6205 Mon Sep 17 00:00:00 2001 From: Skylot Date: Sun, 16 Feb 2020 15:50:02 +0000 Subject: [PATCH] fix: speed up switch processing by skip not relevant exits (#846) --- .../jadx/core/dex/visitors/regions/RegionMaker.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java index 780b1f8c..832b8123 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java @@ -865,10 +865,12 @@ public class RegionMaker { // slow search: calculate partial post-dominance for every exit node BitSet ipdoms = BlockUtils.newBlocksBitSet(mth); for (BlockNode exitBlock : exits) { - Set pathBlocks = BlockUtils.getAllPathsBlocks(block, exitBlock); - BlockNode ipdom = BlockUtils.calcPartialImmediatePostDominator(mth, block, pathBlocks, exitBlock); - if (ipdom != null) { - ipdoms.set(ipdom.getId()); + if (BlockUtils.isAnyPathExists(block, exitBlock)) { + Set pathBlocks = BlockUtils.getAllPathsBlocks(block, exitBlock); + BlockNode ipdom = BlockUtils.calcPartialImmediatePostDominator(mth, block, pathBlocks, exitBlock); + if (ipdom != null) { + ipdoms.set(ipdom.getId()); + } } } outs.and(ipdoms); -- GitLab