1  /* Verify that overloaded built-ins for vec_merge* with char
       2     inputs produce the right code.  */
       3  
       4  /* { dg-do compile } */
       5  /* { dg-require-effective-target powerpc_altivec_ok } */
       6  /* { dg-options "-maltivec -O2" } */
       7  
       8  #include <altivec.h>
       9  
      10  vector signed char 
      11  test_misc () {
      12  	vector signed char vsc1c = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
      13  	vector signed char vsc2c = {9,10,11,12,13,14,15,16,0,1,2,3,4,5,6,7};
      14  	return vec_mergel (vsc1c, vsc2c);
      15  }
      16  
      17  vector bool char
      18  testbc_l (vector bool char vbc2, vector bool char vbc3)
      19  {
      20    return vec_mergel (vbc2, vbc3);
      21  }
      22  
      23  vector signed char
      24  testsc_l (vector signed char vsc2, vector signed char vsc3)
      25  {
      26    return vec_mergel (vsc2, vsc3);
      27  }
      28  
      29  vector unsigned char
      30  testuc_l (vector unsigned char vuc2, vector unsigned char vuc3)
      31  {
      32    return vec_mergel (vuc2, vuc3);
      33  }
      34  
      35  vector bool char
      36  testbc_h (vector bool char vbc2, vector bool char vbc3)
      37  {
      38    return vec_mergeh (vbc2, vbc3);
      39  }
      40  
      41  vector signed char
      42  testsc_h (vector signed char vsc2, vector signed char vsc3)
      43  {
      44    return vec_mergeh (vsc2, vsc3);
      45  }
      46  
      47  vector unsigned char
      48  testuc_h (vector unsigned char vuc2, vector unsigned char vuc3)
      49  {
      50    return vec_mergeh (vuc2, vuc3);
      51  }
      52  
      53  /* { dg-final { scan-assembler-times "vmrghb" 3 } } */
      54  /* { dg-final { scan-assembler-times "vmrglb" 3 } } */
      55