Commit 1c43ee69 by Delia Burduv Committed by Kyrylo Tkachov

Bug fix: cannot convert 'const short int*' to 'const __bf16*'

This patch fixes a bug introduced by my earlier patch (
https://gcc.gnu.org/pipermail/gcc-patches/2020-March/541680.html ).
It introduces a new scalar builtin type that was missing in the original
patch.

Bootstrapped cleanly on arm-none-linux-gnueabihf.
Tested for regression on arm-none-linux-gnueabihf. No regression from
before the original patch.
Tests that failed or became unsupported because of the original tests
now work as they did before it.

	* config/arm/arm-builtins.c
	(arm_init_simd_builtin_scalar_types): New.
	* config/arm/arm_neon.h (vld2_bf16): Used new builtin type.
	(vld2q_bf16): Used new builtin type.
	(vld3_bf16): Used new builtin type.
	(vld3q_bf16): Used new builtin type.
	(vld4_bf16): Used new builtin type.
	(vld4q_bf16): Used new builtin type.
	(vld2_dup_bf16): Used new builtin type.
	(vld2q_dup_bf16): Used new builtin type.
	(vld3_dup_bf16): Used new builtin type.
	(vld3q_dup_bf16): Used new builtin type.
	(vld4_dup_bf16): Used new builtin type.
	(vld4q_dup_bf16): Used new builtin type.
parent d42ff1d3
2020-03-11 Delia Burduv <delia.burduv@arm.com>
* config/arm/arm-builtins.c
(arm_init_simd_builtin_scalar_types): New.
* config/arm/arm_neon.h (vld2_bf16): Used new builtin type.
(vld2q_bf16): Used new builtin type.
(vld3_bf16): Used new builtin type.
(vld3q_bf16): Used new builtin type.
(vld4_bf16): Used new builtin type.
(vld4q_bf16): Used new builtin type.
(vld2_dup_bf16): Used new builtin type.
(vld2q_dup_bf16): Used new builtin type.
(vld3_dup_bf16): Used new builtin type.
(vld3q_dup_bf16): Used new builtin type.
(vld4_dup_bf16): Used new builtin type.
(vld4q_dup_bf16): Used new builtin type.
2020-03-11 Jakub Jelinek <jakub@redhat.com> 2020-03-11 Jakub Jelinek <jakub@redhat.com>
PR target/94134 PR target/94134
......
...@@ -784,6 +784,7 @@ const char *arm_scalar_builtin_types[] = { ...@@ -784,6 +784,7 @@ const char *arm_scalar_builtin_types[] = {
"__builtin_neon_oi", "__builtin_neon_oi",
"__builtin_neon_ci", "__builtin_neon_ci",
"__builtin_neon_xi", "__builtin_neon_xi",
"__builtin_neon_bf",
NULL NULL
}; };
...@@ -1101,7 +1102,8 @@ arm_init_simd_builtin_scalar_types (void) ...@@ -1101,7 +1102,8 @@ arm_init_simd_builtin_scalar_types (void)
"__builtin_neon_df"); "__builtin_neon_df");
(*lang_hooks.types.register_builtin_type) (intTI_type_node, (*lang_hooks.types.register_builtin_type) (intTI_type_node,
"__builtin_neon_ti"); "__builtin_neon_ti");
(*lang_hooks.types.register_builtin_type) (arm_bf16_type_node,
"__builtin_neon_bf");
/* Unsigned integer types for various mode sizes. */ /* Unsigned integer types for various mode sizes. */
(*lang_hooks.types.register_builtin_type) (unsigned_intQI_type_node, (*lang_hooks.types.register_builtin_type) (unsigned_intQI_type_node,
"__builtin_neon_uqi"); "__builtin_neon_uqi");
......
...@@ -19562,7 +19562,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) ...@@ -19562,7 +19562,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
vld2_bf16 (bfloat16_t const * __ptr) vld2_bf16 (bfloat16_t const * __ptr)
{ {
union { bfloat16x4x2_t __i; __builtin_neon_ti __o; } __rv; union { bfloat16x4x2_t __i; __builtin_neon_ti __o; } __rv;
__rv.__o = __builtin_neon_vld2v4bf ((const __builtin_neon_hi *) __ptr); __rv.__o = __builtin_neon_vld2v4bf ((const __builtin_neon_bf *) __ptr);
return __rv.__i; return __rv.__i;
} }
...@@ -19571,7 +19571,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) ...@@ -19571,7 +19571,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
vld2q_bf16 (const bfloat16_t * __ptr) vld2q_bf16 (const bfloat16_t * __ptr)
{ {
union { bfloat16x8x2_t __i; __builtin_neon_oi __o; } __rv; union { bfloat16x8x2_t __i; __builtin_neon_oi __o; } __rv;
__rv.__o = __builtin_neon_vld2v8bf ((const __builtin_neon_hi *) __ptr); __rv.__o = __builtin_neon_vld2v8bf ((const __builtin_neon_bf *) __ptr);
return __rv.__i; return __rv.__i;
} }
...@@ -19580,7 +19580,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) ...@@ -19580,7 +19580,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
vld3_bf16 (const bfloat16_t * __ptr) vld3_bf16 (const bfloat16_t * __ptr)
{ {
union { bfloat16x4x3_t __i; __builtin_neon_ei __o; } __rv; union { bfloat16x4x3_t __i; __builtin_neon_ei __o; } __rv;
__rv.__o = __builtin_neon_vld3v4bf ((const __builtin_neon_hi *) __ptr); __rv.__o = __builtin_neon_vld3v4bf ((const __builtin_neon_bf *) __ptr);
return __rv.__i; return __rv.__i;
} }
...@@ -19589,7 +19589,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) ...@@ -19589,7 +19589,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
vld3q_bf16 (const bfloat16_t * __ptr) vld3q_bf16 (const bfloat16_t * __ptr)
{ {
union { bfloat16x8x3_t __i; __builtin_neon_ci __o; } __rv; union { bfloat16x8x3_t __i; __builtin_neon_ci __o; } __rv;
__rv.__o = __builtin_neon_vld3v8bf ((const __builtin_neon_hi *) __ptr); __rv.__o = __builtin_neon_vld3v8bf ((const __builtin_neon_bf *) __ptr);
return __rv.__i; return __rv.__i;
} }
...@@ -19598,7 +19598,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) ...@@ -19598,7 +19598,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
vld4_bf16 (const bfloat16_t * __ptr) vld4_bf16 (const bfloat16_t * __ptr)
{ {
union { bfloat16x4x4_t __i; __builtin_neon_oi __o; } __rv; union { bfloat16x4x4_t __i; __builtin_neon_oi __o; } __rv;
__rv.__o = __builtin_neon_vld4v4bf ((const __builtin_neon_hi *) __ptr); __rv.__o = __builtin_neon_vld4v4bf ((const __builtin_neon_bf *) __ptr);
return __rv.__i; return __rv.__i;
} }
...@@ -19607,7 +19607,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) ...@@ -19607,7 +19607,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
vld4q_bf16 (const bfloat16_t * __ptr) vld4q_bf16 (const bfloat16_t * __ptr)
{ {
union { bfloat16x8x4_t __i; __builtin_neon_xi __o; } __rv; union { bfloat16x8x4_t __i; __builtin_neon_xi __o; } __rv;
__rv.__o = __builtin_neon_vld4v8bf ((const __builtin_neon_hi *) __ptr); __rv.__o = __builtin_neon_vld4v8bf ((const __builtin_neon_bf *) __ptr);
return __rv.__i; return __rv.__i;
} }
...@@ -19616,7 +19616,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) ...@@ -19616,7 +19616,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
vld2_dup_bf16 (const bfloat16_t * __ptr) vld2_dup_bf16 (const bfloat16_t * __ptr)
{ {
union { bfloat16x4x2_t __i; __builtin_neon_ti __o; } __rv; union { bfloat16x4x2_t __i; __builtin_neon_ti __o; } __rv;
__rv.__o = __builtin_neon_vld2_dupv4bf ((const __builtin_neon_hi *) __ptr); __rv.__o = __builtin_neon_vld2_dupv4bf ((const __builtin_neon_bf *) __ptr);
return __rv.__i; return __rv.__i;
} }
...@@ -19625,7 +19625,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) ...@@ -19625,7 +19625,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
vld2q_dup_bf16 (const bfloat16_t * __ptr) vld2q_dup_bf16 (const bfloat16_t * __ptr)
{ {
union { bfloat16x8x2_t __i; __builtin_neon_oi __o; } __rv; union { bfloat16x8x2_t __i; __builtin_neon_oi __o; } __rv;
__rv.__o = __builtin_neon_vld2_dupv8bf ((const __builtin_neon_hi *) __ptr); __rv.__o = __builtin_neon_vld2_dupv8bf ((const __builtin_neon_bf *) __ptr);
return __rv.__i; return __rv.__i;
} }
...@@ -19634,7 +19634,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) ...@@ -19634,7 +19634,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
vld3_dup_bf16 (const bfloat16_t * __ptr) vld3_dup_bf16 (const bfloat16_t * __ptr)
{ {
union { bfloat16x4x3_t __i; __builtin_neon_ei __o; } __rv; union { bfloat16x4x3_t __i; __builtin_neon_ei __o; } __rv;
__rv.__o = __builtin_neon_vld3_dupv4bf ((const __builtin_neon_hi *) __ptr); __rv.__o = __builtin_neon_vld3_dupv4bf ((const __builtin_neon_bf *) __ptr);
return __rv.__i; return __rv.__i;
} }
...@@ -19643,7 +19643,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) ...@@ -19643,7 +19643,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
vld3q_dup_bf16 (const bfloat16_t * __ptr) vld3q_dup_bf16 (const bfloat16_t * __ptr)
{ {
union { bfloat16x8x3_t __i; __builtin_neon_ci __o; } __rv; union { bfloat16x8x3_t __i; __builtin_neon_ci __o; } __rv;
__rv.__o = __builtin_neon_vld3_dupv8bf ((const __builtin_neon_hi *) __ptr); __rv.__o = __builtin_neon_vld3_dupv8bf ((const __builtin_neon_bf *) __ptr);
return __rv.__i; return __rv.__i;
} }
...@@ -19652,7 +19652,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) ...@@ -19652,7 +19652,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
vld4_dup_bf16 (const bfloat16_t * __ptr) vld4_dup_bf16 (const bfloat16_t * __ptr)
{ {
union { bfloat16x4x4_t __i; __builtin_neon_oi __o; } __rv; union { bfloat16x4x4_t __i; __builtin_neon_oi __o; } __rv;
__rv.__o = __builtin_neon_vld4_dupv4bf ((const __builtin_neon_hi *) __ptr); __rv.__o = __builtin_neon_vld4_dupv4bf ((const __builtin_neon_bf *) __ptr);
return __rv.__i; return __rv.__i;
} }
...@@ -19661,7 +19661,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) ...@@ -19661,7 +19661,7 @@ __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
vld4q_dup_bf16 (const bfloat16_t * __ptr) vld4q_dup_bf16 (const bfloat16_t * __ptr)
{ {
union { bfloat16x8x4_t __i; __builtin_neon_xi __o; } __rv; union { bfloat16x8x4_t __i; __builtin_neon_xi __o; } __rv;
__rv.__o = __builtin_neon_vld4_dupv8bf ((const __builtin_neon_hi *) __ptr); __rv.__o = __builtin_neon_vld4_dupv8bf ((const __builtin_neon_bf *) __ptr);
return __rv.__i; return __rv.__i;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment