blob: 262f1a1c31b6b4f5b74d7b9562b99cef437d9080 [file] [log] [blame]
/* { dg-do compile } */
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-options "-mvsx -O2 -fdump-tree-gimple" } */
/* Verify that overloaded built-ins for "and", "andc", "nor", "or" and "xor"
do not produce VIEW_CONVERT_EXPR operations on their operands. Like so:
_1 = VIEW_CONVERT_EXPR<__vector signed int>(x);
_2 = VIEW_CONVERT_EXPR<__vector signed int>(y);
_3 = __builtin_altivec_vand (_1, _2);
D.3245 = VIEW_CONVERT_EXPR<bcvec_t>(_3);
*/
typedef __attribute__((altivec(vector__))) __attribute__((altivec(bool__))) char bcvec_t;
typedef __attribute__((altivec(vector__))) signed char scvec_t;
typedef __attribute__((altivec(vector__))) unsigned char ucvec_t;
typedef __attribute__((altivec(vector__))) __attribute__((altivec(bool__))) short bsvec_t;
typedef __attribute__((altivec(vector__))) signed short ssvec_t;
typedef __attribute__((altivec(vector__))) unsigned short usvec_t;
typedef __attribute__((altivec(vector__))) __attribute__((altivec(bool__))) int bivec_t;
typedef __attribute__((altivec(vector__))) signed int sivec_t;
typedef __attribute__((altivec(vector__))) unsigned int uivec_t;
typedef __attribute__((altivec(vector__))) __attribute__((altivec(bool__))) long long bllvec_t;
typedef __attribute__((altivec(vector__))) signed long long sllvec_t;
typedef __attribute__((altivec(vector__))) unsigned long long ullvec_t;
typedef __attribute__((altivec(vector__))) double dvec_t;
typedef __attribute__((altivec(vector__))) float fvec_t;
bcvec_t
and_0 (bcvec_t x, bcvec_t y)
{
return __builtin_vec_and (x, y);
}
scvec_t
and_1 (scvec_t x, scvec_t y)
{
return __builtin_vec_and (x, y);
}
ucvec_t
and_2 (ucvec_t x, ucvec_t y)
{
return __builtin_vec_and (x, y);
}
bsvec_t
and_3 (bsvec_t x, bsvec_t y)
{
return __builtin_vec_and (x, y);
}
ssvec_t
and_4 (ssvec_t x, ssvec_t y)
{
return __builtin_vec_and (x, y);
}
usvec_t
and_5 (usvec_t x, usvec_t y)
{
return __builtin_vec_and (x, y);
}
bivec_t
and_6 (bivec_t x, bivec_t y)
{
return __builtin_vec_and (x, y);
}
sivec_t
and_7 (sivec_t x, sivec_t y)
{
return __builtin_vec_and (x, y);
}
uivec_t
and_8 (uivec_t x, uivec_t y)
{
return __builtin_vec_and (x, y);
}
bllvec_t
and_9 (bllvec_t x, bllvec_t y)
{
return __builtin_vec_and (x, y);
}
sllvec_t
and_10 (sllvec_t x, sllvec_t y)
{
return __builtin_vec_and (x, y);
}
ullvec_t
and_11 (ullvec_t x, ullvec_t y)
{
return __builtin_vec_and (x, y);
}
dvec_t
and_12 (dvec_t x, dvec_t y)
{
return __builtin_vec_and (x, y);
}
fvec_t
and_13 (fvec_t x, fvec_t y)
{
return __builtin_vec_and (x, y);
}
bcvec_t
andc_0 (bcvec_t x, bcvec_t y)
{
return __builtin_vec_andc (x, y);
}
scvec_t
andc_1 (scvec_t x, scvec_t y)
{
return __builtin_vec_andc (x, y);
}
ucvec_t
andc_2 (ucvec_t x, ucvec_t y)
{
return __builtin_vec_andc (x, y);
}
bsvec_t
andc_3 (bsvec_t x, bsvec_t y)
{
return __builtin_vec_andc (x, y);
}
ssvec_t
andc_4 (ssvec_t x, ssvec_t y)
{
return __builtin_vec_andc (x, y);
}
usvec_t
andc_5 (usvec_t x, usvec_t y)
{
return __builtin_vec_andc (x, y);
}
bivec_t
andc_6 (bivec_t x, bivec_t y)
{
return __builtin_vec_andc (x, y);
}
sivec_t
andc_7 (sivec_t x, sivec_t y)
{
return __builtin_vec_andc (x, y);
}
uivec_t
andc_8 (uivec_t x, uivec_t y)
{
return __builtin_vec_andc (x, y);
}
bllvec_t
andc_9 (bllvec_t x, bllvec_t y)
{
return __builtin_vec_andc (x, y);
}
sllvec_t
andc_10 (sllvec_t x, sllvec_t y)
{
return __builtin_vec_andc (x, y);
}
ullvec_t
andc_11 (ullvec_t x, ullvec_t y)
{
return __builtin_vec_andc (x, y);
}
dvec_t
andc_12 (dvec_t x, dvec_t y)
{
return __builtin_vec_andc (x, y);
}
fvec_t
andc_13 (fvec_t x, fvec_t y)
{
return __builtin_vec_andc (x, y);
}
bcvec_t
nor_0 (bcvec_t x, bcvec_t y)
{
return __builtin_vec_nor (x, y);
}
scvec_t
nor_1 (scvec_t x, scvec_t y)
{
return __builtin_vec_nor (x, y);
}
ucvec_t
nor_2 (ucvec_t x, ucvec_t y)
{
return __builtin_vec_nor (x, y);
}
bsvec_t
nor_3 (bsvec_t x, bsvec_t y)
{
return __builtin_vec_nor (x, y);
}
ssvec_t
nor_4 (ssvec_t x, ssvec_t y)
{
return __builtin_vec_nor (x, y);
}
usvec_t
nor_5 (usvec_t x, usvec_t y)
{
return __builtin_vec_nor (x, y);
}
bivec_t
nor_6 (bivec_t x, bivec_t y)
{
return __builtin_vec_nor (x, y);
}
sivec_t
nor_7 (sivec_t x, sivec_t y)
{
return __builtin_vec_nor (x, y);
}
uivec_t
nor_8 (uivec_t x, uivec_t y)
{
return __builtin_vec_nor (x, y);
}
bllvec_t
nor_9 (bllvec_t x, bllvec_t y)
{
return __builtin_vec_nor (x, y);
}
sllvec_t
nor_10 (sllvec_t x, sllvec_t y)
{
return __builtin_vec_nor (x, y);
}
ullvec_t
nor_11 (ullvec_t x, ullvec_t y)
{
return __builtin_vec_nor (x, y);
}
dvec_t
nor_12 (dvec_t x, dvec_t y)
{
return __builtin_vec_nor (x, y);
}
fvec_t
nor_13 (fvec_t x, fvec_t y)
{
return __builtin_vec_nor (x, y);
}
bcvec_t
or_0 (bcvec_t x, bcvec_t y)
{
return __builtin_vec_or (x, y);
}
scvec_t
or_1 (scvec_t x, scvec_t y)
{
return __builtin_vec_or (x, y);
}
ucvec_t
or_2 (ucvec_t x, ucvec_t y)
{
return __builtin_vec_or (x, y);
}
bsvec_t
or_3 (bsvec_t x, bsvec_t y)
{
return __builtin_vec_or (x, y);
}
ssvec_t
or_4 (ssvec_t x, ssvec_t y)
{
return __builtin_vec_or (x, y);
}
usvec_t
or_5 (usvec_t x, usvec_t y)
{
return __builtin_vec_or (x, y);
}
bivec_t
or_6 (bivec_t x, bivec_t y)
{
return __builtin_vec_or (x, y);
}
sivec_t
or_7 (sivec_t x, sivec_t y)
{
return __builtin_vec_or (x, y);
}
uivec_t
or_8 (uivec_t x, uivec_t y)
{
return __builtin_vec_or (x, y);
}
bllvec_t
or_9 (bllvec_t x, bllvec_t y)
{
return __builtin_vec_or (x, y);
}
sllvec_t
or_10 (sllvec_t x, sllvec_t y)
{
return __builtin_vec_or (x, y);
}
ullvec_t
or_11 (ullvec_t x, ullvec_t y)
{
return __builtin_vec_or (x, y);
}
dvec_t
or_12 (dvec_t x, dvec_t y)
{
return __builtin_vec_or (x, y);
}
fvec_t
or_13 (fvec_t x, fvec_t y)
{
return __builtin_vec_or (x, y);
}
bcvec_t
xor_0 (bcvec_t x, bcvec_t y)
{
return __builtin_vec_xor (x, y);
}
scvec_t
xor_1 (scvec_t x, scvec_t y)
{
return __builtin_vec_xor (x, y);
}
ucvec_t
xor_2 (ucvec_t x, ucvec_t y)
{
return __builtin_vec_xor (x, y);
}
bsvec_t
xor_3 (bsvec_t x, bsvec_t y)
{
return __builtin_vec_xor (x, y);
}
ssvec_t
xor_4 (ssvec_t x, ssvec_t y)
{
return __builtin_vec_xor (x, y);
}
usvec_t
xor_5 (usvec_t x, usvec_t y)
{
return __builtin_vec_xor (x, y);
}
bivec_t
xor_6 (bivec_t x, bivec_t y)
{
return __builtin_vec_xor (x, y);
}
sivec_t
xor_7 (sivec_t x, sivec_t y)
{
return __builtin_vec_xor (x, y);
}
uivec_t
xor_8 (uivec_t x, uivec_t y)
{
return __builtin_vec_xor (x, y);
}
bllvec_t
xor_9 (bllvec_t x, bllvec_t y)
{
return __builtin_vec_xor (x, y);
}
sllvec_t
xor_10 (sllvec_t x, sllvec_t y)
{
return __builtin_vec_xor (x, y);
}
ullvec_t
xor_11 (ullvec_t x, ullvec_t y)
{
return __builtin_vec_xor (x, y);
}
dvec_t
xor_12 (dvec_t x, dvec_t y)
{
return __builtin_vec_xor (x, y);
}
fvec_t
xor_13 (fvec_t x, fvec_t y)
{
return __builtin_vec_xor (x, y);
}
/* { dg-final { scan-tree-dump-not "VIEW_CONVERT_EXPR" "gimple" } } */