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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2015-05-04
             Blocks|                            |53947
     Ever confirmed|0                           |1

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
  prephitmp_61 = _53 <= 65535 ? pretmp_60 : -32768;

is

     unsigned int <= 65535 ? short int : short int;

pushing the condition to a separate stmt might get us to support this
"narrowing" conversion.

Of course ifcvt does a pretty poor job on this as well...

We do vectorize

    for (int i=0; i<n; ++i) {
        int wt=w[i]+((t[i]*err*2>>16)+1>>1);
        if (wt<-32768) wt=-32768;
//      if (wt>32767) wt=32767;
        w[i]=wt;
    }

as if (wt<-32768) wt=-32768; becomes a MAX_EXPR.  Also if I change it to

    for (int i=0; i<n; ++i) {
        int wt=w[i]+((t[i]*err*2>>16)+1>>1);
        if (wt<-32768) wt=-32768;
        else if (wt>32767) wt=32767;
        w[i]=wt;
    }

we vectorize it as MIN/MAX_EXPRs.

Maybe you can perform this source change manually and see what it does
to performance.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53947
[Bug 53947] [meta-bug] vectorizer missed-optimizations

Reply via email to