From 264f061997c0a5349cdce6d73f0dc167ac7fc8f4 Mon Sep 17 00:00:00 2001 From: Aldy Hernandez Date: Fri, 12 Nov 2021 16:08:01 +0100 Subject: [PATCH] path solver: Solve PHI imports first for ranges. PHIs must be resolved first while solving ranges in a block, regardless of where they appear in the import bitmap. We went through a similar exercise for the relational code, but missed these. Tested on x86-64 & ppc64le Linux. gcc/ChangeLog: PR tree-optimization/103202 * gimple-range-path.cc (path_range_query::compute_ranges_in_block): Solve PHI imports first. --- gcc/gimple-range-path.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/gcc/gimple-range-path.cc b/gcc/gimple-range-path.cc index b9aceaf2565..71b290434cb 100644 --- a/gcc/gimple-range-path.cc +++ b/gcc/gimple-range-path.cc @@ -365,12 +365,23 @@ path_range_query::compute_ranges_in_block (basic_block bb) clear_cache (name); } - // Solve imports defined in this block. + // Solve imports defined in this block, starting with the PHIs... + for (gphi_iterator iter = gsi_start_phis (bb); !gsi_end_p (iter); + gsi_next (&iter)) + { + gphi *phi = iter.phi (); + tree name = gimple_phi_result (phi); + + if (import_p (name) && range_defined_in_block (r, name, bb)) + set_cache (r, name); + } + // ...and then the rest of the imports. EXECUTE_IF_SET_IN_BITMAP (m_imports, 0, i, bi) { tree name = ssa_name (i); - if (range_defined_in_block (r, name, bb)) + if (gimple_code (SSA_NAME_DEF_STMT (name)) != GIMPLE_PHI + && range_defined_in_block (r, name, bb)) set_cache (r, name); }