[PATCH] [CodeGen] Combine shuffle from concat+bitcast scalar to avoid the smaller vector type.

Chandler Carruth chandlerc at gmail.com
Wed Apr 8 19:42:37 PDT 2015


In http://reviews.llvm.org/D8884#153590, @ab wrote:

> In http://reviews.llvm.org/D8884#153454, @RKSimon wrote:
>
> > In http://reviews.llvm.org/D8884#153312, @ab wrote:
> >
> > > Yes, but there's other combines that can get in the way.  For instance, my go-to example is the _dup testcase, which we'll try to turn into just (concat_vectors (bitcast (i16)), (bitcast (i16)), ...), which, when promoted, gets scalarized, and we never recover from that.  On X86 we do, that's the part I still need to look into.
> >
> >
> > Have you looked at generalizing the visitCONCAT_VECTOR code to create SCALAR_TO_VECTOR or BUILD_VECTOR depending on the contents of the operands? At the moment the SCALAR_TO_VECTOR and BUILD_VECTOR cases are treated separately but it should be pretty easy to merge - see http://reviews.llvm.org/D7816.
>
>
> Now that I look at this again, it seems to me that for the concat problem, a cleaner solution would be to combine (only when the intermediate type is illegal, perhaps?):
>
>   (v8i8 concat_vectors (v2i8 bitcast (i16)) x4)
>
> into:
>
>   (v8i8 (bitcast (v4i16 BUILD_VECTOR (i16) x4)))
>   
>
> Is that what you're proposing?
>
> -Ahmed


FWIW, this is what I think makes far and away the most sense. We should definitely prefer a build_vector of scalars over concat_vector of bitcasts of scalars.


http://reviews.llvm.org/D8884

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/






More information about the llvm-commits mailing list