1  /* Verify that overloaded built-ins for vec_mergee and vec_mergeo
       2   with float and double inputs produce the right codegen.  */
       3  
       4  /* { dg-do compile } */
       5  /* { dg-require-effective-target powerpc_p8vector_ok } */
       6  /* { dg-options "-mdejagnu-cpu=power8 -mpower8-vector " } */
       7  
       8  #include <altivec.h>
       9  
      10  /*
      11  	vector float foo = vec_mergee (vector float, vector float);
      12  	vector float foo = vec_mergeo (vector float, vector float);
      13  	vector double foo = vec_mergee (vector double , vector double);
      14  	vector double foo = vec_mergeo (vector double , vector double);
      15  */
      16  
      17  vector float
      18  testf_ee (vector float vf1, vector float vf2)
      19  {
      20    return vec_mergee (vf1, vf2);
      21  }
      22  
      23  vector float
      24  testf_eo (vector float vf1, vector float vf2)
      25  {
      26    return vec_mergeo (vf1, vf2);
      27  }
      28  
      29  vector double
      30  testd_ee ( vector double vd1, vector double vd2)
      31  {
      32    return vec_mergee (vd1, vd2);
      33  }
      34  
      35  vector double
      36  testd_eo ( vector double vd1, vector double vd2)
      37  {
      38    return vec_mergeo (vd1, vd2);
      39  }
      40  /* Doubles will generate vmrg*w instructions.  */
      41  /* { dg-final { scan-assembler-times "vmrgow" 1 } } */
      42  /* { dg-final { scan-assembler-times "vmrgew" 1 } } */
      43  /* Floats will generate some number of xxpermdi instructions.  Ensure we get at least one. */
      44  /* { dg-final { scan-assembler "xxpermdi" } } */
      45