Add builtins for the 64-bit vector integer arithmetic instructions added in POWER8.

These are the Clang-related changes for the instructions added to LLVM in http://reviews.llvm.org/D7959.

Phabricator review: http://reviews.llvm.org/D8041

llvm-svn: 231931
This commit is contained in:
Kit Barton 2015-03-11 15:57:19 +00:00
parent 90c2db2a83
commit 8553bec911
8 changed files with 1416 additions and 18 deletions

View File

@ -85,10 +85,14 @@ BUILTIN(__builtin_altivec_vmuleub, "V8UsV16UcV16Uc", "")
BUILTIN(__builtin_altivec_vmulesb, "V8SsV16ScV16Sc", "")
BUILTIN(__builtin_altivec_vmuleuh, "V4UiV8UsV8Us", "")
BUILTIN(__builtin_altivec_vmulesh, "V4SiV8SsV8Ss", "")
BUILTIN(__builtin_altivec_vmuleuw, "V2ULLiV4UiV4Ui", "")
BUILTIN(__builtin_altivec_vmulesw, "V2SLLiV4SiV4Si", "")
BUILTIN(__builtin_altivec_vmuloub, "V8UsV16UcV16Uc", "")
BUILTIN(__builtin_altivec_vmulosb, "V8SsV16ScV16Sc", "")
BUILTIN(__builtin_altivec_vmulouh, "V4UiV8UsV8Us", "")
BUILTIN(__builtin_altivec_vmulosh, "V4SiV8SsV8Ss", "")
BUILTIN(__builtin_altivec_vmulouw, "V2ULLiV4UiV4Ui", "")
BUILTIN(__builtin_altivec_vmulosw, "V2SLLiV4SiV4Si", "")
BUILTIN(__builtin_altivec_vnmsubfp, "V4fV4fV4fV4f", "")
@ -115,6 +119,7 @@ BUILTIN(__builtin_altivec_vcmpgefp, "V4iV4fV4f", "")
BUILTIN(__builtin_altivec_vcmpequb, "V16cV16cV16c", "")
BUILTIN(__builtin_altivec_vcmpequh, "V8sV8sV8s", "")
BUILTIN(__builtin_altivec_vcmpequw, "V4iV4iV4i", "")
BUILTIN(__builtin_altivec_vcmpequd, "V2LLiV2LLiV2LLi", "")
BUILTIN(__builtin_altivec_vcmpeqfp, "V4iV4fV4f", "")
BUILTIN(__builtin_altivec_vcmpgtsb, "V16cV16ScV16Sc", "")
@ -123,6 +128,8 @@ BUILTIN(__builtin_altivec_vcmpgtsh, "V8sV8SsV8Ss", "")
BUILTIN(__builtin_altivec_vcmpgtuh, "V8sV8UsV8Us", "")
BUILTIN(__builtin_altivec_vcmpgtsw, "V4iV4SiV4Si", "")
BUILTIN(__builtin_altivec_vcmpgtuw, "V4iV4UiV4Ui", "")
BUILTIN(__builtin_altivec_vcmpgtsd, "V2LLiV2LLiV2LLi", "")
BUILTIN(__builtin_altivec_vcmpgtud, "V2LLiV2ULLiV2ULLi", "")
BUILTIN(__builtin_altivec_vcmpgtfp, "V4iV4fV4f", "")
BUILTIN(__builtin_altivec_vmaxsb, "V16ScV16ScV16Sc", "")
@ -131,6 +138,8 @@ BUILTIN(__builtin_altivec_vmaxsh, "V8SsV8SsV8Ss", "")
BUILTIN(__builtin_altivec_vmaxuh, "V8UsV8UsV8Us", "")
BUILTIN(__builtin_altivec_vmaxsw, "V4SiV4SiV4Si", "")
BUILTIN(__builtin_altivec_vmaxuw, "V4UiV4UiV4Ui", "")
BUILTIN(__builtin_altivec_vmaxsd, "V2LLiV2LLiV2LLi", "")
BUILTIN(__builtin_altivec_vmaxud, "V2ULLiV2ULLiV2ULLi", "")
BUILTIN(__builtin_altivec_vmaxfp, "V4fV4fV4f", "")
BUILTIN(__builtin_altivec_mfvscr, "V8Us", "")
@ -141,6 +150,8 @@ BUILTIN(__builtin_altivec_vminsh, "V8SsV8SsV8Ss", "")
BUILTIN(__builtin_altivec_vminuh, "V8UsV8UsV8Us", "")
BUILTIN(__builtin_altivec_vminsw, "V4SiV4SiV4Si", "")
BUILTIN(__builtin_altivec_vminuw, "V4UiV4UiV4Ui", "")
BUILTIN(__builtin_altivec_vminsd, "V2LLiV2LLiV2LLi", "")
BUILTIN(__builtin_altivec_vminud, "V2ULLiV2ULLiV2ULLi", "")
BUILTIN(__builtin_altivec_vminfp, "V4fV4fV4f", "")
BUILTIN(__builtin_altivec_mtvscr, "vV4i", "")
@ -150,6 +161,7 @@ BUILTIN(__builtin_altivec_vrefp, "V4fV4f", "")
BUILTIN(__builtin_altivec_vrlb, "V16cV16cV16Uc", "")
BUILTIN(__builtin_altivec_vrlh, "V8sV8sV8Us", "")
BUILTIN(__builtin_altivec_vrlw, "V4iV4iV4Ui", "")
BUILTIN(__builtin_altivec_vrld, "V2LLiV2LLiV2ULLi", "")
BUILTIN(__builtin_altivec_vsel_4si, "V4iV4iV4iV4Ui", "")
@ -194,6 +206,7 @@ BUILTIN(__builtin_altivec_vcmpgefp_p, "iiV4fV4f", "")
BUILTIN(__builtin_altivec_vcmpequb_p, "iiV16cV16c", "")
BUILTIN(__builtin_altivec_vcmpequh_p, "iiV8sV8s", "")
BUILTIN(__builtin_altivec_vcmpequw_p, "iiV4iV4i", "")
BUILTIN(__builtin_altivec_vcmpequd_p, "iiV2LLiV2LLi", "")
BUILTIN(__builtin_altivec_vcmpeqfp_p, "iiV4fV4f", "")
BUILTIN(__builtin_altivec_vcmpgtsb_p, "iiV16ScV16Sc", "")
@ -202,6 +215,8 @@ BUILTIN(__builtin_altivec_vcmpgtsh_p, "iiV8SsV8Ss", "")
BUILTIN(__builtin_altivec_vcmpgtuh_p, "iiV8UsV8Us", "")
BUILTIN(__builtin_altivec_vcmpgtsw_p, "iiV4SiV4Si", "")
BUILTIN(__builtin_altivec_vcmpgtuw_p, "iiV4UiV4Ui", "")
BUILTIN(__builtin_altivec_vcmpgtsd_p, "iiV2LLiV2LLi", "")
BUILTIN(__builtin_altivec_vcmpgtud_p, "iiV2ULLiV2ULLi", "")
BUILTIN(__builtin_altivec_vcmpgtfp_p, "iiV4fV4f", "")
// P8 Crypto built-ins.

