1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -fno-tree-vectorize" } */
       3  
       4  typedef long long v2di __attribute__ ((vector_size (16)));
       5  typedef double v2df __attribute__ ((vector_size (16)));
       6  
       7  void
       8  construct_lane_1 (double *y, v2df *z)
       9  {
      10    double y0 = y[0] + 1;
      11    double y1 = y[1] + 2;
      12    v2df x = {y0, y1};
      13    z[2] = x;
      14  }
      15  
      16  void
      17  construct_lane_2 (long long *y, v2di *z)
      18  {
      19    long long y0 = y[0] + 1;
      20    long long y1 = y[1] + 2;
      21    v2di x = {y0, y1};
      22    z[2] = x;
      23  }
      24  
      25  void
      26  construct_lane_3 (double **py, v2df **pz)
      27  {
      28    double *y = *py;
      29    v2df *z = *pz;
      30    double y0 = y[0] + 1;
      31    double y1 = y[1] + 2;
      32    v2df x = {y0, y1};
      33    z[2] = x;
      34  }
      35  
      36  void
      37  construct_lane_4 (long long **py, v2di **pz)
      38  {
      39    long long *y = *py;
      40    v2di *z = *pz;
      41    long long y0 = y[0] + 1;
      42    long long y1 = y[1] + 2;
      43    v2di x = {y0, y1};
      44    z[2] = x;
      45  }
      46  
      47  /* We can use the load_pair_lanes<mode> pattern to vec_concat two DI/DF
      48     values from consecutive memory into a 2-element vector by using
      49     a Q-reg LDR.  */
      50  
      51  /* { dg-final { scan-assembler-times "stp\td\[0-9\]+, d\[0-9\]+" 2 } } */
      52  /* { dg-final { scan-assembler-times "stp\tx\[0-9\]+, x\[0-9\]+" 2 } } */
      53  /* { dg-final { scan-assembler-not "ins\t" } } */