From fda953b45fb095fbb0c778503f47fdae6a902f01 Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Sat, 1 Sep 2018 18:41:25 -0400 Subject: [PATCH] Kill useless phi nodes --- base/compiler/ssair/ir.jl | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/base/compiler/ssair/ir.jl b/base/compiler/ssair/ir.jl index a427a71c3999a..2f17f29c9db99 100644 --- a/base/compiler/ssair/ir.jl +++ b/base/compiler/ssair/ir.jl @@ -913,9 +913,18 @@ function process_node!(compact::IncrementalCompact, result::Vector{Any}, result[result_idx] = renumber_ssa2!(stmt, ssa_rename, used_ssas, late_fixup, result_idx, do_rename_ssa) result_idx += 1 elseif isa(stmt, PhiNode) - edges = compact.allow_cfg_transforms ? map!(i->compact.bb_rename[i], stmt.edges, stmt.edges) : stmt.edges - result[result_idx] = PhiNode(edges, process_phinode_values(stmt.values, late_fixup, processed_idx, result_idx, ssa_rename, used_ssas, do_rename_ssa)) - result_idx += 1 + values = process_phinode_values(stmt.values, late_fixup, processed_idx, result_idx, ssa_rename, used_ssas, do_rename_ssa) + if length(stmt.edges) == 1 && isassigned(values, 1) && + length(compact.allow_cfg_transforms ? + compact.result_bbs[compact.bb_rename[active_bb]].preds : + compact.ir.cfg.blocks[active_bb].preds) == 1 + # There's only one predecessor left - just replace it + ssa_rename[idx] = values[1] + else + edges = compact.allow_cfg_transforms ? map!(i->compact.bb_rename[i], stmt.edges, stmt.edges) : stmt.edges + result[result_idx] = PhiNode(edges, values) + result_idx += 1 + end elseif isa(stmt, PhiCNode) result[result_idx] = PhiCNode(process_phinode_values(stmt.values, late_fixup, processed_idx, result_idx, ssa_rename, used_ssas, do_rename_ssa)) result_idx += 1