View File

@ -352,10 +352,12 @@ def err_invalid_pixel_decl_spec_combination : Error<
def err_invalid_vector_bool_decl_spec : Error<
"cannot use '%0' with '__vector bool'">;
def err_invalid_vector_double_decl_spec : Error <
"use of 'double' with '__vector' requires VSX support to be enabled (available on the POWER7 or later)">;
"use of 'double' with '__vector' requires VSX support to be enabled "
"(available on POWER7 or later)">;
def err_invalid_vector_long_long_decl_spec : Error <
"use of 'long long' with '__vector bool' requires VSX support to be enabled "
"(available on the POWER7 or later)">;
"use of 'long long' with '__vector bool' requires VSX support (available on "
"POWER7 or later) or extended Altivec support (available on POWER8 or later) "
"to be enabled">;
def err_invalid_vector_long_double_decl_spec : Error<
"cannot use 'long double' with '__vector'">;
def warn_vector_long_decl_spec_combination : Warning<

View File

@ -1387,6 +1387,21 @@ vec_cmpeq(vector unsigned int __a, vector unsigned int __b)
__builtin_altivec_vcmpequw((vector int)__a, (vector int)__b);
}
#ifdef __POWER8_VECTOR__
static vector bool long long __ATTRS_o_ai
vec_cmpeq(vector signed long long __a, vector signed long long __b)
{
return (vector bool long long) __builtin_altivec_vcmpequd(__a, __b);
}
static vector bool long long __ATTRS_o_ai
vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b)
{
return (vector bool long long)
__builtin_altivec_vcmpequd((vector long long)__a, (vector long long) __b);
}
#endif
static vector bool int __ATTRS_o_ai
vec_cmpeq(vector float __a, vector float __b)
{
@ -1447,6 +1462,20 @@ vec_cmpgt(vector unsigned int __a, vector unsigned int __b)
return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);
}
#ifdef __POWER8_VECTOR__
static vector bool long long __ATTRS_o_ai
vec_cmpgt(vector signed long long __a, vector signed long long __b)
{
return (vector bool long long)__builtin_altivec_vcmpgtsd(__a, __b);
}
static vector bool long long __ATTRS_o_ai
vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b)
{
return (vector bool long long)__builtin_altivec_vcmpgtud(__a, __b);
}
#endif
static vector bool int __ATTRS_o_ai
vec_cmpgt(vector float __a, vector float __b)
{
@ -2679,6 +2708,20 @@ vec_max(vector unsigned int __a, vector bool int __b)
return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);
}
#ifdef __POWER8_VECTOR__
static vector signed long long __ATTRS_o_ai
vec_max(vector signed long long __a, vector signed long long __b)
{
return __builtin_altivec_vmaxsd(__a, __b);
}
static vector unsigned long long __ATTRS_o_ai
vec_max(vector unsigned long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vmaxud(__a, __b);
}
#endif
static vector float __ATTRS_o_ai
vec_max(vector float __a, vector float __b)
{
@ -3327,6 +3370,20 @@ vec_min(vector unsigned int __a, vector bool int __b)
return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);
}
#ifdef __POWER8_VECTOR__
static vector signed long long __ATTRS_o_ai
vec_min(vector signed long long __a, vector signed long long __b)
{
return __builtin_altivec_vminsd(__a, __b);
}
static vector unsigned long long __ATTRS_o_ai
vec_min(vector unsigned long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vminud(__a, __b);
}
#endif
static vector float __ATTRS_o_ai
vec_min(vector float __a, vector float __b)
{
@ -3762,6 +3819,28 @@ vec_mule(vector unsigned short __a, vector unsigned short __b)
#endif
}
#ifdef __POWER8_VECTOR__
static vector signed long long __ATTRS_o_ai
vec_mule(vector signed int __a, vector signed int __b)
{
#ifdef __LITTLE_ENDIAN__
return __builtin_altivec_vmulosw(__a, __b);
#else
return __builtin_altivec_vmulesw(__a, __b);
#endif
}
static vector unsigned long long __ATTRS_o_ai
vec_mule(vector unsigned int __a, vector unsigned int __b)
{
#ifdef __LITTLE_ENDIAN__
return __builtin_altivec_vmulouw(__a, __b);
#else
return __builtin_altivec_vmuleuw(__a, __b);
#endif
}
#endif
/* vec_vmulesb */
static vector short __attribute__((__always_inline__))
@ -3852,6 +3931,28 @@ vec_mulo(vector unsigned short __a, vector unsigned short __b)
#endif
}
#ifdef __POWER8_VECTOR__
static vector signed long long __ATTRS_o_ai
vec_mulo(vector signed int __a, vector signed int __b)
{
#ifdef __LITTLE_ENDIAN__
return __builtin_altivec_vmulesw(__a, __b);
#else
return __builtin_altivec_vmulosw(__a, __b);
#endif
}
static vector unsigned long long __ATTRS_o_ai
vec_mulo(vector unsigned int __a, vector unsigned int __b)
{
#ifdef __LITTLE_ENDIAN__
return __builtin_altivec_vmuleuw(__a, __b);
#else
return __builtin_altivec_vmulouw(__a, __b);
#endif
}
#endif
/* vec_vmulosb */
static vector short __attribute__((__always_inline__))
@ -5095,6 +5196,20 @@ vec_rl(vector unsigned int __a, vector unsigned int __b)
return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);
}
#ifdef __POWER8_VECTOR__
static vector signed long long __ATTRS_o_ai
vec_rl(vector signed long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vrld(__a, __b);
}
static vector unsigned long long __ATTRS_o_ai
vec_rl(vector unsigned long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vrld(__a, __b);
}
#endif
/* vec_vrlb */
static vector signed char __ATTRS_o_ai
@ -5465,6 +5580,20 @@ vec_sl(vector unsigned int __a, vector unsigned int __b)
return __a << __b;
}
#ifdef __POWER8_VECTOR__
static vector signed long long __ATTRS_o_ai
vec_sl(vector signed long long __a, vector unsigned long long __b)
{
return __a << (vector long long)__b;
}
static vector unsigned long long __ATTRS_o_ai
vec_sl(vector unsigned long long __a, vector unsigned long long __b)
{
return __a << __b;
}
#endif
/* vec_vslb */
#define __builtin_altivec_vslb vec_vslb
@ -6566,6 +6695,20 @@ vec_sr(vector unsigned int __a, vector unsigned int __b)
return __a >> __b;
}
#ifdef __POWER8_VECTOR__
static vector signed long long __ATTRS_o_ai
vec_sr(vector signed long long __a, vector unsigned long long __b)
{
return __a >> (vector long long)__b;
}
static vector unsigned long long __ATTRS_o_ai
vec_sr(vector unsigned long long __a, vector unsigned long long __b)
{
return __a >> __b;
}
#endif
/* vec_vsrb */
#define __builtin_altivec_vsrb vec_vsrb
@ -6652,6 +6795,20 @@ vec_sra(vector unsigned int __a, vector unsigned int __b)
return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);
}
#ifdef __POWER8_VECTOR__
static vector signed long long __ATTRS_o_ai
vec_sra(vector signed long long __a, vector unsigned long long __b)
{
return __a >> __b;
}
static vector unsigned long long __ATTRS_o_ai
vec_sra(vector unsigned long long __a, vector unsigned long long __b)
{
return (vector unsigned long long) ( (vector signed long long) __a >> __b);
}
#endif
/* vec_vsrab */
static vector signed char __ATTRS_o_ai
@ -10887,6 +11044,55 @@ vec_all_eq(vector bool int __a, vector bool int __b)
return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, (vector int)__b);
}
#ifdef __POWER8_VECTOR__
static int __ATTRS_o_ai
vec_all_eq(vector signed long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, __b);
}
static int __ATTRS_o_ai
vec_all_eq(vector long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, (vector long long)__b);
}
static int __ATTRS_o_ai
vec_all_eq(vector unsigned long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
(vector long long)__b);
}
static int __ATTRS_o_ai
vec_all_eq(vector unsigned long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
(vector long long)__b);
}
static int __ATTRS_o_ai
vec_all_eq(vector bool long long __a, vector long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
(vector long long)__b);
}
static int __ATTRS_o_ai
vec_all_eq(vector bool long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
(vector long long)__b);
}
static int __ATTRS_o_ai
vec_all_eq(vector bool long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
(vector long long)__b);
}
#endif
static int __ATTRS_o_ai
vec_all_eq(vector float __a, vector float __b)
{
@ -11033,6 +11239,56 @@ vec_all_ge(vector bool int __a, vector bool int __b)
(vector unsigned int)__a);
}
#ifdef __POWER8_VECTOR__
static int __ATTRS_o_ai
vec_all_ge(vector signed long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b, __a);
}
static int __ATTRS_o_ai
vec_all_ge(vector signed long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__b,
__a);
}
static int __ATTRS_o_ai
vec_all_ge(vector unsigned long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b, __a);
}
static int __ATTRS_o_ai
vec_all_ge(vector unsigned long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
__a);
}
static int __ATTRS_o_ai
vec_all_ge(vector bool long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ,
(vector unsigned long long)__b,
(vector unsigned long long)__a);
}
static int __ATTRS_o_ai
vec_all_ge(vector bool long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b,
(vector unsigned long long)__a);
}
static int __ATTRS_o_ai
vec_all_ge(vector bool long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ,
(vector unsigned long long)__b,
(vector unsigned long long)__a);
}
#endif
static int __ATTRS_o_ai
vec_all_ge(vector float __a, vector float __b)
{
@ -11179,6 +11435,56 @@ vec_all_gt(vector bool int __a, vector bool int __b)
(vector unsigned int)__b);
}
#ifdef __POWER8_VECTOR__
static int __ATTRS_o_ai
vec_all_gt(vector signed long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a, __b);
}
static int __ATTRS_o_ai
vec_all_gt(vector signed long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_all_gt(vector unsigned long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a, __b);
}
static int __ATTRS_o_ai
vec_all_gt(vector unsigned long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a,
(vector unsigned long long)__b);
}
static int __ATTRS_o_ai
vec_all_gt(vector bool long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT,
(vector unsigned long long)__a,
(vector unsigned long long)__b);
}
static int __ATTRS_o_ai
vec_all_gt(vector bool long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
__b);
}
static int __ATTRS_o_ai
vec_all_gt(vector bool long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT,
(vector unsigned long long)__a,
(vector unsigned long long)__b);
}
#endif
static int __ATTRS_o_ai
vec_all_gt(vector float __a, vector float __b)
{
@ -11333,6 +11639,57 @@ vec_all_le(vector bool int __a, vector bool int __b)
(vector unsigned int)__b);
}
#ifdef __POWER8_VECTOR__
static int __ATTRS_o_ai
vec_all_le(vector signed long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a, __b);
}
static int __ATTRS_o_ai
vec_all_le(vector unsigned long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a, __b);
}
static int __ATTRS_o_ai
vec_all_le(vector signed long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_all_le(vector unsigned long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a,
(vector unsigned long long)__b);
}
static int __ATTRS_o_ai
vec_all_le(vector bool long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ,
(vector unsigned long long)__a,
(vector unsigned long long)__b);
}
static int __ATTRS_o_ai
vec_all_le(vector bool long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
__b);
}
static int __ATTRS_o_ai
vec_all_le(vector bool long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ,
(vector unsigned long long)__a,
(vector unsigned long long)__b);
}
#endif
static int __ATTRS_o_ai
vec_all_le(vector float __a, vector float __b)
{
@ -11479,6 +11836,57 @@ vec_all_lt(vector bool int __a, vector bool int __b)
(vector unsigned int)__a);
}
#ifdef __POWER8_VECTOR__
static int __ATTRS_o_ai
vec_all_lt(vector signed long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b, __a);
}
static int __ATTRS_o_ai
vec_all_lt(vector unsigned long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b, __a);
}
static int __ATTRS_o_ai
vec_all_lt(vector signed long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__b,
__a);
}
static int __ATTRS_o_ai
vec_all_lt(vector unsigned long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
__a);
}
static int __ATTRS_o_ai
vec_all_lt(vector bool long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT,
(vector unsigned long long)__b,
(vector unsigned long long)__a);
}
static int __ATTRS_o_ai
vec_all_lt(vector bool long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b,
(vector unsigned long long)__a);
}
static int __ATTRS_o_ai
vec_all_lt(vector bool long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT,
(vector unsigned long long)__b,
(vector unsigned long long)__a);
}
#endif
static int __ATTRS_o_ai
vec_all_lt(vector float __a, vector float __b)
{
@ -11633,6 +12041,56 @@ vec_all_ne(vector bool int __a, vector bool int __b)
return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, (vector int)__b);
}
#ifdef __POWER8_VECTOR__
static int __ATTRS_o_ai
vec_all_ne(vector signed long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a, __b);
}
static int __ATTRS_o_ai
vec_all_ne(vector unsigned long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector long long)__a,
(vector long long)__b);
}
static int __ATTRS_o_ai
vec_all_ne(vector signed long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_all_ne(vector unsigned long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_all_ne(vector bool long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_all_ne(vector bool long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_all_ne(vector bool long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
(vector signed long long)__b);
}
#endif
static int __ATTRS_o_ai
vec_all_ne(vector float __a, vector float __b)
{
@ -11837,6 +12295,61 @@ vec_any_eq(vector bool int __a, vector bool int __b)
__builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, (vector int)__b);
}
#ifdef __POWER8_VECTOR__
static int __ATTRS_o_ai
vec_any_eq(vector signed long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a, __b);
}
static int __ATTRS_o_ai
vec_any_eq(vector unsigned long long __a, vector unsigned long long __b)
{
return
__builtin_altivec_vcmpequd_p(__CR6_EQ_REV, (vector long long)__a,
(vector long long)__b);
}
static int __ATTRS_o_ai
vec_any_eq(vector signed long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_any_eq(vector unsigned long long __a, vector bool long long __b)
{
return
__builtin_altivec_vcmpequd_p(__CR6_EQ_REV, (vector signed long long)__a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_any_eq(vector bool long long __a, vector signed long long __b)
{
return
__builtin_altivec_vcmpequd_p(__CR6_EQ_REV, (vector signed long long)__a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_any_eq(vector bool long long __a, vector unsigned long long __b)
{
return
__builtin_altivec_vcmpequd_p(__CR6_EQ_REV, (vector signed long long)__a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_any_eq(vector bool long long __a, vector bool long long __b)
{
return
__builtin_altivec_vcmpequd_p(__CR6_EQ_REV, (vector signed long long)__a,
(vector signed long long)__b);
}
#endif
static int __ATTRS_o_ai
vec_any_eq(vector float __a, vector float __b)
{
@ -11985,6 +12498,57 @@ vec_any_ge(vector bool int __a, vector bool int __b)
(vector unsigned int)__a);
}
#ifdef __POWER8_VECTOR__
static int __ATTRS_o_ai
vec_any_ge(vector signed long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b, __a);
}
static int __ATTRS_o_ai
vec_any_ge(vector unsigned long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b, __a);
}
static int __ATTRS_o_ai
vec_any_ge(vector signed long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV,
(vector signed long long)__b, __a);
}
static int __ATTRS_o_ai
vec_any_ge(vector unsigned long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
(vector unsigned long long)__b, __a);
}
static int __ATTRS_o_ai
vec_any_ge(vector bool long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
(vector unsigned long long)__b,
(vector unsigned long long)__a);
}
static int __ATTRS_o_ai
vec_any_ge(vector bool long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b,
(vector unsigned long long)__a);
}
static int __ATTRS_o_ai
vec_any_ge(vector bool long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
(vector unsigned long long)__b,
(vector unsigned long long)__a);
}
#endif
static int __ATTRS_o_ai
vec_any_ge(vector float __a, vector float __b)
{
@ -12135,6 +12699,58 @@ vec_any_gt(vector bool int __a, vector bool int __b)
(vector unsigned int)__b);
}
#ifdef __POWER8_VECTOR__
static int __ATTRS_o_ai
vec_any_gt(vector signed long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a, __b);
}
static int __ATTRS_o_ai
vec_any_gt(vector unsigned long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a, __b);
}
static int __ATTRS_o_ai
vec_any_gt(vector signed long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_any_gt(vector unsigned long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a,
(vector unsigned long long)__b);
}
static int __ATTRS_o_ai
vec_any_gt(vector bool long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
(vector unsigned long long)__a,
(vector unsigned long long)__b);
}
static int __ATTRS_o_ai
vec_any_gt(vector bool long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
(vector unsigned long long)__a, __b);
}
static int __ATTRS_o_ai
vec_any_gt(vector bool long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
(vector unsigned long long)__a,
(vector unsigned long long)__b);
}
#endif
static int __ATTRS_o_ai
vec_any_gt(vector float __a, vector float __b)
{
@ -12285,6 +12901,57 @@ vec_any_le(vector bool int __a, vector bool int __b)
(vector unsigned int)__b);
}
#ifdef __POWER8_VECTOR__
static int __ATTRS_o_ai
vec_any_le(vector signed long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a, __b);
}
static int __ATTRS_o_ai
vec_any_le(vector unsigned long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a, __b);
}
static int __ATTRS_o_ai
vec_any_le(vector signed long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_any_le(vector unsigned long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a,
(vector unsigned long long)__b);
}
static int __ATTRS_o_ai
vec_any_le(vector bool long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
(vector unsigned long long)__a,
(vector unsigned long long)__b);
}
static int __ATTRS_o_ai
vec_any_le(vector bool long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
(vector unsigned long long)__a, __b);
}
static int __ATTRS_o_ai
vec_any_le(vector bool long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
(vector unsigned long long)__a,
(vector unsigned long long)__b);
}
#endif
static int __ATTRS_o_ai
vec_any_le(vector float __a, vector float __b)
{
@ -12435,6 +13102,57 @@ vec_any_lt(vector bool int __a, vector bool int __b)
(vector unsigned int)__a);
}
#ifdef __POWER8_VECTOR__
static int __ATTRS_o_ai
vec_any_lt(vector signed long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b, __a);
}
static int __ATTRS_o_ai
vec_any_lt(vector unsigned long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b, __a);
}
static int __ATTRS_o_ai
vec_any_lt(vector signed long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV,
(vector signed long long)__b, __a);
}
static int __ATTRS_o_ai
vec_any_lt(vector unsigned long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
(vector unsigned long long)__b, __a);
}
static int __ATTRS_o_ai
vec_any_lt(vector bool long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
(vector unsigned long long)__b,
(vector unsigned long long)__a);
}
static int __ATTRS_o_ai
vec_any_lt(vector bool long long __a, vector unsigned long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b,
(vector unsigned long long)__a);
}
static int __ATTRS_o_ai
vec_any_lt(vector bool long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
(vector unsigned long long)__b,
(vector unsigned long long)__a);
}
#endif
static int __ATTRS_o_ai
vec_any_lt(vector float __a, vector float __b)
{
@ -12607,6 +13325,61 @@ vec_any_ne(vector bool int __a, vector bool int __b)
__builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, (vector int)__b);
}
#ifdef __POWER8_VECTOR__
static int __ATTRS_o_ai
vec_any_ne(vector signed long long __a, vector signed long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a, __b);
}
static int __ATTRS_o_ai
vec_any_ne(vector unsigned long long __a, vector unsigned long long __b)
{
return
__builtin_altivec_vcmpequd_p(__CR6_LT_REV, (vector long long)__a,
(vector long long)__b);
}
static int __ATTRS_o_ai
vec_any_ne(vector signed long long __a, vector bool long long __b)
{
return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_any_ne(vector unsigned long long __a, vector bool long long __b)
{
return
__builtin_altivec_vcmpequd_p(__CR6_LT_REV, (vector signed long long)__a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_any_ne(vector bool long long __a, vector signed long long __b)
{
return
__builtin_altivec_vcmpequd_p(__CR6_LT_REV, (vector signed long long)__a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_any_ne(vector bool long long __a, vector unsigned long long __b)
{
return
__builtin_altivec_vcmpequd_p(__CR6_LT_REV, (vector signed long long)__a,
(vector signed long long)__b);
}
static int __ATTRS_o_ai
vec_any_ne(vector bool long long __a, vector bool long long __b)
{
return
__builtin_altivec_vcmpequd_p(__CR6_LT_REV, (vector signed long long)__a,
(vector signed long long)__b);
}
#endif
static int __ATTRS_o_ai
vec_any_ne(vector float __a, vector float __b)
{

View File

@ -989,7 +989,9 @@ void DeclSpec::Finish(DiagnosticsEngine &D, Preprocessor &PP, const PrintingPoli
<< getSpecifierName((TSW)TypeSpecWidth);
// vector bool long long requires VSX support.
if ((TypeSpecWidth == TSW_longlong) && (!PP.getTargetInfo().hasFeature("vsx")))
if ((TypeSpecWidth == TSW_longlong) &&
(!PP.getTargetInfo().hasFeature("vsx")) &&
(!PP.getTargetInfo().hasFeature("power8-vector")))
Diag(D, TSTLoc, diag::err_invalid_vector_long_long_decl_spec);
// Elements of vector bool are interpreted as unsigned. (PIM 2.1)

View File

@ -0,0 +1,605 @@
// REQUIRES: powerpc-registered-target
// RUN: %clang_cc1 -faltivec -target-feature +power8-vector -triple powerpc64-unknown-unknown -emit-llvm %s -o - | FileCheck %s
// RUN: %clang_cc1 -faltivec -target-feature +power8-vector -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s -check-prefix=CHECK-LE
// RUN: not %clang_cc1 -faltivec -triple powerpc64-unknown-unknown -emit-llvm %s -o - 2>&1 | FileCheck %s -check-prefix=CHECK-PPC
vector int vi = { -1, 2, -3, 4 };
vector unsigned int vui = { 1, 2, 3, 4 };
vector bool long long vbll = { 1, 0 };
vector long long vll = { 1, 2 };
vector unsigned long long vull = { 1, 2 };
int res_i;
vector int res_vi;
vector unsigned int res_vui;
vector long long res_vll;
vector unsigned long long res_vull;
vector bool long long res_vbll;
// CHECK-LABEL: define void @test1
void test1() {
/* vec_cmpeq */
res_vbll = vec_cmpeq(vll, vll);
// CHECK: @llvm.ppc.altivec.vcmpequd
// CHECK-LE: @llvm.ppc.altivec.vcmpequd
// CHECK-PPC: error: call to 'vec_cmpeq' is ambiguous
res_vbll = vec_cmpeq(vull, vull);
// CHECK: @llvm.ppc.altivec.vcmpequd
// CHECK-LE: @llvm.ppc.altivec.vcmpequd
// CHECK-PPC: error: call to 'vec_cmpeq' is ambiguous
/* vec_cmpgt */
res_vbll = vec_cmpgt(vll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd
// CHECK-PPC: error: call to 'vec_cmpgt' is ambiguous
res_vbll = vec_cmpgt(vull, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud
// CHECK-PPC: error: call to 'vec_cmpgt' is ambiguous
/* ----------------------- predicates --------------------------- */
/* vec_all_eq */
res_i = vec_all_eq(vll, vll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_all_eq' is ambiguous
res_i = vec_all_eq(vll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_all_eq' is ambiguous
res_i = vec_all_eq(vull, vull);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_all_eq' is ambiguous
res_i = vec_all_eq(vull, vbll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_all_eq' is ambiguous
res_i = vec_all_eq(vbll, vll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_all_eq' is ambiguous
res_i = vec_all_eq(vbll, vull);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_all_eq' is ambiguous
res_i = vec_all_eq(vbll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_all_eq' is ambiguous
/* vec_all_ne */
res_i = vec_all_ne(vll, vll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_all_ne' is ambiguous
res_i = vec_all_ne(vll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_all_ne' is ambiguous
res_i = vec_all_ne(vull, vull);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_all_ne' is ambiguous
res_i = vec_all_ne(vull, vbll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_all_ne' is ambiguous
res_i = vec_all_ne(vbll, vll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_all_ne' is ambiguous
res_i = vec_all_ne(vbll, vull);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_all_ne' is ambiguous
res_i = vec_all_ne(vbll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_all_ne' is ambiguous
/* vec_any_eq */
res_i = vec_any_eq(vll, vll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_any_eq' is ambiguous
res_i = vec_any_eq(vll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_any_eq' is ambiguous
res_i = vec_any_eq(vull, vull);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_any_eq' is ambiguous
res_i = vec_any_eq(vull, vbll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_any_eq' is ambiguous
res_i = vec_any_eq(vbll, vll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_any_eq' is ambiguous
res_i = vec_any_eq(vbll, vull);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_any_eq' is ambiguous
res_i = vec_any_eq(vbll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_any_eq' is ambiguous
/* vec_any_ne */
res_i = vec_any_ne(vll, vll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_any_ne' is ambiguous
res_i = vec_any_ne(vll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_any_ne' is ambiguous
res_i = vec_any_ne(vull, vull);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_any_ne' is ambiguous
res_i = vec_any_ne(vull, vbll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_any_ne' is ambiguous
res_i = vec_any_ne(vbll, vll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_any_ne' is ambiguous
res_i = vec_any_ne(vbll, vull);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_any_ne' is ambiguous
res_i = vec_any_ne(vbll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpequd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpequd.p
// CHECK-PPC: error: call to 'vec_any_ne' is ambiguous
/* vec_all_ge */
res_i = vec_all_ge(vll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_all_ge' is ambiguous
res_i = vec_all_ge(vll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_all_ge' is ambiguous
res_i = vec_all_ge(vull, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_ge' is ambiguous
res_i = vec_all_ge(vull, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_ge' is ambiguous
res_i = vec_all_ge(vbll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_ge' is ambiguous
res_i = vec_all_ge(vbll, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_ge' is ambiguous
res_i = vec_all_ge(vbll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_ge' is ambiguous
/* vec_all_gt */
res_i = vec_all_gt(vll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_all_gt' is ambiguous
res_i = vec_all_gt(vll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_all_gt' is ambiguous
res_i = vec_all_gt(vull, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_gt' is ambiguous
res_i = vec_all_gt(vull, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_gt' is ambiguous
res_i = vec_all_gt(vbll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_gt' is ambiguous
res_i = vec_all_gt(vbll, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_gt' is ambiguous
res_i = vec_all_gt(vbll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_gt' is ambiguous
/* vec_all_le */
res_i = vec_all_le(vll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_all_le' is ambiguous
res_i = vec_all_le(vll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_all_le' is ambiguous
res_i = vec_all_le(vull, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_le' is ambiguous
res_i = vec_all_le(vull, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_le' is ambiguous
res_i = vec_all_le(vbll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_le' is ambiguous
res_i = vec_all_le(vbll, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_le' is ambiguous
res_i = vec_all_le(vbll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_le' is ambiguous
/* vec_all_lt */
res_i = vec_all_lt(vll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_all_lt' is ambiguous
res_i = vec_all_lt(vll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_all_lt' is ambiguous
res_i = vec_all_lt(vull, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_lt' is ambiguous
res_i = vec_all_lt(vull, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_lt' is ambiguous
res_i = vec_all_lt(vbll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_lt' is ambiguous
res_i = vec_all_lt(vbll, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_lt' is ambiguous
res_i = vec_all_lt(vbll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_all_lt' is ambiguous
/* vec_any_ge */
res_i = vec_any_ge(vll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_any_ge' is ambiguous
res_i = vec_any_ge(vll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_any_ge' is ambiguous
res_i = vec_any_ge(vull, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_ge' is ambiguous
res_i = vec_any_ge(vull, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_ge' is ambiguous
res_i = vec_any_ge(vbll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_ge' is ambiguous
res_i = vec_any_ge(vbll, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_ge' is ambiguous
res_i = vec_any_ge(vbll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_ge' is ambiguous
/* vec_any_gt */
res_i = vec_any_gt(vll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_any_gt' is ambiguous
res_i = vec_any_gt(vll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_any_gt' is ambiguous
res_i = vec_any_gt(vull, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_gt' is ambiguous
res_i = vec_any_gt(vull, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_gt' is ambiguous
res_i = vec_any_gt(vbll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_gt' is ambiguous
res_i = vec_any_gt(vbll, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_gt' is ambiguous
res_i = vec_any_gt(vbll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_gt' is ambiguous
/* vec_any_le */
res_i = vec_any_le(vll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_any_le' is ambiguous
res_i = vec_any_le(vll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_any_le' is ambiguous
res_i = vec_any_le(vull, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_le' is ambiguous
res_i = vec_any_le(vull, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_le' is ambiguous
res_i = vec_any_le(vbll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_le' is ambiguous
res_i = vec_any_le(vbll, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_le' is ambiguous
res_i = vec_any_le(vbll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_le' is ambiguous
/* vec_any_lt */
res_i = vec_any_lt(vll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_any_lt' is ambiguous
res_i = vec_any_lt(vll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd.p
// CHECK-PPC: error: call to 'vec_any_lt' is ambiguous
res_i = vec_any_lt(vull, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_lt' is ambiguous
res_i = vec_any_lt(vull, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_lt' is ambiguous
res_i = vec_any_lt(vbll, vll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_lt' is ambiguous
res_i = vec_any_lt(vbll, vull);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_lt' is ambiguous
res_i = vec_any_lt(vbll, vbll);
// CHECK: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-LE: @llvm.ppc.altivec.vcmpgtud.p
// CHECK-PPC: error: call to 'vec_any_lt' is ambiguous
/* vec_max */
res_vll = vec_max(vll, vll);
// CHECK: @llvm.ppc.altivec.vmaxsd
// CHECK-LE: @llvm.ppc.altivec.vmaxsd
// CHECK-PPC: error: call to 'vec_max' is ambiguous
res_vll = vec_max(vbll, vll);
// CHECK: @llvm.ppc.altivec.vmaxsd
// CHECK-LE: @llvm.ppc.altivec.vmaxsd
// CHECK-PPC: error: call to 'vec_max' is ambiguous
res_vll = vec_max(vll, vbll);
// CHECK: @llvm.ppc.altivec.vmaxsd
// CHECK-LE: @llvm.ppc.altivec.vmaxsd
// CHECK-PPC: error: call to 'vec_max' is ambiguous
res_vull = vec_max(vull, vull);
// CHECK: @llvm.ppc.altivec.vmaxud
// CHECK-LE: @llvm.ppc.altivec.vmaxud
// CHECK-PPC: error: call to 'vec_max' is ambiguous
res_vull = vec_max(vbll, vull);
// CHECK: @llvm.ppc.altivec.vmaxud
// CHECK-LE: @llvm.ppc.altivec.vmaxud
// CHECK-PPC: error: call to 'vec_max' is ambiguous
res_vull = vec_max(vull, vbll);
// CHECK: @llvm.ppc.altivec.vmaxud
// CHECK-LE: @llvm.ppc.altivec.vmaxud
// CHECK-PPC: error: call to 'vec_max' is ambiguous
/* vec_min */
res_vll = vec_min(vll, vll);
// CHECK: @llvm.ppc.altivec.vminsd
// CHECK-LE: @llvm.ppc.altivec.vminsd
// CHECK-PPC: error: call to 'vec_min' is ambiguous
res_vll = vec_min(vbll, vll);
// CHECK: @llvm.ppc.altivec.vminsd
// CHECK-LE: @llvm.ppc.altivec.vminsd
// CHECK-PPC: error: call to 'vec_min' is ambiguous
res_vll = vec_min(vll, vbll);
// CHECK: @llvm.ppc.altivec.vminsd
// CHECK-LE: @llvm.ppc.altivec.vminsd
// CHECK-PPC: error: call to 'vec_min' is ambiguous
res_vull = vec_min(vull, vull);
// CHECK: @llvm.ppc.altivec.vminud
// CHECK-LE: @llvm.ppc.altivec.vminud
// CHECK-PPC: error: call to 'vec_min' is ambiguous
res_vull = vec_min(vbll, vull);
// CHECK: @llvm.ppc.altivec.vminud
// CHECK-LE: @llvm.ppc.altivec.vminud
// CHECK-PPC: error: call to 'vec_min' is ambiguous
res_vull = vec_min(vull, vbll);
// CHECK: @llvm.ppc.altivec.vminud
// CHECK-LE: @llvm.ppc.altivec.vminud
// CHECK-PPC: error: call to 'vec_min' is ambiguous
/* vec_mule */
res_vll = vec_mule(vi, vi);
// CHECK: @llvm.ppc.altivec.vmulesw
// CHECK-LE: @llvm.ppc.altivec.vmulosw
// CHECK-PPC: error: call to 'vec_mule' is ambiguous
res_vull = vec_mule(vui , vui);
// CHECK: @llvm.ppc.altivec.vmuleuw
// CHECK-LE: @llvm.ppc.altivec.vmulouw
// CHECK-PPC: error: call to 'vec_mule' is ambiguous
/* vec_mulo */
res_vll = vec_mulo(vi, vi);
// CHECK: @llvm.ppc.altivec.vmulosw
// CHECK-LE: @llvm.ppc.altivec.vmulesw
// CHECK-PPC: error: call to 'vec_mulo' is ambiguous
res_vull = vec_mulo(vui, vui);
// CHECK: @llvm.ppc.altivec.vmulouw
// CHECK-LE: @llvm.ppc.altivec.vmuleuw
// CHECK-PPC: error: call to 'vec_mulo' is ambiguous
/* vec_rl */
res_vll = vec_rl(vll, vull);
// CHECK: @llvm.ppc.altivec.vrld
// CHECK-LE: @llvm.ppc.altivec.vrld
// CHECK-PPC: error: call to 'vec_rl' is ambiguous
res_vull = vec_rl(vull, vull);
// CHECK: @llvm.ppc.altivec.vrld
// CHECK-LE: @llvm.ppc.altivec.vrld
// CHECK-PPC: error: call to 'vec_rl' is ambiguous
/* vec_sl */
res_vll = vec_sl(vll, vull);
// CHECK: shl <2 x i64>
// CHECK-LE: shl <2 x i64>
// CHECK-PPC: error: call to 'vec_sl' is ambiguous
res_vull = vec_sl(vull, vull);
// CHECK: shl <2 x i64>
// CHECK-LE: shl <2 x i64>
// CHECK-PPC: error: call to 'vec_sl' is ambiguous
/* vec_sr */
res_vll = vec_sr(vll, vull);
// CHECK: ashr <2 x i64>
// CHECK-LE: ashr <2 x i64>
// CHECK-PPC: error: call to 'vec_sr' is ambiguous
res_vull = vec_sr(vull, vull);
// CHECK: lshr <2 x i64>
// CHECK-LE: lshr <2 x i64>
// CHECK-PPC: error: call to 'vec_sr' is ambiguous
/* vec_sra */
res_vll = vec_sra(vll, vull);
// CHECK: ashr <2 x i64>
// CHECK-LE: ashr <2 x i64>
// CHECK-PPC: error: call to 'vec_sra' is ambiguous
res_vull = vec_sra(vull, vull);
// CHECK: ashr <2 x i64>
// CHECK-LE: ashr <2 x i64>
// CHECK-PPC: error: call to 'vec_sra' is ambiguous
}

View File

@ -14,5 +14,5 @@ int main()
}
// FIXME: As noted in ms-intrin.cpp, it would be nice if we didn't have to
// hard-code the line number from altivec.h here.
// expected-note@altivec.h:2389 {{deprecated here}}
// expected-note@altivec.h:2524 {{deprecated here}}
// expected-note@altivec.h:2418 {{deprecated here}}
// expected-note@altivec.h:2553 {{deprecated here}}

View File

@ -73,12 +73,12 @@ vector bool v_b; // expected-warning {{type specifier missing
vector __bool v___b; // expected-warning {{type specifier missing, defaults to 'int'}}
// These should have errors.
__vector double vv_d1; // expected-error {{use of 'double' with '__vector' requires VSX support to be enabled (available on the POWER7 or later)}}
vector double v_d2; // expected-error {{use of 'double' with '__vector' requires VSX support to be enabled (available on the POWER7 or later)}}
__vector bool long long v_bll1; // expected-error {{use of 'long long' with '__vector bool' requires VSX support to be enabled (available on the POWER7 or later)}}
__vector __bool long long v_bll2; // expected-error {{use of 'long long' with '__vector bool' requires VSX support to be enabled (available on the POWER7 or later)}}
vector bool long long v_bll3; // expected-error {{use of 'long long' with '__vector bool' requires VSX support to be enabled (available on the POWER7 or later)}}
vector __bool long long v_bll4; // expected-error {{use of 'long long' with '__vector bool' requires VSX support to be enabled (available on the POWER7 or later)}}
__vector double vv_d1; // expected-error {{use of 'double' with '__vector' requires VSX support to be enabled (available on POWER7 or later)}}
vector double v_d2; // expected-error {{use of 'double' with '__vector' requires VSX support to be enabled (available on POWER7 or later)}}
__vector bool long long v_bll1; // expected-error {{use of 'long long' with '__vector bool' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled}}
__vector __bool long long v_bll2; // expected-error {{use of 'long long' with '__vector bool' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled}}
vector bool long long v_bll3; // expected-error {{use of 'long long' with '__vector bool' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled}}
vector __bool long long v_bll4; // expected-error {{use of 'long long' with '__vector bool' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled}}
__vector long double vv_ld3; // expected-error {{cannot use 'long double' with '__vector'}}
vector long double v_ld4; // expected-error {{cannot use 'long double' with '__vector'}}
vector bool float v_bf; // expected-error {{cannot use 'float' with '__vector bool'}}

View File

@ -71,12 +71,12 @@ __vector long double vv_ld; // expected-error {{cannot use 'long double'
vector long double v_ld; // expected-error {{cannot use 'long double' with '__vector'}}
// These should have errors.
__vector double vv_d1; // expected-error {{use of 'double' with '__vector' requires VSX support to be enabled (available on the POWER7 or later)}}
vector double v_d2; // expected-error {{use of 'double' with '__vector' requires VSX support to be enabled (available on the POWER7 or later)}}
__vector bool long long v_bll1; // expected-error {{use of 'long long' with '__vector bool' requires VSX support to be enabled (available on the POWER7 or later)}}
__vector __bool long long v_bll2; // expected-error {{use of 'long long' with '__vector bool' requires VSX support to be enabled (available on the POWER7 or later)}}
vector bool long long v_bll3; // expected-error {{use of 'long long' with '__vector bool' requires VSX support to be enabled (available on the POWER7 or later)}}
vector __bool long long v_bll4; // expected-error {{use of 'long long' with '__vector bool' requires VSX support to be enabled (available on the POWER7 or later)}}
__vector double vv_d1; // expected-error {{use of 'double' with '__vector' requires VSX support to be enabled (available on POWER7 or later)}}
vector double v_d2; // expected-error {{use of 'double' with '__vector' requires VSX support to be enabled (available on POWER7 or later)}}
__vector bool long long v_bll1; // expected-error {{use of 'long long' with '__vector bool' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled}}
__vector __bool long long v_bll2; // expected-error {{use of 'long long' with '__vector bool' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled}}
vector bool long long v_bll3; // expected-error {{use of 'long long' with '__vector bool' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled}}
vector __bool long long v_bll4; // expected-error {{use of 'long long' with '__vector bool' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled}}
__vector long double vv_ld3; // expected-error {{cannot use 'long double' with '__vector'}}
vector long double v_ld4; // expected-error {{cannot use 'long double' with '__vector'}}
vector bool v_b; // expected-error {{C++ requires a type specifier for all declarations}}
@ -194,3 +194,4 @@ public:
template<typename... Args> void PR16874() {
(void) (Args::foo()...); // expected-error {{expression contains unexpanded parameter pack 'Args'}} expected-error {{expected ')'}} expected-note {{to match this '('}}
}