This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/64031] (un-)conditional execution state is not preserved by PRE/sink


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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |missed-optimization
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2014-11-24
             Blocks|                            |53947
            Summary|Vectorization of max/min is |(un-)conditional execution
                   |not robust enough           |state is not preserved by
                   |                            |PRE/sink
     Ever confirmed|0                           |1

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
The issue is that PRE optimizes this to

  f2_11 = f2_10 * f2_10;
  if (f2_10 < f2_11)
    goto <bb 5>;
  else
    goto <bb 4>;

  <bb 4>:
  pretmp_25 = f2_11 * f2_11;

  <bb 5>:
  # prephitmp_26 = PHI <f2_11(3), pretmp_25(4)>
  *_9 = prephitmp_26;

and f2_11 * f2_11 may trap thus ifcvt refuses to execute it unconditionally
(but only PRE made it executed conditionally).

Thus "confirmed" that both PRE and code sinking can make stmts executed
conditionally while they were not so before which can pessimize transforms
done by later passes such as LIM and if-conversion.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]