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

Reply via email to