1  /* { dg-do compile } */
       2  /* { dg-options "-msse2 -mno-sse4.1 -O2" } */
       3  /* { dg-final { scan-assembler-times {(?n)(?:mov|psrldq).*%xmm[0-9]} 12 } } */
       4  /* { dg-final { scan-assembler-not "pxor" } } */
       5  
       6  typedef float v4sf __attribute__((vector_size(16)));
       7  typedef double v2df __attribute__ ((vector_size (16)));
       8  typedef long long v2di __attribute__((vector_size(16)));
       9  typedef int v4si __attribute__((vector_size(16)));
      10  typedef short v8hi __attribute__ ((vector_size (16)));
      11  typedef char v16qi __attribute__ ((vector_size (16)));
      12  
      13  v2df
      14  foo_v2df (v2df x)
      15  {
      16    return __builtin_shuffle (x, (v2df) { 0, 0 }, (v2di) {0, 2});
      17  }
      18  
      19  v2df
      20  foo_v2df_l (v2df x)
      21  {
      22    return __builtin_shuffle ((v2df) { 0, 0 }, x, (v2di) {3, 1});
      23  }
      24  
      25  v2di
      26  foo_v2di (v2di x)
      27  {
      28    return __builtin_shuffle (x, (v2di) { 0, 0 }, (v2di) {0, 3});
      29  }
      30  
      31  v2di
      32  foo_v2di_l (v2di x)
      33  {
      34    return __builtin_shuffle ((v2di) { 0, 0 }, x, (v2di) {3, 0});
      35  }
      36  
      37  v4sf
      38  foo_v4sf (v4sf x)
      39  {
      40    return __builtin_shuffle (x, (v4sf) { 0, 0, 0, 0 }, (v4si) {0, 1, 4, 5});
      41  }
      42  
      43  v4sf
      44  foo_v4sf_l (v4sf x)
      45  {
      46    return __builtin_shuffle ((v4sf) { 0, 0, 0, 0 }, x, (v4si) {4, 5, 3, 1});
      47  }
      48  
      49  v4si
      50  foo_v4si (v4si x)
      51  {
      52    return __builtin_shuffle (x, (v4si) { 0, 0, 0, 0 }, (v4si) {0, 1, 6, 7});
      53  }
      54  
      55  v4si
      56  foo_v4si_l (v4si x)
      57  {
      58    return __builtin_shuffle ((v4si) { 0, 0, 0, 0 }, x, (v4si) {4, 5, 1, 2});
      59  }
      60  
      61  v8hi
      62  foo_v8hi (v8hi x)
      63  {
      64    return __builtin_shuffle (x, (v8hi) { 0, 0, 0, 0, 0, 0, 0, 0 },
      65  			       (v8hi) { 0, 1, 2, 3, 8, 12, 10, 13 });
      66  }
      67  
      68  v8hi
      69  foo_v8hi_l (v8hi x)
      70  {
      71    return __builtin_shuffle ((v8hi) { 0, 0, 0, 0, 0, 0, 0, 0 }, x,
      72  			    (v8hi) { 8, 9, 10, 11, 7, 6, 5, 4 });
      73  }
      74  
      75  v16qi
      76  foo_v16qi (v16qi x)
      77  {
      78    return __builtin_shuffle (x, (v16qi) { 0, 0, 0, 0, 0, 0, 0, 0,
      79  					 0, 0, 0, 0, 0, 0, 0, 0 },
      80  			       (v16qi) {0, 1, 2, 3, 4, 5, 6, 7,
      81  					16, 24, 18, 26, 20, 28, 22, 30 });
      82  }
      83  
      84  v16qi
      85  foo_v16qi_l (v16qi x)
      86  {
      87    return __builtin_shuffle ((v16qi) { 0, 0, 0, 0, 0, 0, 0, 0,
      88  				       0, 0, 0, 0, 0, 0, 0, 0 }, x,
      89  			    (v16qi) { 16, 17, 18, 19, 20, 21, 22, 23,
      90  				      15, 0, 13, 2, 11, 4, 9, 6 });
      91  }