diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index 6a6573317cf..0c98b3a8f23 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -458,15 +458,6 @@ [(set_attr "type" "neon_store1_one_lane_q,neon_to_gp_q")] ) -(define_expand "vec_init" - [(match_operand:VDQ 0 "s_register_operand") - (match_operand 1 "" "")] - "TARGET_NEON || TARGET_HAVE_MVE" -{ - neon_expand_vector_init (operands[0], operands[1]); - DONE; -}) - ;; Doubleword and quadword arithmetic. ;; NOTE: some other instructions also support 64-bit integer diff --git a/gcc/config/arm/vec-common.md b/gcc/config/arm/vec-common.md index 8e35151da46..7858be9f28e 100644 --- a/gcc/config/arm/vec-common.md +++ b/gcc/config/arm/vec-common.md @@ -565,3 +565,12 @@ DONE; }) + +(define_expand "vec_init" + [(match_operand:VDQX 0 "s_register_operand") + (match_operand 1 "" "")] + "TARGET_NEON || (TARGET_HAVE_MVE && VALID_MVE_MODE (mode))" +{ + neon_expand_vector_init (operands[0], operands[1]); + DONE; +}) diff --git a/gcc/testsuite/gcc.target/arm/simd/pr98435.c b/gcc/testsuite/gcc.target/arm/simd/pr98435.c new file mode 100644 index 00000000000..0af8633fd56 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/simd/pr98435.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ffast-math" } */ +/* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */ +/* { dg-add-options arm_v8_2a_bf16_neon } */ +/* { dg-additional-options "-mfloat-abi=softfp -march=armv8.2-a+bf16+fp16" } */ + +#include + +bfloat16x4_t f (bfloat16_t a) +{ + return (bfloat16x4_t) {a, a, a, a}; +} + +/* { dg-final { scan-assembler {\tvdup.16\td[0-9]+, r0} } } */ +/* { dg-final { scan-assembler {\tvmov\tr0, r1, d[0-9]+} } } */