/* Verify that overloaded built-ins for vec_splat with char
   inputs produce the right code.  */

/* { dg-do compile } */
/* { dg-require-effective-target powerpc_altivec_ok } */
/* { dg-options "-maltivec -O2" } */

#include <altivec.h>

vector bool char testb_0  (vector bool char x) { return vec_splat (x, 0b00000); }
vector bool char testb_1  (vector bool char x) { return vec_splat (x, 0b00001); }
vector bool char testb_2  (vector bool char x) { return vec_splat (x, 0b00010); }
vector bool char testb_4  (vector bool char x) { return vec_splat (x, 0b00100); }
vector bool char testb_8  (vector bool char x) { return vec_splat (x, 0b01000); }

vector signed char tests_0  (vector signed char x) { return vec_splat (x, 0b00000); }
vector signed char tests_1  (vector signed char x) { return vec_splat (x, 0b00001); }
vector signed char tests_2  (vector signed char x) { return vec_splat (x, 0b00010); }
vector signed char tests_4  (vector signed char x) { return vec_splat (x, 0b00100); }
vector signed char tests_8  (vector signed char x) { return vec_splat (x, 0b01000); }

vector unsigned char testu_0  (vector unsigned char x) { return vec_splat (x, 0b00000); }
vector unsigned char testu_1  (vector unsigned char x) { return vec_splat (x, 0b00001); }
vector unsigned char testu_2  (vector unsigned char x) { return vec_splat (x, 0b00010); }
vector unsigned char testu_4  (vector unsigned char x) { return vec_splat (x, 0b00100); }
vector unsigned char testu_8  (vector unsigned char x) { return vec_splat (x, 0b01000); }

/* Similar tests as above, but the source vector is a known constant. */
const vector bool char by = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p'};
const vector signed char sy = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p'};
const vector unsigned char uy = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p'};

vector bool char test_bc (vector bool char x) { return vec_splat (by, 0b00010); }
vector signed char test_sc (vector signed char x) { return vec_splat (sy, 0b00011); }
vector unsigned char test_uc (vector unsigned char x) { return vec_splat (uy, 0b00110); }

// vec_splat() using variable vectors should generate the vspltb instruction.
/* { dg-final { scan-assembler-times "vspltb" 15 } } */
// vec_splat() using a constant vector will generate a load or a splat immediate byte.
/* { dg-final { scan-assembler-times {\mlvx\M|\mlxvw4x\M|\mxxspltib\M} 3 } } */
