As per the API, and the original documentation to value_range, VR_UNDEFINED and VR_VARYING should never have equivalences. However, equiv_add is tacking on equivalences blindly, and there are various regressions that happen if I fix this oversight.

void
value_range::equiv_add (const_tree var,
                        const value_range *var_vr,
                        bitmap_obstack *obstack)
{
  if (!m_equiv)
    m_equiv = BITMAP_ALLOC (obstack);
  unsigned ver = SSA_NAME_VERSION (var);
  bitmap_set_bit (m_equiv, ver);
  if (var_vr && var_vr->m_equiv)
    bitmap_ior_into (m_equiv, var_vr->m_equiv);
}

Is this a bug in the documentation / API, or is equiv_add incorrect and we should fix the fall-out elsewhere?

Thanks.
Aldy

Reply via email to