https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98357
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |ebotcazou at gcc dot gnu.org
Ever confirmed|0 |1
Blocks| |85316
Status|UNCONFIRMED |NEW
Keywords| |missed-optimization
Component|middle-end |tree-optimization
Last reconfirmed| |2021-01-05
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
So VRP computes
Visiting conditional with predicate: if (len_13 > j_14)
With known ranges
len_13: size_t [i_6(D) + 1, +INF] EQUIVALENCES: { len_7(D) } (1
elements) j_14: long unsigned int [0, i_6(D)] EQUIVALENCES: { j_8(D) } (1
elements)
Predicate evaluates to: DON'T KNOW
where I guess the issue is that we assume i_6(D) + 1 may overflow to zero
(the [i_6(D) + 1, +INF] range is computed from len_7(D) > i_6(D) where
we _know_ that i_6(D) + 1 cannot overflow.
The representation of symbolic relations as ranges makes things awkward
(we for sure cannot generally assume i_6(D) + 1 cannot overflow). We
could possibly mark ranges as originally derived to not have overflowing
bound computations somehow (maybe with a flag in on value-range).
symbolic range VRP is most important for Ada so CCing Eric
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85316
[Bug 85316] [meta-bug] VRP range propagation missed cases