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 ...).