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

/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-options "-mvsx -O2" } */

#include <altivec.h>

#define BUILD_VAR_TEST(TESTNAME1, RETTYPE, VAR_OFFSET, LOADFROM)\
RETTYPE								\
TESTNAME1 ## _var (VAR_OFFSET offset, LOADFROM * loadfrom) 		\
{								\
	return __builtin_vec_xl (offset, loadfrom);		\
}

#define BUILD_CST_TEST(TESTNAME1, RETTYPE, CST_OFFSET, LOADFROM)	\
RETTYPE								\
TESTNAME1 ## _cst (LOADFROM * loadfrom) 				\
{								\
	return __builtin_vec_xl (CST_OFFSET, loadfrom);		\
}

BUILD_VAR_TEST( test1, vector signed char,   signed long long, signed char);
BUILD_VAR_TEST( test2, vector signed char,   signed int, signed char);
BUILD_CST_TEST( test3, vector signed char,   2, signed char);

BUILD_VAR_TEST( test4, vector unsigned char, signed long long, unsigned char);
BUILD_VAR_TEST( test5 ,vector unsigned char, signed int, unsigned char);
BUILD_CST_TEST( test6, vector unsigned char, 4, unsigned char);

BUILD_VAR_TEST( test7, vector signed char,   signed long long, vector signed char);
BUILD_VAR_TEST( test8, vector signed char,   signed int, vector signed char);
BUILD_CST_TEST( test9, vector signed char,   6, vector signed char);

BUILD_VAR_TEST( test10, vector unsigned char, signed long long, vector unsigned char);
BUILD_VAR_TEST( test11, vector unsigned char, signed int, vector unsigned char);
BUILD_CST_TEST( test12, vector unsigned char, 8, vector unsigned char);

/* { dg-final { scan-assembler-times {\mlxvw4x\M|\mlxvd2x\M|\mlxvx\M|\mp?lxv\M|\mlvx\M} 12 } } */
