https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95408
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Assignee|unassigned at gcc dot gnu.org |pinskia at gcc dot gnu.org Last reconfirmed| |2023-05-13 Status|UNCONFIRMED |ASSIGNED --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- For unsigned x (to simplify things first). In forwardprop4 we have _1 = x_4(D) <= 121211; _3 = _1 ? x_4(D) : 0; _5 = _3 != 0; This could be done as: x_4(D) <= 121211 ? x_4(D) != 0 : 0 Which then would be: (x_4(D) <= 121211 & x_4(D) != 0) ((x_4(D) - 1) <= 121210) So I have a patch which does the second step into the 3rd expression (there is another bug or 2 about it). the 3rd expression into the final is already done. It is just the first that needs to happen to written up. Something like this for the first step. (for op (tcc_comparison) /* (c ? a : CST0) op CST1 --> c ? (a op CST1) : (CST0 op CST1) */ (simplify (op (cond:s @0 @1 CONSTANT_CLASS_P@2) CONSTANT_CLASS_P@3) (cond! @0 (op @1 @3) (op @2 @4))) So mine.