/* Verify that overloaded built-ins for __builtin_vec_xl with double
   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 double, signed long long, double);
BUILD_VAR_TEST( test2, vector double, signed int, double);
BUILD_CST_TEST( test3, vector double, 12, double);

BUILD_VAR_TEST( test4, vector double, signed long long, vector double);
BUILD_VAR_TEST( test5, vector double, signed int, vector double);
BUILD_CST_TEST( test6, vector double, 12, vector double);

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