https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111293

--- Comment #4 from Mikael Morin <mikael at gcc dot gnu.org> ---
For what's worth adding -fno-tree-vrp "fixes" this and enables removal of the
call to 'foo' with trunk.

Here is a minimal revert of the regressing revision, but it may just make the
problem latent.

diff --git a/gcc/gimple-range-phi.cc b/gcc/gimple-range-phi.cc
index 01900a35b32..9fa9fe83ce0 100644
--- a/gcc/gimple-range-phi.cc
+++ b/gcc/gimple-range-phi.cc
@@ -386,14 +386,6 @@ phi_analyzer::process_phi (gphi *phi)
                  m_work.safe_push (arg);
                  continue;
                }
-             // More than 2 outside names is too complicated.
-             if (m_num_extern >= 2)
-               {
-                 cycle_p = false;
-                 break;
-               }
-             m_external[m_num_extern] = arg;
-             m_ext_edge[m_num_extern++] = gimple_phi_arg_edge (phi_stmt, x);
            }
          else if (code == INTEGER_CST)
            {
@@ -402,12 +394,15 @@ phi_analyzer::process_phi (gphi *phi)
                                wi::to_wide (arg));
              init_range.union_ (val);
            }
-         else
+         // More than 2 outside names/CONST is too complicated.
+         if (m_num_extern >= 2)
            {
-             // Everything else terminates the cycle.
              cycle_p = false;
              break;
            }
+
+         m_external[m_num_extern] = arg;
+         m_ext_edge[m_num_extern++] = gimple_phi_arg_edge (phi_stmt, x);
        }
     }

Reply via email to