https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96344

Eric Botcazou <ebotcazou at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|3rdd case of                |3rdd case of
                   |gnat.dg/opt86a.adb fails    |gnat.dg/opt86a.adb fails
                   |                            |because of VRP
          Component|ada                         |tree-optimization

--- Comment #3 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
The difference is that, on x86-64, the third case is preoptimized (.dse2):

  <bb 18> [local count: 1072024872]:
  system.secondary_stack.ss_release (&FRAME.22.M12b);
  _6 = s3_35 == 1;
  _7 = s3_35 == 4;
  _8 = _6 | _7;
  _57 = s3_35 == 8;
  _56 = _8 | _57;
  if (_56 != 0)
    goto <bb 19>; [0.08%]
  else
    goto <bb 20>; [99.92%]

whereas it is not on PowerPC64:

  <bb 18> [local count: 1072024872]:
  system.secondary_stack.ss_release (&FRAME.22.M12b);
  if (_31 == 1)
    goto <bb 21>; [0.04%]
  else
    goto <bb 19>; [99.96%]

  <bb 19> [local count: 1071596063]:
  if (s3_32 == 4)
    goto <bb 21>; [0.04%]
  else
    goto <bb 20>; [99.96%]

  <bb 20> [local count: 1071167425]:
  if (s3_32 == 8)
    goto <bb 21>; [0.04%]
  else
    goto <bb 22>; [99.96%]

Note the _31 in the first arm instead of s3_32: VRP1 has propagated

s3_32 = (opt86_pkg__enum) _31;

into the first arm but not the others...  So -fno-tree-vrp is a workaround.

Reply via email to