https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108819
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|13.0 |12.3 Status|UNCONFIRMED |NEW Summary|[13 Regression] ICE on |[12/13 Regression] ICE on |valid code at -O1 with |valid code at -O1 with |"-fno-tree-ccp |"-fno-tree-ccp |-fno-tree-forwprop" on |-fno-tree-forwprop" on |x86_64-linux-gnu: tree |x86_64-linux-gnu: tree |check: expected ssa_name, |check: expected ssa_name, |have integer_cst in |have integer_cst in |number_of_iterations_cltz, |number_of_iterations_cltz, |at |at |tree-ssa-loop-niter.cc:2394 |tree-ssa-loop-niter.cc:2394 Last reconfirmed| |2023-02-16 Known to work| |11.1.0, 11.3.0 Ever confirmed|0 |1 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- _7 = 1 & 1; That I think is wrong but I think the problem is before ivcanon and it was latent in GCC 12 even. reassoc1 produces: <bb 4> [local count: 114863530]: _20 = a.0_1 == 0; _21 = a.0_1 > 0; _7 = 1 & 1; if (_7 != 0) goto <bb 5>; [89.30%] else goto <bb 6>; [10.70%] From: <bb 4> [local count: 114863530]: _20 = a.0_1 == 0; _21 = a.0_1 > 0; _22 = _20 & _21; if (_22 != 0) goto <bb 5>; [89.30%] else goto <bb 6>; [10.70%] All it has: Optimizing range tests a.0_1 -[, 0] and +[, 0] and +[0, 0] into 0 GCC 11 looks ok though: From: a.0_1 = a; if (a.0_1 <= 0) goto <bb 4>; [20.45%] else goto <bb 6>; [79.55%] <bb 4> [local count: 114863530]: _20 = a.0_1 == 0; _21 = a.0_1 > 0; _22 = _20 & _21; if (_22 != 0) goto <bb 5>; [89.30%] else goto <bb 6>; [10.70%] to: a.0_1 = a; _20 = a.0_1 == 0; _16 = 0; _21 = a.0_1 > 0; _7 = 1 & _16; if (_7 != 0) goto <bb 4>; [89.30%] else goto <bb 5>; [10.70%] So I am going to declare this as a latent bug (which the verifiers don't catch either ...).