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

Andrew Macleod <amacleod at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |aldyh at gcc dot gnu.org

--- Comment #3 from Andrew Macleod <amacleod at redhat dot com> ---
The new relation code is dominance based,  in the interest of efficiency, it
can currently miss the odd equivalence if things are processed in a
non-dominance order.

Its not incorrect, it just may lead to a missed opportunity.

This testcase triggers an assert which checks for this situation.  There are
numerous UNDEFINED values, and we end up register an equivalences:

 Registering value_relation (Error_18 == _4) (bb4) at Error_18 = _4 + Error_13;
 Registering value_relation (Error_13 == _4) (bb2) at Error_13 = _4 + Error_9;

Not we register the bb4 equivalence first,  and then alter register the one in
bb2.

As a result, we don't currently update post dominated blocks, so we dont
combine these into Error_18, Error_13 and _4 in bb4.
When we later check for an equivalence between we detect this anomaly.
There is nothing incorrect in allowing it, and we'll do so for now.  
Eventually, when its flushed out better, we'll change this back to an assert.

Reply via email to