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

Andrew Macleod <amacleod at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |amacleod at redhat dot com

--- Comment #3 from Andrew Macleod <amacleod at redhat dot com> ---
Although we are now adding relations for these expressions, onc extension we
have not gotten to apply ranges of relations. ie:


    <bb 2> :
    _1 = j_5(D) > i_6(D);
    _2 = i_6(D) > 100;
    _3 = _1 | _2;
    if (_3 != 0)
      goto <bb 3>; [INV]
    else
      goto <bb 4>; [INV]

2->3  (T) _3 :  bool [1, 1]
2->4  (F) _1 :  bool [0, 0]
2->4  (F) _2 :  bool [0, 0]
2->4  (F) _3 :  bool [0, 0]
2->4  (F) i_6(D) :      int [-INF, 100]

Relational : (j_5(D) <= i_6(D))
    <bb 4> :
    if (j_5(D) > 100)
      goto <bb 5>; [INV]
    else
      goto <bb 6>; [INV]

4->5  (T) j_5(D) :      int [101, +INF]
4->6  (F) j_5(D) :      int [-INF, 100]

We know that j_5 is <= i_6 on the edge 2->4, but we do not apply any known
range of i_6 to j_5.

We do transitive between symbolics, ie (j < x &&  x < y means j < y)
We do not yet do that with a range as this requires. ie:
  j_5 <= i_6,  i_6 <= 100  means j <= 100

This will be an enhancement for the next release.

Reply via email to