mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-25 16:50:49 +08:00
aarch64.c (aarch64_invalid_conversion): New function for target hook.
gcc/ChangeLog: 2020-01-10 Stam Markianos-Wright <stam.markianos-wright@arm.com> * config/aarch64/aarch64.c (aarch64_invalid_conversion): New function for target hook. (aarch64_invalid_unary_op): New function for target hook. (aarch64_invalid_binary_op): New function for target hook. gcc/testsuite/ChangeLog: 2020-01-10 Stam Markianos-Wright <stam.markianos-wright@arm.com> * g++.target/aarch64/bfloat_cpp_typecheck.C: New test. * gcc.target/aarch64/bfloat16_scalar_typecheck.c: New test. * gcc.target/aarch64/bfloat16_vector_typecheck_1.c: New test. * gcc.target/aarch64/bfloat16_vector_typecheck_2.c: New test. From-SVN: r280130
This commit is contained in:
parent
abbe1ed273
commit
9869896730
@ -1,3 +1,10 @@
|
||||
2020-01-10 Stam Markianos-Wright <stam.markianos-wright@arm.com>
|
||||
|
||||
* config/aarch64/aarch64.c (aarch64_invalid_conversion): New function
|
||||
for target hook.
|
||||
(aarch64_invalid_unary_op): New function for target hook.
|
||||
(aarch64_invalid_binary_op): New function for target hook.
|
||||
|
||||
2020-01-10 Stam Markianos-Wright <stam.markianos-wright@arm.com>
|
||||
|
||||
* config.gcc: Add arm_bf16.h.
|
||||
|
@ -21751,6 +21751,55 @@ aarch64_stack_protect_guard (void)
|
||||
return NULL_TREE;
|
||||
}
|
||||
|
||||
/* Return the diagnostic message string if conversion from FROMTYPE to
|
||||
TOTYPE is not allowed, NULL otherwise. */
|
||||
|
||||
static const char *
|
||||
aarch64_invalid_conversion (const_tree fromtype, const_tree totype)
|
||||
{
|
||||
if (element_mode (fromtype) != element_mode (totype))
|
||||
{
|
||||
/* Do no allow conversions to/from BFmode scalar types. */
|
||||
if (TYPE_MODE (fromtype) == BFmode)
|
||||
return N_("invalid conversion from type %<bfloat16_t%>");
|
||||
if (TYPE_MODE (totype) == BFmode)
|
||||
return N_("invalid conversion to type %<bfloat16_t%>");
|
||||
}
|
||||
|
||||
/* Conversion allowed. */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Return the diagnostic message string if the unary operation OP is
|
||||
not permitted on TYPE, NULL otherwise. */
|
||||
|
||||
static const char *
|
||||
aarch64_invalid_unary_op (int op, const_tree type)
|
||||
{
|
||||
/* Reject all single-operand operations on BFmode except for &. */
|
||||
if (element_mode (type) == BFmode && op != ADDR_EXPR)
|
||||
return N_("operation not permitted on type %<bfloat16_t%>");
|
||||
|
||||
/* Operation allowed. */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Return the diagnostic message string if the binary operation OP is
|
||||
not permitted on TYPE1 and TYPE2, NULL otherwise. */
|
||||
|
||||
static const char *
|
||||
aarch64_invalid_binary_op (int op ATTRIBUTE_UNUSED, const_tree type1,
|
||||
const_tree type2)
|
||||
{
|
||||
/* Reject all 2-operand operations on BFmode. */
|
||||
if (element_mode (type1) == BFmode
|
||||
|| element_mode (type2) == BFmode)
|
||||
return N_("operation not permitted on type %<bfloat16_t%>");
|
||||
|
||||
/* Operation allowed. */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Implement TARGET_ASM_FILE_END for AArch64. This adds the AArch64 GNU NOTE
|
||||
section at the end if needed. */
|
||||
#define GNU_PROPERTY_AARCH64_FEATURE_1_AND 0xc0000000
|
||||
@ -22001,6 +22050,15 @@ aarch64_libgcc_floating_mode_supported_p
|
||||
#undef TARGET_MANGLE_TYPE
|
||||
#define TARGET_MANGLE_TYPE aarch64_mangle_type
|
||||
|
||||
#undef TARGET_INVALID_CONVERSION
|
||||
#define TARGET_INVALID_CONVERSION aarch64_invalid_conversion
|
||||
|
||||
#undef TARGET_INVALID_UNARY_OP
|
||||
#define TARGET_INVALID_UNARY_OP aarch64_invalid_unary_op
|
||||
|
||||
#undef TARGET_INVALID_BINARY_OP
|
||||
#define TARGET_INVALID_BINARY_OP aarch64_invalid_binary_op
|
||||
|
||||
#undef TARGET_VERIFY_TYPE_CONTEXT
|
||||
#define TARGET_VERIFY_TYPE_CONTEXT aarch64_verify_type_context
|
||||
|
||||
|
@ -1,3 +1,10 @@
|
||||
2020-01-10 Stam Markianos-Wright <stam.markianos-wright@arm.com>
|
||||
|
||||
* g++.target/aarch64/bfloat_cpp_typecheck.C: New test.
|
||||
* gcc.target/aarch64/bfloat16_scalar_typecheck.c: New test.
|
||||
* gcc.target/aarch64/bfloat16_vector_typecheck_1.c: New test.
|
||||
* gcc.target/aarch64/bfloat16_vector_typecheck_2.c: New test.
|
||||
|
||||
2020-01-10 Stam Markianos-Wright <stam.markianos-wright@arm.com>
|
||||
|
||||
* g++.dg/abi/mangle-neon-aarch64.C: Add Bfloat SIMD types to test.
|
||||
|
14
gcc/testsuite/g++.target/aarch64/bfloat_cpp_typecheck.C
Normal file
14
gcc/testsuite/g++.target/aarch64/bfloat_cpp_typecheck.C
Normal file
@ -0,0 +1,14 @@
|
||||
/* { dg-do assemble { target { aarch64*-*-* } } } */
|
||||
/* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
|
||||
/* { dg-add-options arm_v8_2a_bf16_neon } */
|
||||
/* { dg-additional-options "-O3 --save-temps" } */
|
||||
|
||||
#include <arm_neon.h>
|
||||
|
||||
void foo (void)
|
||||
{
|
||||
bfloat16_t (); /* { dg-bogus {invalid conversion to type 'bfloat16_t'} "" { xfail *-*-* } } */
|
||||
bfloat16_t a = bfloat16_t(); /* { dg-bogus {invalid conversion to type 'bfloat16_t'} "" { xfail *-*-* } } */
|
||||
bfloat16_t (0x1234); /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16_t (0.1); /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
}
|
219
gcc/testsuite/gcc.target/aarch64/bfloat16_scalar_typecheck.c
Normal file
219
gcc/testsuite/gcc.target/aarch64/bfloat16_scalar_typecheck.c
Normal file
@ -0,0 +1,219 @@
|
||||
/* { dg-do assemble { target { aarch64*-*-* } } } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
|
||||
/* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
|
||||
/* { dg-add-options arm_v8_2a_bf16_neon } */
|
||||
/* { dg-additional-options "-Wno-pedantic -O3 --save-temps" } */
|
||||
|
||||
#include <arm_neon.h>
|
||||
|
||||
bfloat16_t glob_bfloat;
|
||||
|
||||
int is_an_int;
|
||||
short is_a_short_int;
|
||||
float is_a_float;
|
||||
float is_a_float16;
|
||||
double is_a_double;
|
||||
|
||||
float *float_ptr;
|
||||
|
||||
bfloat16_t foo1 (void) { return (bfloat16_t) 0x1234; } /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16_t foo2 (void) { return (bfloat16_t) (short) 0x1234; } /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
|
||||
bfloat16_t footest (bfloat16_t scalar0)
|
||||
{
|
||||
|
||||
/* Initialisation */
|
||||
|
||||
bfloat16_t scalar1_1;
|
||||
bfloat16_t scalar1_2 = glob_bfloat;
|
||||
bfloat16_t scalar1_3 = 0; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16_t scalar1_4 = 0.1; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16_t scalar1_5 = is_a_float; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16_t scalar1_6 = is_an_int; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16_t scalar1_7 = is_a_float16; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16_t scalar1_8 = is_a_double; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16_t scalar1_9 = is_a_short_int; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
|
||||
int initi_1_1 = glob_bfloat; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
float initi_1_2 = glob_bfloat; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
float16_t initi_1_3 = glob_bfloat; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
short initi_1_4 = glob_bfloat; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
double initi_1_5 = glob_bfloat; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
|
||||
bfloat16_t scalar2_1 = {}; /* { dg-error {empty scalar initializer} } */
|
||||
bfloat16_t scalar2_2 = { glob_bfloat };
|
||||
bfloat16_t scalar2_3 = { 0 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16_t scalar2_4 = { 0.1 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16_t scalar2_5 = { is_a_float }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16_t scalar2_6 = { is_an_int }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16_t scalar2_7 = { is_a_float16 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16_t scalar2_8 = { is_a_double }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16_t scalar2_9 = { is_a_short_int }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
|
||||
int initi_2_1 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
float initi_2_2 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
float16_t initi_2_3 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
short initi_2_4 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
double initi_2_5 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
|
||||
/* Assignments. */
|
||||
|
||||
glob_bfloat = glob_bfloat;
|
||||
glob_bfloat = 0; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
glob_bfloat = 0.1; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
glob_bfloat = is_a_float; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
glob_bfloat = is_an_int; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
glob_bfloat = is_a_float16; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
glob_bfloat = is_a_double; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
glob_bfloat = is_a_short_int; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
|
||||
is_an_int = glob_bfloat; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
is_a_float = glob_bfloat; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
is_a_float16 = glob_bfloat; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
is_a_double = glob_bfloat; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
is_a_short_int = glob_bfloat; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
|
||||
/* Casting. */
|
||||
|
||||
(void) glob_bfloat;
|
||||
(bfloat16_t) glob_bfloat;
|
||||
|
||||
(int) glob_bfloat; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
(float) glob_bfloat; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
(float16_t) glob_bfloat; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
(double) glob_bfloat; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
(short) glob_bfloat; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
|
||||
(bfloat16_t) is_an_int; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
(bfloat16_t) is_a_float; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
(bfloat16_t) is_a_float16; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
(bfloat16_t) is_a_double; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
(bfloat16_t) is_a_short_int; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
|
||||
/* Compound literals. */
|
||||
|
||||
(bfloat16_t) {}; /* { dg-error {empty scalar initializer} } */
|
||||
(bfloat16_t) { glob_bfloat };
|
||||
(bfloat16_t) { 0 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
(bfloat16_t) { 0.1 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
(bfloat16_t) { is_a_float }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
(bfloat16_t) { is_an_int }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
(bfloat16_t) { is_a_float16 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
(bfloat16_t) { is_a_double }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
(bfloat16_t) { is_a_short_int }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
|
||||
(int) { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
(float) { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
(float16_t) { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
(double) { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
(short) { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
|
||||
/* Arrays and Structs. */
|
||||
|
||||
typedef bfloat16_t array_type[2];
|
||||
extern bfloat16_t extern_array[];
|
||||
|
||||
bfloat16_t array[2];
|
||||
bfloat16_t zero_length_array[0];
|
||||
bfloat16_t empty_init_array[] = {};
|
||||
typedef bfloat16_t some_other_type[is_an_int];
|
||||
|
||||
struct struct1 {
|
||||
bfloat16_t a;
|
||||
};
|
||||
|
||||
union union1 {
|
||||
bfloat16_t a;
|
||||
};
|
||||
|
||||
/* Addressing and dereferencing. */
|
||||
|
||||
bfloat16_t *bfloat_ptr = &scalar0;
|
||||
scalar0 = *bfloat_ptr;
|
||||
|
||||
/* Pointer assignment. */
|
||||
|
||||
bfloat16_t *bfloat_ptr2 = bfloat_ptr;
|
||||
bfloat16_t *bfloat_ptr3 = array;
|
||||
|
||||
/* Pointer arithmetic. */
|
||||
|
||||
++bfloat_ptr;
|
||||
--bfloat_ptr;
|
||||
bfloat_ptr++;
|
||||
bfloat_ptr--;
|
||||
bfloat_ptr += 1;
|
||||
bfloat_ptr -= 1;
|
||||
bfloat_ptr - bfloat_ptr2;
|
||||
bfloat_ptr = &bfloat_ptr3[0];
|
||||
bfloat_ptr = &bfloat_ptr3[1];
|
||||
|
||||
/* Simple comparison. */
|
||||
scalar0 > glob_bfloat; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
glob_bfloat == scalar0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
scalar0 > is_a_float; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
is_a_float == scalar0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
scalar0 > 0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
0 == scalar0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
scalar0 > 0.1; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
0.1 == scalar0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
scalar0 > is_an_int; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
is_an_int == scalar0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
|
||||
/* Pointer comparison. */
|
||||
|
||||
bfloat_ptr == &scalar0;
|
||||
bfloat_ptr != &scalar0;
|
||||
bfloat_ptr < &scalar0;
|
||||
bfloat_ptr <= &scalar0;
|
||||
bfloat_ptr > &scalar0;
|
||||
bfloat_ptr >= &scalar0;
|
||||
bfloat_ptr == bfloat_ptr2;
|
||||
bfloat_ptr != bfloat_ptr2;
|
||||
bfloat_ptr < bfloat_ptr2;
|
||||
bfloat_ptr <= bfloat_ptr2;
|
||||
bfloat_ptr > bfloat_ptr2;
|
||||
bfloat_ptr >= bfloat_ptr2;
|
||||
|
||||
/* Conditional expressions. */
|
||||
|
||||
0 ? scalar0 : scalar0;
|
||||
0 ? scalar0 : is_a_float; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
0 ? is_a_float : scalar0; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
0 ? scalar0 : 0; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
0 ? 0 : scalar0; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
0 ? 0.1 : scalar0; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
0 ? scalar0 : 0.1; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
0 ? bfloat_ptr : bfloat_ptr2;
|
||||
0 ? bfloat_ptr : float_ptr; /* { dg-error {pointer type mismatch in conditional expression} } */
|
||||
0 ? float_ptr : bfloat_ptr; /* { dg-error {pointer type mismatch in conditional expression} } */
|
||||
|
||||
scalar0 ? scalar0 : scalar0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
scalar0 ? is_a_float : scalar0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
scalar0 ? scalar0 : is_a_float; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
scalar0 ? is_a_float : is_a_float; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
|
||||
/* Unary operators. */
|
||||
|
||||
+scalar0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
-scalar0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
~scalar0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
!scalar0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
*scalar0; /* { dg-error {invalid type argument of unary '\*'} } */
|
||||
__real scalar0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
__imag scalar0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
++scalar0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
--scalar0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
scalar0++; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
scalar0--; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
|
||||
/* Binary arithmetic operations. */
|
||||
|
||||
scalar0 = glob_bfloat + *bfloat_ptr; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
scalar0 = glob_bfloat + 0.1; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
scalar0 = glob_bfloat + 0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
scalar0 = glob_bfloat + is_a_float; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
|
||||
return scalar0;
|
||||
}
|
||||
|
262
gcc/testsuite/gcc.target/aarch64/bfloat16_vector_typecheck_1.c
Normal file
262
gcc/testsuite/gcc.target/aarch64/bfloat16_vector_typecheck_1.c
Normal file
@ -0,0 +1,262 @@
|
||||
/* { dg-do assemble { target { aarch64*-*-* } } } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
|
||||
/* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
|
||||
/* { dg-add-options arm_v8_2a_bf16_neon } */
|
||||
/* { dg-additional-options "-O3 --save-temps -Wno-pedantic" } */
|
||||
#include <arm_neon.h>
|
||||
|
||||
bfloat16_t glob_bfloat;
|
||||
bfloat16x4_t glob_bfloat_vec;
|
||||
|
||||
float32x4_t is_a_float_vec;
|
||||
float32x2_t is_a_float_pair;
|
||||
|
||||
float16x4_t *float_ptr;
|
||||
float16x4_t is_a_float16_vec;
|
||||
|
||||
int32x4_t is_an_int_vec;
|
||||
int32x2_t is_an_int_pair;
|
||||
int16x4_t is_a_short_vec;
|
||||
|
||||
int is_an_int;
|
||||
short is_a_short_int;
|
||||
float is_a_float;
|
||||
float is_a_float16;
|
||||
double is_a_double;
|
||||
|
||||
/* Create a vector of 2 bfloat16_t. */
|
||||
typedef bfloat16_t v2bf __attribute__((vector_size(4)));
|
||||
v2bf foo1 (void) { return (v2bf) 0x12345678; }
|
||||
bfloat16x4_t foo2 (void) { return (bfloat16x4_t) 0x1234567812345678; }
|
||||
|
||||
bfloat16x4_t footest (bfloat16x4_t vector0)
|
||||
{
|
||||
/* Initialisation */
|
||||
|
||||
bfloat16x4_t vector1_1;
|
||||
bfloat16x4_t vector1_2 = glob_bfloat_vec;
|
||||
bfloat16x4_t vector1_3 = is_a_float_vec; /* { dg-error {incompatible types when initializing type 'bfloat16x4_t' using type 'float32x4_t'} } */
|
||||
bfloat16x4_t vector1_4 = is_an_int_vec; /* { dg-error {incompatible types when initializing type 'bfloat16x4_t' using type 'int32x4_t'} } */
|
||||
bfloat16x4_t vector1_5 = is_a_float16_vec; /* { dg-error {incompatible types when initializing type 'bfloat16x4_t' using type 'float16x4_t'} } */
|
||||
bfloat16x4_t vector1_6 = is_a_float_pair; /* { dg-error {incompatible types when initializing type 'bfloat16x4_t' using type 'float32x2_t'} } */
|
||||
bfloat16x4_t vector1_7 = is_an_int_pair; /* { dg-error {incompatible types when initializing type 'bfloat16x4_t' using type 'int32x2_t'} } */
|
||||
bfloat16x4_t vector1_8 = is_a_short_vec; /* { dg-error {incompatible types when initializing type 'bfloat16x4_t' using type 'int16x4_t'} } */
|
||||
|
||||
int32x4_t initi_1_1 = glob_bfloat_vec; /* { dg-error {incompatible types when initializing type 'int32x4_t' using type 'bfloat16x4_t'} } */
|
||||
float32x4_t initi_1_2 = glob_bfloat_vec; /* { dg-error {incompatible types when initializing type 'float32x4_t' using type 'bfloat16x4_t'} } */
|
||||
float16x4_t initi_1_3 = glob_bfloat_vec; /* { dg-error {incompatible types when initializing type 'float16x4_t' using type 'bfloat16x4_t'} } */
|
||||
float32x2_t initi_1_4 = glob_bfloat_vec; /* { dg-error {incompatible types when initializing type 'float32x2_t' using type 'bfloat16x4_t'} } */
|
||||
int32x2_t initi_1_5 = glob_bfloat_vec; /* { dg-error {incompatible types when initializing type 'int32x2_t' using type 'bfloat16x4_t'} } */
|
||||
int16x4_t initi_1_6 = glob_bfloat_vec; /* { dg-error {incompatible types when initializing type 'int16x4_t' using type 'bfloat16x4_t'} } */
|
||||
|
||||
bfloat16x4_t vector2_1 = {};
|
||||
bfloat16x4_t vector2_2 = { glob_bfloat };
|
||||
bfloat16x4_t vector2_3 = { glob_bfloat, glob_bfloat, glob_bfloat, glob_bfloat };
|
||||
bfloat16x4_t vector2_4 = { 0 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16x4_t vector2_5 = { 0.1 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16x4_t vector2_6 = { is_a_float16 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16x4_t vector2_7 = { is_a_float }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16x4_t vector2_8 = { is_an_int }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16x4_t vector2_9 = { is_a_short_int }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16x4_t vector2_10 = { 0.0, 0, is_a_short_int, is_a_float }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
|
||||
int32x4_t initi_2_1 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
float32x4_t initi_2_2 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
float16x4_t initi_2_3 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
float32x2_t initi_2_4 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
int32x2_t initi_2_5 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
int16x4_t initi_2_6 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
|
||||
/* Assignments to/from vectors. */
|
||||
|
||||
glob_bfloat_vec = glob_bfloat_vec;
|
||||
glob_bfloat_vec = 0; /* { dg-error {incompatible types when assigning to type 'bfloat16x4_t' from type 'int'} } */
|
||||
glob_bfloat_vec = 0.1; /* { dg-error {incompatible types when assigning to type 'bfloat16x4_t' from type 'double'} } */
|
||||
glob_bfloat_vec = is_a_float_vec; /* { dg-error {incompatible types when assigning to type 'bfloat16x4_t' from type 'float32x4_t'} } */
|
||||
glob_bfloat_vec = is_an_int_vec; /* { dg-error {incompatible types when assigning to type 'bfloat16x4_t' from type 'int32x4_t'} } */
|
||||
glob_bfloat_vec = is_a_float16_vec; /* { dg-error {incompatible types when assigning to type 'bfloat16x4_t' from type 'float16x4_t'} } */
|
||||
glob_bfloat_vec = is_a_float_pair; /* { dg-error {incompatible types when assigning to type 'bfloat16x4_t' from type 'float32x2_t'} } */
|
||||
glob_bfloat_vec = is_an_int_pair; /* { dg-error {incompatible types when assigning to type 'bfloat16x4_t' from type 'int32x2_t'} } */
|
||||
glob_bfloat_vec = is_a_short_vec; /* { dg-error {incompatible types when assigning to type 'bfloat16x4_t' from type 'int16x4_t'} } */
|
||||
|
||||
is_an_int_vec = glob_bfloat_vec; /* { dg-error {incompatible types when assigning to type 'int32x4_t' from type 'bfloat16x4_t'} } */
|
||||
is_a_float_vec = glob_bfloat_vec; /* { dg-error {incompatible types when assigning to type 'float32x4_t' from type 'bfloat16x4_t'} } */
|
||||
is_a_float16_vec = glob_bfloat_vec; /* { dg-error {incompatible types when assigning to type 'float16x4_t' from type 'bfloat16x4_t'} } */
|
||||
is_a_float_pair = glob_bfloat_vec; /* { dg-error {incompatible types when assigning to type 'float32x2_t' from type 'bfloat16x4_t'} } */
|
||||
is_an_int_pair = glob_bfloat_vec; /* { dg-error {incompatible types when assigning to type 'int32x2_t' from type 'bfloat16x4_t'} } */
|
||||
is_a_short_vec = glob_bfloat_vec;/* { dg-error {incompatible types when assigning to type 'int16x4_t' from type 'bfloat16x4_t'} } */
|
||||
|
||||
/* Assignments to/from elements. */
|
||||
|
||||
vector2_3[0] = glob_bfloat;
|
||||
vector2_3[0] = is_an_int; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
vector2_3[0] = is_a_short_int; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
vector2_3[0] = is_a_float; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
vector2_3[0] = is_a_float16; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
vector2_3[0] = 0; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
vector2_3[0] = 0.1; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
|
||||
glob_bfloat = vector2_3[0];
|
||||
is_an_int = vector2_3[0]; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
is_a_short_int = vector2_3[0]; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
is_a_float = vector2_3[0]; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
is_a_float16 = vector2_3[0]; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
|
||||
/* Compound literals. */
|
||||
|
||||
(bfloat16x4_t) {};
|
||||
|
||||
(bfloat16x4_t) { 0 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
(bfloat16x4_t) { 0.1 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
(bfloat16x4_t) { is_a_float_vec }; /* { dg-error {incompatible types when initializing type '__bf16' using type 'float32x4_t'} } */
|
||||
(bfloat16x4_t) { is_an_int_vec }; /* { dg-error {incompatible types when initializing type '__bf16' using type 'int32x4_t'} } */
|
||||
(bfloat16x4_t) { is_a_float_pair }; /* { dg-error {incompatible types when initializing type '__bf16' using type 'float32x2_t'} } */
|
||||
(bfloat16x4_t) { is_an_int_pair }; /* { dg-error {incompatible types when initializing type '__bf16' using type 'int32x2_t'} } */
|
||||
(bfloat16x4_t) { is_a_float16_vec }; /* { dg-error {incompatible types when initializing type '__bf16' using type 'float16x4_t'} } */
|
||||
(bfloat16x4_t) { is_a_short_vec }; /* { dg-error {incompatible types when initializing type '__bf16' using type 'int16x4_t'} } */
|
||||
|
||||
(bfloat16x4_t) { glob_bfloat_vec }; /* { dg-error {incompatible types when initializing type '__bf16' using type 'bfloat16x4_t'} } */
|
||||
(int32x4_t) { glob_bfloat_vec }; /* { dg-error {incompatible types when initializing type 'int' using type 'bfloat16x4_t'} } */
|
||||
(float32x4_t) { glob_bfloat_vec }; /* { dg-error {incompatible types when initializing type 'float' using type 'bfloat16x4_t'} } */
|
||||
(int32x2_t) { glob_bfloat_vec }; /* { dg-error {incompatible types when initializing type 'int' using type 'bfloat16x4_t'} } */
|
||||
(float16x4_t) { glob_bfloat_vec }; /* { dg-error {incompatible types when initializing type '__fp16' using type 'bfloat16x4_t'} } */
|
||||
(int16x4_t) { glob_bfloat_vec }; /* { dg-error {incompatible types when initializing type 'short int' using type 'bfloat16x4_t'} } */
|
||||
|
||||
/* Casting. */
|
||||
|
||||
(void) glob_bfloat_vec;
|
||||
(bfloat16x4_t) glob_bfloat_vec;
|
||||
|
||||
(bfloat16_t) glob_bfloat_vec; /* { dg-error {aggregate value used where a floating-point was expected} } */
|
||||
(short) glob_bfloat_vec; /* { dg-error {cannot convert a vector of type 'bfloat16x4_t' to type 'short int' which has different size} } */
|
||||
(int) glob_bfloat_vec; /* { dg-error {cannot convert a vector of type 'bfloat16x4_t' to type 'int' which has different size} } */
|
||||
(float16_t) glob_bfloat_vec; /* { dg-error {aggregate value used where a floating-point was expected} } */
|
||||
(float) glob_bfloat_vec; /* { dg-error {aggregate value used where a floating-point was expected} } */
|
||||
(double) glob_bfloat_vec; /* { dg-error {aggregate value used where a floating-point was expected} } */
|
||||
|
||||
(int32x4_t) glob_bfloat_vec; /* { dg-error {cannot convert a value of type 'bfloat16x4_t' to vector type '__Int32x4_t' which has different size} } */
|
||||
(float32x4_t) glob_bfloat_vec; /* { dg-error {cannot convert a value of type 'bfloat16x4_t' to vector type '__Float32x4_t' which has different size} } */
|
||||
(float16x4_t) glob_bfloat_vec;
|
||||
(int32x2_t) glob_bfloat_vec;
|
||||
(float32x2_t) glob_bfloat_vec;
|
||||
(int16x4_t) glob_bfloat_vec;
|
||||
|
||||
(bfloat16x4_t) is_an_int_vec; /* { dg-error {cannot convert a value of type 'int32x4_t' to vector type '__Bfloat16x4_t' which has different size} } */
|
||||
(bfloat16x4_t) is_a_float_vec; /* { dg-error {cannot convert a value of type 'float32x4_t' to vector type '__Bfloat16x4_t' which has different size} } */
|
||||
(bfloat16x4_t) is_a_float16_vec;
|
||||
(bfloat16x4_t) is_an_int_pair;
|
||||
(bfloat16x4_t) is_a_float_pair;
|
||||
(bfloat16x4_t) is_a_short_vec;
|
||||
(bfloat16x4_t) is_a_double; /* { dg-error {cannot convert value to a vector} } */
|
||||
|
||||
/* Arrays and Structs. */
|
||||
|
||||
typedef bfloat16x4_t array_type[2];
|
||||
extern bfloat16x4_t extern_array[];
|
||||
|
||||
bfloat16x4_t array[2];
|
||||
bfloat16x4_t zero_length_array[0];
|
||||
bfloat16x4_t empty_init_array[] = {};
|
||||
typedef bfloat16x4_t some_other_type[is_an_int];
|
||||
|
||||
struct struct1 {
|
||||
bfloat16x4_t a;
|
||||
};
|
||||
|
||||
union union1 {
|
||||
bfloat16x4_t a;
|
||||
};
|
||||
|
||||
/* Addressing and dereferencing. */
|
||||
|
||||
bfloat16x4_t *bfloat_ptr = &vector0;
|
||||
vector0 = *bfloat_ptr;
|
||||
|
||||
/* Pointer assignment. */
|
||||
|
||||
bfloat16x4_t *bfloat_ptr2 = bfloat_ptr;
|
||||
bfloat16x4_t *bfloat_ptr3 = array;
|
||||
|
||||
/* Pointer arithmetic. */
|
||||
|
||||
++bfloat_ptr;
|
||||
--bfloat_ptr;
|
||||
bfloat_ptr++;
|
||||
bfloat_ptr--;
|
||||
bfloat_ptr += 1;
|
||||
bfloat_ptr -= 1;
|
||||
bfloat_ptr - bfloat_ptr2;
|
||||
bfloat_ptr = &bfloat_ptr3[0];
|
||||
bfloat_ptr = &bfloat_ptr3[1];
|
||||
|
||||
/* Simple comparison. */
|
||||
vector0 > glob_bfloat_vec; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
glob_bfloat_vec == vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0 > is_a_float_vec; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
is_a_float_vec == vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0 > 0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
0 == vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0 > 0.1; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
0.1 == vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0 > is_an_int_vec; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
is_an_int_vec == vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
|
||||
/* Pointer comparison. */
|
||||
|
||||
bfloat_ptr == &vector0;
|
||||
bfloat_ptr != &vector0;
|
||||
bfloat_ptr < &vector0;
|
||||
bfloat_ptr <= &vector0;
|
||||
bfloat_ptr > &vector0;
|
||||
bfloat_ptr >= &vector0;
|
||||
bfloat_ptr == bfloat_ptr2;
|
||||
bfloat_ptr != bfloat_ptr2;
|
||||
bfloat_ptr < bfloat_ptr2;
|
||||
bfloat_ptr <= bfloat_ptr2;
|
||||
bfloat_ptr > bfloat_ptr2;
|
||||
bfloat_ptr >= bfloat_ptr2;
|
||||
|
||||
/* Conditional expressions. */
|
||||
|
||||
0 ? vector0 : vector0;
|
||||
0 ? vector0 : is_a_float_vec; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? is_a_float_vec : vector0; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? vector0 : is_a_float16_vec; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? is_a_float16_vec : vector0; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? vector0 : 0; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? 0 : vector0; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? 0.1 : vector0; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? vector0 : 0.1; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? bfloat_ptr : bfloat_ptr2;
|
||||
0 ? bfloat_ptr : float_ptr; /* { dg-error {pointer type mismatch in conditional expression} } */
|
||||
0 ? float_ptr : bfloat_ptr; /* { dg-error {pointer type mismatch in conditional expression} } */
|
||||
|
||||
vector0 ? vector0 : vector0; /* { dg-error {used vector type where scalar is required} } */
|
||||
vector0 ? is_a_float16_vec : vector0; /* { dg-error {used vector type where scalar is required} } */
|
||||
vector0 ? vector0 : is_a_float16_vec; /* { dg-error {used vector type where scalar is required} } */
|
||||
vector0 ? is_a_float16_vec : is_a_float16_vec; /* { dg-error {used vector type where scalar is required} } */
|
||||
|
||||
/* Unary operators. */
|
||||
|
||||
+vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
-vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
~vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
!vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
*vector0; /* { dg-error {invalid type argument of unary '\*'} } */
|
||||
__real vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
__imag vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
++vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
--vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0++; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0--; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
|
||||
/* Binary arithmetic operations. */
|
||||
|
||||
vector0 = glob_bfloat_vec + *bfloat_ptr; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0 = glob_bfloat_vec + 0.1; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0 = glob_bfloat_vec + 0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0 = glob_bfloat_vec + is_a_float_vec; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
|
||||
return vector0;
|
||||
}
|
||||
|
260
gcc/testsuite/gcc.target/aarch64/bfloat16_vector_typecheck_2.c
Normal file
260
gcc/testsuite/gcc.target/aarch64/bfloat16_vector_typecheck_2.c
Normal file
@ -0,0 +1,260 @@
|
||||
/* { dg-do assemble { target { aarch64*-*-* } } } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
|
||||
/* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
|
||||
/* { dg-add-options arm_v8_2a_bf16_neon } */
|
||||
/* { dg-additional-options "-O3 --save-temps -Wno-pedantic" } */
|
||||
#include <arm_neon.h>
|
||||
|
||||
bfloat16_t glob_bfloat;
|
||||
bfloat16x8_t glob_bfloat_vec;
|
||||
|
||||
float32x4_t is_a_float_vec;
|
||||
float64x2_t is_a_double_pair;
|
||||
|
||||
float16x8_t *float_ptr;
|
||||
float16x8_t is_a_float16_vec;
|
||||
|
||||
int32x4_t is_an_int_vec;
|
||||
int64x2_t is_a_long_int_pair;
|
||||
int16x8_t is_a_short_vec;
|
||||
|
||||
int is_an_int;
|
||||
short is_a_short_int;
|
||||
float is_a_float;
|
||||
float is_a_float16;
|
||||
double is_a_double;
|
||||
|
||||
bfloat16x8_t foo3 (void) { return (bfloat16x8_t) 0x12345678123456781234567812345678; }
|
||||
/* { dg-error {integer constant is too large for its type} "" {target *-*-*} 27 } */
|
||||
/* { dg-error {cannot convert a value of type 'long int' to vector type '__Bfloat16x8_t' which has different size} "" {target *-*-*} 27 } */
|
||||
|
||||
bfloat16x8_t footest (bfloat16x8_t vector0)
|
||||
{
|
||||
/* Initialisation */
|
||||
|
||||
bfloat16x8_t vector1_1;
|
||||
bfloat16x8_t vector1_2 = glob_bfloat_vec;
|
||||
bfloat16x8_t vector1_3 = is_a_float_vec; /* { dg-error {incompatible types when initializing type 'bfloat16x8_t' using type 'float32x4_t'} } */
|
||||
bfloat16x8_t vector1_4 = is_an_int_vec; /* { dg-error {incompatible types when initializing type 'bfloat16x8_t' using type 'int32x4_t'} } */
|
||||
bfloat16x8_t vector1_5 = is_a_float16_vec; /* { dg-error {incompatible types when initializing type 'bfloat16x8_t' using type 'float16x8_t'} } */
|
||||
bfloat16x8_t vector1_6 = is_a_double_pair; /* { dg-error {incompatible types when initializing type 'bfloat16x8_t' using type 'float64x2_t'} } */
|
||||
bfloat16x8_t vector1_7 = is_a_long_int_pair; /* { dg-error {incompatible types when initializing type 'bfloat16x8_t' using type 'int64x2_t'} } */
|
||||
bfloat16x8_t vector1_8 = is_a_short_vec; /* { dg-error {incompatible types when initializing type 'bfloat16x8_t' using type 'int16x8_t'} } */
|
||||
|
||||
int32x4_t initi_1_1 = glob_bfloat_vec; /* { dg-error {incompatible types when initializing type 'int32x4_t' using type 'bfloat16x8_t'} } */
|
||||
float32x4_t initi_1_2 = glob_bfloat_vec; /* { dg-error {incompatible types when initializing type 'float32x4_t' using type 'bfloat16x8_t'} } */
|
||||
float16x8_t initi_1_3 = glob_bfloat_vec; /* { dg-error {incompatible types when initializing type 'float16x8_t' using type 'bfloat16x8_t'} } */
|
||||
float64x2_t initi_1_4 = glob_bfloat_vec; /* { dg-error {incompatible types when initializing type 'float64x2_t' using type 'bfloat16x8_t'} } */
|
||||
int64x2_t initi_1_5 = glob_bfloat_vec; /* { dg-error {incompatible types when initializing type 'int64x2_t' using type 'bfloat16x8_t'} } */
|
||||
int16x8_t initi_1_6 = glob_bfloat_vec; /* { dg-error {incompatible types when initializing type 'int16x8_t' using type 'bfloat16x8_t'} } */
|
||||
|
||||
bfloat16x8_t vector2_1 = {};
|
||||
bfloat16x8_t vector2_2 = { glob_bfloat };
|
||||
bfloat16x8_t vector2_3 = { glob_bfloat, glob_bfloat, glob_bfloat, glob_bfloat };
|
||||
bfloat16x8_t vector2_4 = { 0 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16x8_t vector2_5 = { 0.1 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16x8_t vector2_6 = { is_a_float16 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16x8_t vector2_7 = { is_a_float }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16x8_t vector2_8 = { is_an_int }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16x8_t vector2_9 = { is_a_short_int }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
bfloat16x8_t vector2_10 = { 0.0, 0, is_a_short_int, is_a_float }; /* { dg-error "invalid conversion to type 'bfloat16_t'" } */
|
||||
|
||||
int32x4_t initi_2_1 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
float32x4_t initi_2_2 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
float16x8_t initi_2_3 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
float64x2_t initi_2_4 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
int64x2_t initi_2_5 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
int16x8_t initi_2_6 = { glob_bfloat }; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
|
||||
/* Assignments to/from vectors. */
|
||||
|
||||
glob_bfloat_vec = glob_bfloat_vec;
|
||||
glob_bfloat_vec = 0; /* { dg-error {incompatible types when assigning to type 'bfloat16x8_t' from type 'int'} } */
|
||||
glob_bfloat_vec = 0.1; /* { dg-error {incompatible types when assigning to type 'bfloat16x8_t' from type 'double'} } */
|
||||
glob_bfloat_vec = is_a_float_vec; /* { dg-error {incompatible types when assigning to type 'bfloat16x8_t' from type 'float32x4_t'} } */
|
||||
glob_bfloat_vec = is_an_int_vec; /* { dg-error {incompatible types when assigning to type 'bfloat16x8_t' from type 'int32x4_t'} } */
|
||||
glob_bfloat_vec = is_a_float16_vec; /* { dg-error {incompatible types when assigning to type 'bfloat16x8_t' from type 'float16x8_t'} } */
|
||||
glob_bfloat_vec = is_a_double_pair; /* { dg-error {incompatible types when assigning to type 'bfloat16x8_t' from type 'float64x2_t'} } */
|
||||
glob_bfloat_vec = is_a_long_int_pair; /* { dg-error {incompatible types when assigning to type 'bfloat16x8_t' from type 'int64x2_t'} } */
|
||||
glob_bfloat_vec = is_a_short_vec; /* { dg-error {incompatible types when assigning to type 'bfloat16x8_t' from type 'int16x8_t'} } */
|
||||
|
||||
is_an_int_vec = glob_bfloat_vec; /* { dg-error {incompatible types when assigning to type 'int32x4_t' from type 'bfloat16x8_t'} } */
|
||||
is_a_float_vec = glob_bfloat_vec; /* { dg-error {incompatible types when assigning to type 'float32x4_t' from type 'bfloat16x8_t'} } */
|
||||
is_a_float16_vec = glob_bfloat_vec; /* { dg-error {incompatible types when assigning to type 'float16x8_t' from type 'bfloat16x8_t'} } */
|
||||
is_a_double_pair = glob_bfloat_vec; /* { dg-error {incompatible types when assigning to type 'float64x2_t' from type 'bfloat16x8_t'} } */
|
||||
is_a_long_int_pair = glob_bfloat_vec; /* { dg-error {incompatible types when assigning to type 'int64x2_t' from type 'bfloat16x8_t'} } */
|
||||
is_a_short_vec = glob_bfloat_vec;/* { dg-error {incompatible types when assigning to type 'int16x8_t' from type 'bfloat16x8_t'} } */
|
||||
|
||||
/* Assignments to/from elements. */
|
||||
|
||||
vector2_3[0] = glob_bfloat;
|
||||
vector2_3[0] = is_an_int; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
vector2_3[0] = is_a_short_int; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
vector2_3[0] = is_a_float; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
vector2_3[0] = is_a_float16; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
vector2_3[0] = 0; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
vector2_3[0] = 0.1; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
|
||||
glob_bfloat = vector2_3[0];
|
||||
is_an_int = vector2_3[0]; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
is_a_short_int = vector2_3[0]; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
is_a_float = vector2_3[0]; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
is_a_float16 = vector2_3[0]; /* { dg-error {invalid conversion from type 'bfloat16_t'} } */
|
||||
|
||||
/* Compound literals. */
|
||||
|
||||
(bfloat16x8_t) {};
|
||||
|
||||
(bfloat16x8_t) { 0 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
(bfloat16x8_t) { 0.1 }; /* { dg-error {invalid conversion to type 'bfloat16_t'} } */
|
||||
(bfloat16x8_t) { is_a_float_vec }; /* { dg-error {incompatible types when initializing type '__bf16' using type 'float32x4_t'} } */
|
||||
(bfloat16x8_t) { is_an_int_vec }; /* { dg-error {incompatible types when initializing type '__bf16' using type 'int32x4_t'} } */
|
||||
(bfloat16x8_t) { is_a_double_pair }; /* { dg-error {incompatible types when initializing type '__bf16' using type 'float64x2_t'} } */
|
||||
(bfloat16x8_t) { is_a_long_int_pair }; /* { dg-error {incompatible types when initializing type '__bf16' using type 'int64x2_t'} } */
|
||||
(bfloat16x8_t) { is_a_float16_vec }; /* { dg-error {incompatible types when initializing type '__bf16' using type 'float16x8_t'} } */
|
||||
(bfloat16x8_t) { is_a_short_vec }; /* { dg-error {incompatible types when initializing type '__bf16' using type 'int16x8_t'} } */
|
||||
|
||||
(bfloat16x8_t) { glob_bfloat_vec }; /* { dg-error {incompatible types when initializing type '__bf16' using type 'bfloat16x8_t'} } */
|
||||
(int32x4_t) { glob_bfloat_vec }; /* { dg-error {incompatible types when initializing type 'int' using type 'bfloat16x8_t'} } */
|
||||
(float32x4_t) { glob_bfloat_vec }; /* { dg-error {incompatible types when initializing type 'float' using type 'bfloat16x8_t'} } */
|
||||
(int64x2_t) { glob_bfloat_vec }; /* { dg-error {incompatible types when initializing type 'long int' using type 'bfloat16x8_t'} } */
|
||||
(float16x8_t) { glob_bfloat_vec }; /* { dg-error {incompatible types when initializing type '__fp16' using type 'bfloat16x8_t'} } */
|
||||
(int16x8_t) { glob_bfloat_vec }; /* { dg-error {incompatible types when initializing type 'short int' using type 'bfloat16x8_t'} } */
|
||||
|
||||
/* Casting. */
|
||||
|
||||
(void) glob_bfloat_vec;
|
||||
(bfloat16x8_t) glob_bfloat_vec;
|
||||
|
||||
(bfloat16_t) glob_bfloat_vec; /* { dg-error {aggregate value used where a floating-point was expected} } */
|
||||
(short) glob_bfloat_vec; /* { dg-error {cannot convert a vector of type 'bfloat16x8_t' to type 'short int' which has different size} } */
|
||||
(int) glob_bfloat_vec; /* { dg-error {cannot convert a vector of type 'bfloat16x8_t' to type 'int' which has different size} } */
|
||||
(float16_t) glob_bfloat_vec; /* { dg-error {aggregate value used where a floating-point was expected} } */
|
||||
(float) glob_bfloat_vec; /* { dg-error {aggregate value used where a floating-point was expected} } */
|
||||
(double) glob_bfloat_vec; /* { dg-error {aggregate value used where a floating-point was expected} } */
|
||||
|
||||
(int32x4_t) glob_bfloat_vec;
|
||||
(float32x4_t) glob_bfloat_vec;
|
||||
(float16x8_t) glob_bfloat_vec;
|
||||
(int64x2_t) glob_bfloat_vec;
|
||||
(float64x2_t) glob_bfloat_vec;
|
||||
(int16x8_t) glob_bfloat_vec;
|
||||
|
||||
(bfloat16x8_t) is_an_int_vec;
|
||||
(bfloat16x8_t) is_a_float_vec;
|
||||
(bfloat16x8_t) is_a_float16_vec;
|
||||
(bfloat16x8_t) is_a_long_int_pair;
|
||||
(bfloat16x8_t) is_a_double_pair;
|
||||
(bfloat16x8_t) is_a_short_vec;
|
||||
|
||||
/* Arrays and Structs. */
|
||||
|
||||
typedef bfloat16x8_t array_type[2];
|
||||
extern bfloat16x8_t extern_array[];
|
||||
|
||||
bfloat16x8_t array[2];
|
||||
bfloat16x8_t zero_length_array[0];
|
||||
bfloat16x8_t empty_init_array[] = {};
|
||||
typedef bfloat16x8_t some_other_type[is_an_int];
|
||||
|
||||
struct struct1 {
|
||||
bfloat16x8_t a;
|
||||
};
|
||||
|
||||
union union1 {
|
||||
bfloat16x8_t a;
|
||||
};
|
||||
|
||||
/* Addressing and dereferencing. */
|
||||
|
||||
bfloat16x8_t *bfloat_ptr = &vector0;
|
||||
vector0 = *bfloat_ptr;
|
||||
|
||||
/* Pointer assignment. */
|
||||
|
||||
bfloat16x8_t *bfloat_ptr2 = bfloat_ptr;
|
||||
bfloat16x8_t *bfloat_ptr3 = array;
|
||||
|
||||
/* Pointer arithmetic. */
|
||||
|
||||
++bfloat_ptr;
|
||||
--bfloat_ptr;
|
||||
bfloat_ptr++;
|
||||
bfloat_ptr--;
|
||||
bfloat_ptr += 1;
|
||||
bfloat_ptr -= 1;
|
||||
bfloat_ptr - bfloat_ptr2;
|
||||
bfloat_ptr = &bfloat_ptr3[0];
|
||||
bfloat_ptr = &bfloat_ptr3[1];
|
||||
|
||||
/* Simple comparison. */
|
||||
vector0 > glob_bfloat_vec; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
glob_bfloat_vec == vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0 > is_a_float_vec; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
is_a_float_vec == vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0 > 0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
0 == vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0 > 0.1; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
0.1 == vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0 > is_an_int_vec; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
is_an_int_vec == vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
|
||||
/* Pointer comparison. */
|
||||
|
||||
bfloat_ptr == &vector0;
|
||||
bfloat_ptr != &vector0;
|
||||
bfloat_ptr < &vector0;
|
||||
bfloat_ptr <= &vector0;
|
||||
bfloat_ptr > &vector0;
|
||||
bfloat_ptr >= &vector0;
|
||||
bfloat_ptr == bfloat_ptr2;
|
||||
bfloat_ptr != bfloat_ptr2;
|
||||
bfloat_ptr < bfloat_ptr2;
|
||||
bfloat_ptr <= bfloat_ptr2;
|
||||
bfloat_ptr > bfloat_ptr2;
|
||||
bfloat_ptr >= bfloat_ptr2;
|
||||
|
||||
/* Conditional expressions. */
|
||||
|
||||
0 ? vector0 : vector0;
|
||||
0 ? vector0 : is_a_float_vec; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? is_a_float_vec : vector0; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? vector0 : is_a_float16_vec; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? is_a_float16_vec : vector0; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? vector0 : 0; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? 0 : vector0; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? 0.1 : vector0; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? vector0 : 0.1; /* { dg-error {type mismatch in conditional expression} } */
|
||||
0 ? bfloat_ptr : bfloat_ptr2;
|
||||
0 ? bfloat_ptr : float_ptr; /* { dg-error {pointer type mismatch in conditional expression} } */
|
||||
0 ? float_ptr : bfloat_ptr; /* { dg-error {pointer type mismatch in conditional expression} } */
|
||||
|
||||
vector0 ? vector0 : vector0; /* { dg-error {used vector type where scalar is required} } */
|
||||
vector0 ? is_a_float16_vec : vector0; /* { dg-error {used vector type where scalar is required} } */
|
||||
vector0 ? vector0 : is_a_float16_vec; /* { dg-error {used vector type where scalar is required} } */
|
||||
vector0 ? is_a_float16_vec : is_a_float16_vec; /* { dg-error {used vector type where scalar is required} } */
|
||||
|
||||
/* Unary operators. */
|
||||
|
||||
+vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
-vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
~vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
!vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
*vector0; /* { dg-error {invalid type argument of unary '\*'} } */
|
||||
__real vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
__imag vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
++vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
--vector0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0++; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0--; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
|
||||
/* Binary arithmetic operations. */
|
||||
|
||||
vector0 = glob_bfloat_vec + *bfloat_ptr; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0 = glob_bfloat_vec + 0.1; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0 = glob_bfloat_vec + 0; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
vector0 = glob_bfloat_vec + is_a_float_vec; /* { dg-error {operation not permitted on type 'bfloat16_t'} } */
|
||||
|
||||
return vector0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user