1  /* { dg-do compile } */
       2  /* { dg-options "-mavx512bw -mavx512vbmi -O2" } */
       3  /* { dg-final { scan-assembler-times {(?n)vmov[a-z0-9]*[ \t]*%ymm[0-9]} 12} } */
       4  /* { dg-final { scan-assembler-not "pxor" } } */
       5  
       6  
       7  typedef float v16sf __attribute__((vector_size(64)));
       8  typedef double v8df __attribute__ ((vector_size (64)));
       9  typedef long long v8di __attribute__((vector_size(64)));
      10  typedef int v16si __attribute__((vector_size(64)));
      11  typedef short v32hi __attribute__ ((vector_size (64)));
      12  typedef char v64qi __attribute__ ((vector_size (64)));
      13  
      14  v8df
      15  foo_v8df (v8df x)
      16  {
      17    return __builtin_shuffle (x, (v8df) { 0, 0, 0, 0, 0, 0, 0, 0 },
      18  			    (v8di) { 0, 1, 2, 3, 15, 14, 10, 11 });
      19  }
      20  
      21  v8df
      22  foo_v8df_l (v8df x)
      23  {
      24    return __builtin_shuffle ((v8df) { 0, 0, 0, 0, 0, 0, 0, 0 }, x,
      25  			    (v8di) { 8, 9, 10, 11, 0, 1, 2, 3 });
      26  }
      27  
      28  v8di
      29  foo_v8di (v8di x)
      30  {
      31    return __builtin_shuffle (x, (v8di) { 0, 0, 0, 0, 0, 0, 0, 0 },
      32  			    (v8di) { 0, 1, 2, 3, 8, 9, 10, 11 });
      33  }
      34  
      35  v8di
      36  foo_v8di_l (v8di x)
      37  {
      38    return __builtin_shuffle ((v8di) { 0, 0, 0, 0, 0, 0, 0, 0 }, x,
      39  			    (v8di) { 8, 9, 10, 11, 7, 6, 5, 4 });
      40  }
      41  
      42  v16sf
      43  foo_v16sf (v16sf x)
      44  {
      45    return __builtin_shuffle (x, (v16sf)  { 0, 0, 0, 0, 0, 0, 0, 0,
      46  					   0, 0, 0, 0, 0, 0, 0, 0 },
      47  			       (v16si) { 0, 1, 2, 3, 4, 5, 6, 7,
      48  					 16, 17, 18, 19, 20, 21, 22, 23 });
      49  }
      50  
      51  v16sf
      52  foo_v16sf_l (v16sf x)
      53  {
      54    return __builtin_shuffle ((v16sf)  { 0, 0, 0, 0, 0, 0, 0, 0,
      55  				       0, 0, 0, 0, 0, 0, 0, 0 }, x,
      56  			    (v16si) { 16, 17, 18, 19, 20, 21, 22, 23,
      57  				      0, 15, 2, 13, 4, 11, 6, 9 });
      58  }
      59  
      60  v16si
      61  foo_v16si (v16si x)
      62  {
      63      return __builtin_shuffle (x, (v16si)  { 0, 0, 0, 0, 0, 0, 0, 0,
      64  					   0, 0, 0, 0, 0, 0, 0, 0 },
      65  			       (v16si) { 0, 1, 2, 3, 4, 5, 6, 7,
      66  					 31, 30, 29, 28, 20, 21, 22, 23 });
      67  }
      68  
      69  v16si
      70  foo_v16si_l (v16si x)
      71  {
      72      return __builtin_shuffle ((v16si)  { 0, 0, 0, 0, 0, 0, 0, 0,
      73  					 0, 0, 0, 0, 0, 0, 0, 0 }, x,
      74  			      (v16si) { 16, 17, 18, 19, 20, 21, 22, 23,
      75  					15, 0, 13, 2, 11, 4, 9, 6 });
      76  }
      77  
      78  v32hi
      79  foo_v32hi (v32hi x)
      80  {
      81    return __builtin_shuffle (x, (v32hi) { 0, 0, 0, 0, 0, 0, 0, 0,
      82  					 0, 0, 0, 0, 0, 0, 0, 0,
      83  					 0, 0, 0, 0, 0, 0, 0, 0,
      84  					 0, 0, 0, 0, 0, 0, 0, 0 },
      85  			       (v32hi) { 0, 1, 2, 3, 4, 5, 6, 7,
      86  					 8, 9, 10, 11, 12, 13, 14, 15,
      87  					 63, 33, 61, 35, 59, 37, 57, 39,
      88  					 55, 41, 53, 43, 51, 45, 49, 47 });
      89  }
      90  
      91  v32hi
      92  foo_v32hi_l (v32hi x)
      93  {
      94    return __builtin_shuffle ((v32hi) { 0, 0, 0, 0, 0, 0, 0, 0,
      95  				       0, 0, 0, 0, 0, 0, 0, 0,
      96  				       0, 0, 0, 0, 0, 0, 0, 0,
      97  				       0, 0, 0, 0, 0, 0, 0, 0 }, x,
      98  			       (v32hi) { 32, 33, 34, 35, 36, 37, 38, 39,
      99  					 40, 41, 42, 43, 44, 45, 46, 47,
     100  					 31, 0, 29, 2, 27, 4, 25, 6,
     101  					 23, 8, 21, 10, 19, 12, 17, 14 });
     102  }
     103  
     104  v64qi
     105  foo_v64qi (v64qi x)
     106  {
     107    return __builtin_shuffle (x, (v64qi) { 0, 0, 0, 0, 0, 0, 0, 0,
     108  					 0, 0, 0, 0, 0, 0, 0, 0,
     109  					 0, 0, 0, 0, 0, 0, 0, 0,
     110  					 0, 0, 0, 0, 0, 0, 0, 0,
     111  					 0, 0, 0, 0, 0, 0, 0, 0,
     112  					 0, 0, 0, 0, 0, 0, 0, 0,
     113  					 0, 0, 0, 0, 0, 0, 0, 0,
     114  					 0, 0, 0, 0, 0, 0, 0, 0 },
     115  			       (v64qi) {0, 1, 2, 3, 4, 5, 6, 7,
     116  					  8, 9, 10, 11, 12, 13, 14, 15,
     117  					  16, 17, 18, 19, 20, 21, 22, 23,
     118  					  24, 25, 26, 27, 28, 29, 30, 31,
     119  					  64, 127, 66, 125, 68, 123, 70, 121,
     120  					  72, 119, 74, 117, 76, 115, 78, 113,
     121  					  80, 111, 82, 109, 84, 107, 86, 105,
     122  					  88, 103, 90, 101, 92, 99, 94, 97 });
     123  }
     124  
     125  v64qi
     126  foo_v64qi_l (v64qi x)
     127  {
     128    return __builtin_shuffle ((v64qi) { 0, 0, 0, 0, 0, 0, 0, 0,
     129  				      0, 0, 0, 0, 0, 0, 0, 0,
     130  				      0, 0, 0, 0, 0, 0, 0, 0,
     131  				      0, 0, 0, 0, 0, 0, 0, 0,
     132  				      0, 0, 0, 0, 0, 0, 0, 0,
     133  				      0, 0, 0, 0, 0, 0, 0, 0,
     134  				      0, 0, 0, 0, 0, 0, 0, 0,
     135  				      0, 0, 0, 0, 0, 0, 0, 0 }, x,
     136  			    (v64qi) { 64, 65, 66, 67, 68, 69, 70, 71,
     137  				      72, 73, 74, 75, 76, 77, 78, 79,
     138  				      80, 81, 82, 83, 84, 85, 86, 87,
     139  				      88, 89, 90, 91, 92, 93, 94, 95,
     140  				      0, 63, 2, 61, 4, 59, 6, 57,
     141  				      8, 55, 10, 53, 12, 51, 14, 49,
     142  				      16, 47, 18, 45, 20, 43, 22, 41,
     143  				      24, 39, 26, 37, 28, 35, 30, 33 });
     144  }