https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110131
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- So the biggest issue here is: Global Exported: _37 = [irange] unsigned int [0, 0][3, 32768][4294934529, +INF] Not folded Folding statement: _21 = _37 <= 2; _21 not being folded into _21 = _37 == 0 That is for: ``` bool g(); bool f1(unsigned t) { if ((t + 1) < 2 || t > 2000) return (t < 3); return g(); } bool f(unsigned t) { if ((t + 1) < 2 || t > 2000) return t == 0; return g(); } ``` These two functions should have the same assembly code (for the above case, it is not as important but for other cases it might be like in this one). The other part of the issue I can fix if someone handles the VRP part.