From 095a883814638ed0b0ef0c492da015ad164e54e6 Mon Sep 17 00:00:00 2001 From: Chris Fallin Date: Sun, 9 May 2021 01:06:59 -0700 Subject: [PATCH] Fix crit-edge detection logic in CFGInfo analysis --- src/cfg.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cfg.rs b/src/cfg.rs index f73ca1a..cf4428c 100644 --- a/src/cfg.rs +++ b/src/cfg.rs @@ -72,10 +72,12 @@ impl CFGInfo { block_entry[block.index()] = ProgPoint::before(f.block_insns(block).first()); block_exit[block.index()] = ProgPoint::after(f.block_insns(block).last()); - if f.block_preds(block).len() > 1 { + let preds = f.block_preds(block).len() + if block == f.entry_block() { 1 } else { 0 }; + if preds > 1 { for (i, &pred) in f.block_preds(block).iter().enumerate() { // Check critical edge condition. - if f.block_succs(pred).len() > 1 { + let succs = f.block_succs(pred).len(); + if succs > 1 { return Err(RegAllocError::CritEdge(pred, block)); } pred_pos[pred.index()] = i;