diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d92359c1a26..04b44988a31 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2009-11-11 Daniel Jacobowitz + + * config/arm/arm.c (neon_vdup_constant, neon_make_constant): New. + (neon_expand_vector_init): Use them. Also handle non-constant + vectors with identical elements and vectors with only one + non-constant element. + (arm_print_operand): Handle 'y' modifier. + * config/arm/arm-protos.h (neon_make_constant): Declare. + * config/arm/neon.md (neon_vdup_n): Split into two + patterns. Use VX instead of VDQW for the first one. Allow + a VFP alternative and V32 modes for the second one. + * config/arm/neon.ml (shape_elt): Add Alternatives. + (ops): Use Alternatives for vdup lane instructions. + * config/arm/neon-testgen.ml (analyze_shape): Handle Alternatives. + * config/arm/vec-common.md (mov): Use neon_make_constant. + 2009-11-11 Daniel Jacobowitz * config/arm/neon.md (*neon_mov): Reject two non-register diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h index ed70926e9a2..4d6d51b204f 100644 --- a/gcc/config/arm/arm-protos.h +++ b/gcc/config/arm/arm-protos.h @@ -68,6 +68,7 @@ extern char *neon_output_logic_immediate (const char *, rtx *, enum machine_mode, int, int); extern void neon_pairwise_reduce (rtx, rtx, enum machine_mode, rtx (*) (rtx, rtx, rtx)); +extern rtx neon_make_constant (rtx); extern void neon_expand_vector_init (rtx, rtx); extern void neon_lane_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT); extern void neon_const_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT); diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index fc0c5592b7e..5fb2d17b1c9 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -8085,25 +8085,171 @@ neon_pairwise_reduce (rtx op0, rtx op1, enum machine_mode mode, } } -/* Initialize a vector with non-constant elements. FIXME: We can do better - than the current implementation (building a vector on the stack and then - loading it) in many cases. See rs6000.c. */ +/* If VALS is a vector constant that can be loaded into a register + using VDUP, generate instructions to do so and return an RTX to + assign to the register. Otherwise return NULL_RTX. */ + +static rtx +neon_vdup_constant (rtx vals) +{ + enum machine_mode mode = GET_MODE (vals); + enum machine_mode inner_mode = GET_MODE_INNER (mode); + int n_elts = GET_MODE_NUNITS (mode); + bool all_same = true; + rtx x; + int i; + + if (GET_CODE (vals) != CONST_VECTOR || GET_MODE_SIZE (inner_mode) > 4) + return NULL_RTX; + + for (i = 0; i < n_elts; ++i) + { + x = XVECEXP (vals, 0, i); + if (i > 0 && !rtx_equal_p (x, XVECEXP (vals, 0, 0))) + all_same = false; + } + + if (!all_same) + /* The elements are not all the same. We could handle repeating + patterns of a mode larger than INNER_MODE here (e.g. int8x8_t + {0, C, 0, C, 0, C, 0, C} which can be loaded using + vdup.i16). */ + return NULL_RTX; + + /* We can load this constant by using VDUP and a constant in a + single ARM register. This will be cheaper than a vector + load. */ + + x = copy_to_mode_reg (inner_mode, XVECEXP (vals, 0, 0)); + return gen_rtx_UNSPEC (mode, gen_rtvec (1, x), + UNSPEC_VDUP_N); +} + +/* Generate code to load VALS, which is a PARALLEL containing only + constants (for vec_init) or CONST_VECTOR, efficiently into a + register. Returns an RTX to copy into the register, or NULL_RTX + for a PARALLEL that can not be converted into a CONST_VECTOR. */ + +rtx +neon_make_constant (rtx vals) +{ + enum machine_mode mode = GET_MODE (vals); + rtx target; + rtx const_vec = NULL_RTX; + int n_elts = GET_MODE_NUNITS (mode); + int n_const = 0; + int i; + + if (GET_CODE (vals) == CONST_VECTOR) + const_vec = vals; + else if (GET_CODE (vals) == PARALLEL) + { + /* A CONST_VECTOR must contain only CONST_INTs and + CONST_DOUBLEs, but CONSTANT_P allows more (e.g. SYMBOL_REF). + Only store valid constants in a CONST_VECTOR. */ + for (i = 0; i < n_elts; ++i) + { + rtx x = XVECEXP (vals, 0, i); + if (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE) + n_const++; + } + if (n_const == n_elts) + const_vec = gen_rtx_CONST_VECTOR (mode, XVEC (vals, 0)); + } + else + gcc_unreachable (); + + if (const_vec != NULL + && neon_immediate_valid_for_move (const_vec, mode, NULL, NULL)) + /* Load using VMOV. On Cortex-A8 this takes one cycle. */ + return const_vec; + else if ((target = neon_vdup_constant (vals)) != NULL_RTX) + /* Loaded using VDUP. On Cortex-A8 the VDUP takes one NEON + pipeline cycle; creating the constant takes one or two ARM + pipeline cycles. */ + return target; + else if (const_vec != NULL_RTX) + /* Load from constant pool. On Cortex-A8 this takes two cycles + (for either double or quad vectors). We can not take advantage + of single-cycle VLD1 because we need a PC-relative addressing + mode. */ + return const_vec; + else + /* A PARALLEL containing something not valid inside CONST_VECTOR. + We can not construct an initializer. */ + return NULL_RTX; +} + +/* Initialize vector TARGET to VALS. */ void neon_expand_vector_init (rtx target, rtx vals) { enum machine_mode mode = GET_MODE (target); - enum machine_mode inner = GET_MODE_INNER (mode); - unsigned int i, n_elts = GET_MODE_NUNITS (mode); - rtx mem; + enum machine_mode inner_mode = GET_MODE_INNER (mode); + int n_elts = GET_MODE_NUNITS (mode); + int n_var = 0, one_var = -1; + bool all_same = true; + rtx x, mem; + int i; - gcc_assert (VECTOR_MODE_P (mode)); + for (i = 0; i < n_elts; ++i) + { + x = XVECEXP (vals, 0, i); + if (!CONSTANT_P (x)) + ++n_var, one_var = i; + if (i > 0 && !rtx_equal_p (x, XVECEXP (vals, 0, 0))) + all_same = false; + } + + if (n_var == 0) + { + rtx constant = neon_make_constant (vals); + if (constant != NULL_RTX) + { + emit_move_insn (target, constant); + return; + } + } + + /* Splat a single non-constant element if we can. */ + if (all_same && GET_MODE_SIZE (inner_mode) <= 4) + { + x = copy_to_mode_reg (inner_mode, XVECEXP (vals, 0, 0)); + emit_insn (gen_rtx_SET (VOIDmode, target, + gen_rtx_UNSPEC (mode, gen_rtvec (1, x), + UNSPEC_VDUP_N))); + return; + } + + /* One field is non-constant. Load constant then overwrite varying + field. This is more efficient than using the stack. */ + if (n_var == 1) + { + rtx copy = copy_rtx (vals); + rtvec ops; + + /* Load constant part of vector, substitute neighboring value for + varying element. */ + XVECEXP (copy, 0, one_var) = XVECEXP (vals, 0, (one_var + 1) % n_elts); + neon_expand_vector_init (target, copy); + + /* Insert variable. */ + x = copy_to_mode_reg (inner_mode, XVECEXP (vals, 0, one_var)); + ops = gen_rtvec (3, x, target, GEN_INT (one_var)); + emit_insn (gen_rtx_SET (VOIDmode, target, + gen_rtx_UNSPEC (mode, ops, UNSPEC_VSET_LANE))); + return; + } + + /* Construct the vector in memory one field at a time + and load the whole vector. */ mem = assign_stack_temp (mode, GET_MODE_SIZE (mode), 0); for (i = 0; i < n_elts; i++) - emit_move_insn (adjust_address_nv (mem, inner, i * GET_MODE_SIZE (inner)), - XVECEXP (vals, 0, i)); - + emit_move_insn (adjust_address_nv (mem, inner_mode, + i * GET_MODE_SIZE (inner_mode)), + XVECEXP (vals, 0, i)); emit_move_insn (target, mem); } @@ -15253,6 +15399,30 @@ arm_print_operand (FILE *stream, rtx x, int code) } return; + /* Translate an S register number into a D register number and element index. */ + case 'y': + { + int mode = GET_MODE (x); + int regno; + + if (GET_MODE_SIZE (mode) != 4 || GET_CODE (x) != REG) + { + output_operand_lossage ("invalid operand for code '%c'", code); + return; + } + + regno = REGNO (x); + if (!VFP_REGNO_OK_FOR_SINGLE (regno)) + { + output_operand_lossage ("invalid operand for code '%c'", code); + return; + } + + regno = regno - FIRST_VFP_REGNUM; + fprintf (stream, "d%d[%d]", regno / 2, regno % 2); + } + return; + /* Register specifier for vld1.16/vst1.16. Translate the S register number into a D register number and element index. */ case 'z': diff --git a/gcc/config/arm/neon-testgen.ml b/gcc/config/arm/neon-testgen.ml index 00a8e5332f4..f1c431a3841 100644 --- a/gcc/config/arm/neon-testgen.ml +++ b/gcc/config/arm/neon-testgen.ml @@ -175,6 +175,7 @@ let rec analyze_shape shape = | Element_of_dreg -> (analyze_shape_elt Dreg) ^ "\\\\\\[\\[0-9\\]+\\\\\\]" | Element_of_qreg -> (analyze_shape_elt Qreg) ^ "\\\\\\[\\[0-9\\]+\\\\\\]" | All_elements_of_dreg -> (analyze_shape_elt Dreg) ^ "\\\\\\[\\\\\\]" + | Alternatives (elts) -> "(" ^ (String.concat "|" (List.map analyze_shape_elt elts)) ^ ")" in match shape with All (n, elt) -> commas analyze_shape_elt (n_things n elt) "" diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index ac1e9d4862f..43b3805c7ba 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -2687,9 +2687,9 @@ }) (define_insn "neon_vdup_n" - [(set (match_operand:VDQW 0 "s_register_operand" "=w") - (unspec:VDQW [(match_operand: 1 "s_register_operand" "r")] - UNSPEC_VDUP_N))] + [(set (match_operand:VX 0 "s_register_operand" "=w") + (unspec:VX [(match_operand: 1 "s_register_operand" "r")] + UNSPEC_VDUP_N))] "TARGET_NEON" "vdup%?.\t%0, %1" ;; Assume this schedules like vmov. @@ -2697,6 +2697,19 @@ (set_attr "neon_type" "neon_bp_simple")] ) +(define_insn "neon_vdup_n" + [(set (match_operand:V32 0 "s_register_operand" "=w,w") + (unspec:V32 [(match_operand: 1 "s_register_operand" "r,t")] + UNSPEC_VDUP_N))] + "TARGET_NEON" + "@ + vdup%?.\t%0, %1 + vdup%?.\t%0, %y1" + ;; Assume this schedules like vmov. + [(set_attr "predicable" "yes") + (set_attr "neon_type" "neon_bp_simple")] +) + (define_insn "neon_vdup_ndi" [(set (match_operand:DI 0 "s_register_operand" "=w") (unspec:DI [(match_operand:DI 1 "s_register_operand" "r")] diff --git a/gcc/config/arm/neon.ml b/gcc/config/arm/neon.ml index 114097d22a7..466b06b0fff 100644 --- a/gcc/config/arm/neon.ml +++ b/gcc/config/arm/neon.ml @@ -68,6 +68,7 @@ type shape_elt = Dreg | Qreg | Corereg | Immed | VecArray of int * shape_elt | Element_of_dreg (* Used for "lane" variants. *) | Element_of_qreg (* Likewise. *) | All_elements_of_dreg (* Used for "dup" variants. *) + | Alternatives of shape_elt list (* Used for multiple valid operands *) type shape_form = All of int * shape_elt | Long @@ -1008,7 +1009,10 @@ let ops = pf_su_8_64; (* Set all lanes to the same value. *) - Vdup_n, [], + Vdup_n, + [Disassembles_as [Use_operands [| Dreg; + Alternatives [ Corereg; + Element_of_dreg ] |]]], Use_operands [| Dreg; Corereg |], "vdup_n", bits_1, pf_su_8_32; Vdup_n, @@ -1016,7 +1020,10 @@ let ops = Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |]]], Use_operands [| Dreg; Corereg |], "vdup_n", notype_1, [S64; U64]; - Vdup_n, [], + Vdup_n, + [Disassembles_as [Use_operands [| Qreg; + Alternatives [ Corereg; + Element_of_dreg ] |]]], Use_operands [| Qreg; Corereg |], "vdupQ_n", bits_1, pf_su_8_32; Vdup_n, @@ -1028,7 +1035,10 @@ let ops = (* These are just aliases for the above. *) Vmov_n, - [Builtin_name "vdup_n"], + [Builtin_name "vdup_n"; + Disassembles_as [Use_operands [| Dreg; + Alternatives [ Corereg; + Element_of_dreg ] |]]], Use_operands [| Dreg; Corereg |], "vmov_n", bits_1, pf_su_8_32; Vmov_n, @@ -1038,7 +1048,10 @@ let ops = Use_operands [| Dreg; Corereg |], "vmov_n", notype_1, [S64; U64]; Vmov_n, - [Builtin_name "vdupQ_n"], + [Builtin_name "vdupQ_n"; + Disassembles_as [Use_operands [| Qreg; + Alternatives [ Corereg; + Element_of_dreg ] |]]], Use_operands [| Qreg; Corereg |], "vmovQ_n", bits_1, pf_su_8_32; Vmov_n, diff --git a/gcc/config/arm/vec-common.md b/gcc/config/arm/vec-common.md index a01efb44da6..d33fdf99d70 100644 --- a/gcc/config/arm/vec-common.md +++ b/gcc/config/arm/vec-common.md @@ -42,6 +42,11 @@ { if (GET_CODE (operands[0]) != REG) operands[1] = force_reg (mode, operands[1]); + else if (TARGET_NEON && CONSTANT_P (operands[1])) + { + operands[1] = neon_make_constant (operands[1]); + gcc_assert (operands[1] != NULL_RTX); + } } }) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0267ed46854..38170158721 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2009-11-11 Daniel Jacobowitz + + * gcc.target/arm/neon: Regenerate generated tests. + 2009-11-10 Jason Merrill * g++.dg/init/placement5.C: New. diff --git a/gcc/testsuite/gcc.target/arm/neon/vdupQ_nf32.c b/gcc/testsuite/gcc.target/arm/neon/vdupQ_nf32.c index c38959a3fab..a4d57565510 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdupQ_nf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdupQ_nf32.c @@ -15,5 +15,5 @@ void test_vdupQ_nf32 (void) out_float32x4_t = vdupq_n_f32 (arg0_float32_t); } -/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdupQ_np16.c b/gcc/testsuite/gcc.target/arm/neon/vdupQ_np16.c index 6e3e726417f..76b3695873b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdupQ_np16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdupQ_np16.c @@ -15,5 +15,5 @@ void test_vdupQ_np16 (void) out_poly16x8_t = vdupq_n_p16 (arg0_poly16_t); } -/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdupQ_np8.c b/gcc/testsuite/gcc.target/arm/neon/vdupQ_np8.c index 647ff2c0886..61dff2c4ca5 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdupQ_np8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdupQ_np8.c @@ -15,5 +15,5 @@ void test_vdupQ_np8 (void) out_poly8x16_t = vdupq_n_p8 (arg0_poly8_t); } -/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns16.c b/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns16.c index 1fb27efb717..593dbebb64c 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns16.c @@ -15,5 +15,5 @@ void test_vdupQ_ns16 (void) out_int16x8_t = vdupq_n_s16 (arg0_int16_t); } -/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns32.c b/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns32.c index a0e8f7f9194..22ec1ae5cdf 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns32.c @@ -15,5 +15,5 @@ void test_vdupQ_ns32 (void) out_int32x4_t = vdupq_n_s32 (arg0_int32_t); } -/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns8.c b/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns8.c index 6f2aea7bda2..80d046ca5bd 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns8.c @@ -15,5 +15,5 @@ void test_vdupQ_ns8 (void) out_int8x16_t = vdupq_n_s8 (arg0_int8_t); } -/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu16.c b/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu16.c index bbf50201647..9f6c98d7af7 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu16.c @@ -15,5 +15,5 @@ void test_vdupQ_nu16 (void) out_uint16x8_t = vdupq_n_u16 (arg0_uint16_t); } -/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu32.c b/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu32.c index e149335784b..f847c23f692 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu32.c @@ -15,5 +15,5 @@ void test_vdupQ_nu32 (void) out_uint32x4_t = vdupq_n_u32 (arg0_uint32_t); } -/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu8.c b/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu8.c index 81cf6264faa..4637c52bca6 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu8.c @@ -15,5 +15,5 @@ void test_vdupQ_nu8 (void) out_uint8x16_t = vdupq_n_u8 (arg0_uint8_t); } -/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdup_nf32.c b/gcc/testsuite/gcc.target/arm/neon/vdup_nf32.c index 277b200f90d..94101f64993 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdup_nf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdup_nf32.c @@ -15,5 +15,5 @@ void test_vdup_nf32 (void) out_float32x2_t = vdup_n_f32 (arg0_float32_t); } -/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdup_np16.c b/gcc/testsuite/gcc.target/arm/neon/vdup_np16.c index 76f1c1740f7..aa505ac0650 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdup_np16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdup_np16.c @@ -15,5 +15,5 @@ void test_vdup_np16 (void) out_poly16x4_t = vdup_n_p16 (arg0_poly16_t); } -/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdup_np8.c b/gcc/testsuite/gcc.target/arm/neon/vdup_np8.c index ea66a607dc6..271d501cf30 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdup_np8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdup_np8.c @@ -15,5 +15,5 @@ void test_vdup_np8 (void) out_poly8x8_t = vdup_n_p8 (arg0_poly8_t); } -/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdup_ns16.c b/gcc/testsuite/gcc.target/arm/neon/vdup_ns16.c index 89794c3e657..14c3e5e77d7 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdup_ns16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdup_ns16.c @@ -15,5 +15,5 @@ void test_vdup_ns16 (void) out_int16x4_t = vdup_n_s16 (arg0_int16_t); } -/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdup_ns32.c b/gcc/testsuite/gcc.target/arm/neon/vdup_ns32.c index 8b0fed938cf..98a7f552140 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdup_ns32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdup_ns32.c @@ -15,5 +15,5 @@ void test_vdup_ns32 (void) out_int32x2_t = vdup_n_s32 (arg0_int32_t); } -/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdup_ns8.c b/gcc/testsuite/gcc.target/arm/neon/vdup_ns8.c index 0d39eec6d36..de853e414f9 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdup_ns8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdup_ns8.c @@ -15,5 +15,5 @@ void test_vdup_ns8 (void) out_int8x8_t = vdup_n_s8 (arg0_int8_t); } -/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdup_nu16.c b/gcc/testsuite/gcc.target/arm/neon/vdup_nu16.c index eb02c376622..abb747236f8 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdup_nu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdup_nu16.c @@ -15,5 +15,5 @@ void test_vdup_nu16 (void) out_uint16x4_t = vdup_n_u16 (arg0_uint16_t); } -/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdup_nu32.c b/gcc/testsuite/gcc.target/arm/neon/vdup_nu32.c index 84e8c76fead..278df3c77b9 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdup_nu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdup_nu32.c @@ -15,5 +15,5 @@ void test_vdup_nu32 (void) out_uint32x2_t = vdup_n_u32 (arg0_uint32_t); } -/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vdup_nu8.c b/gcc/testsuite/gcc.target/arm/neon/vdup_nu8.c index 4d6ab331a96..4d675130799 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vdup_nu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vdup_nu8.c @@ -15,5 +15,5 @@ void test_vdup_nu8 (void) out_uint8x8_t = vdup_n_u8 (arg0_uint8_t); } -/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmovQ_nf32.c b/gcc/testsuite/gcc.target/arm/neon/vmovQ_nf32.c index 7776b34d4ff..9e469f1bbc4 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmovQ_nf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmovQ_nf32.c @@ -15,5 +15,5 @@ void test_vmovQ_nf32 (void) out_float32x4_t = vmovq_n_f32 (arg0_float32_t); } -/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmovQ_np16.c b/gcc/testsuite/gcc.target/arm/neon/vmovQ_np16.c index 72fbeda4ceb..3109d81f52d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmovQ_np16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmovQ_np16.c @@ -15,5 +15,5 @@ void test_vmovQ_np16 (void) out_poly16x8_t = vmovq_n_p16 (arg0_poly16_t); } -/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmovQ_np8.c b/gcc/testsuite/gcc.target/arm/neon/vmovQ_np8.c index d908658d79f..99502f96c9e 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmovQ_np8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmovQ_np8.c @@ -15,5 +15,5 @@ void test_vmovQ_np8 (void) out_poly8x16_t = vmovq_n_p8 (arg0_poly8_t); } -/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns16.c b/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns16.c index 77a2a41a74d..eea4e1e9ad1 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns16.c @@ -15,5 +15,5 @@ void test_vmovQ_ns16 (void) out_int16x8_t = vmovq_n_s16 (arg0_int16_t); } -/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns32.c b/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns32.c index 13ba030f74d..4c980060110 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns32.c @@ -15,5 +15,5 @@ void test_vmovQ_ns32 (void) out_int32x4_t = vmovq_n_s32 (arg0_int32_t); } -/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns8.c b/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns8.c index 999d709f165..b557356eae0 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns8.c @@ -15,5 +15,5 @@ void test_vmovQ_ns8 (void) out_int8x16_t = vmovq_n_s8 (arg0_int8_t); } -/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu16.c b/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu16.c index f02aca6ea16..748bf6b3911 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu16.c @@ -15,5 +15,5 @@ void test_vmovQ_nu16 (void) out_uint16x8_t = vmovq_n_u16 (arg0_uint16_t); } -/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.16\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu32.c b/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu32.c index 3c01d39c986..1b7f83c0587 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu32.c @@ -15,5 +15,5 @@ void test_vmovQ_nu32 (void) out_uint32x4_t = vmovq_n_u32 (arg0_uint32_t); } -/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.32\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu8.c b/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu8.c index 30136192a7a..f67f3653596 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu8.c @@ -15,5 +15,5 @@ void test_vmovQ_nu8 (void) out_uint8x16_t = vmovq_n_u8 (arg0_uint8_t); } -/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.8\[ \]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmov_nf32.c b/gcc/testsuite/gcc.target/arm/neon/vmov_nf32.c index 88fa47b8582..255f565d79e 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmov_nf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmov_nf32.c @@ -15,5 +15,5 @@ void test_vmov_nf32 (void) out_float32x2_t = vmov_n_f32 (arg0_float32_t); } -/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmov_np16.c b/gcc/testsuite/gcc.target/arm/neon/vmov_np16.c index 5a726bf8be8..6b37dcf82da 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmov_np16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmov_np16.c @@ -15,5 +15,5 @@ void test_vmov_np16 (void) out_poly16x4_t = vmov_n_p16 (arg0_poly16_t); } -/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmov_np8.c b/gcc/testsuite/gcc.target/arm/neon/vmov_np8.c index d49655c3165..1905582c45d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmov_np8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmov_np8.c @@ -15,5 +15,5 @@ void test_vmov_np8 (void) out_poly8x8_t = vmov_n_p8 (arg0_poly8_t); } -/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmov_ns16.c b/gcc/testsuite/gcc.target/arm/neon/vmov_ns16.c index faa4d547ec5..5c56d02e558 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmov_ns16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmov_ns16.c @@ -15,5 +15,5 @@ void test_vmov_ns16 (void) out_int16x4_t = vmov_n_s16 (arg0_int16_t); } -/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmov_ns32.c b/gcc/testsuite/gcc.target/arm/neon/vmov_ns32.c index 9f31a5c562e..b4603585668 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmov_ns32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmov_ns32.c @@ -15,5 +15,5 @@ void test_vmov_ns32 (void) out_int32x2_t = vmov_n_s32 (arg0_int32_t); } -/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmov_ns8.c b/gcc/testsuite/gcc.target/arm/neon/vmov_ns8.c index f68b01bd702..dbd70ee3fa9 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmov_ns8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmov_ns8.c @@ -15,5 +15,5 @@ void test_vmov_ns8 (void) out_int8x8_t = vmov_n_s8 (arg0_int8_t); } -/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmov_nu16.c b/gcc/testsuite/gcc.target/arm/neon/vmov_nu16.c index a6053ebbe1b..e035c579a88 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmov_nu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmov_nu16.c @@ -15,5 +15,5 @@ void test_vmov_nu16 (void) out_uint16x4_t = vmov_n_u16 (arg0_uint16_t); } -/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.16\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmov_nu32.c b/gcc/testsuite/gcc.target/arm/neon/vmov_nu32.c index 9f0634eaf1b..3ceee794a1a 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmov_nu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmov_nu32.c @@ -15,5 +15,5 @@ void test_vmov_nu32 (void) out_uint32x2_t = vmov_n_u32 (arg0_uint32_t); } -/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.32\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vmov_nu8.c b/gcc/testsuite/gcc.target/arm/neon/vmov_nu8.c index 62f9d4ad2b9..c5328d2236b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vmov_nu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vmov_nu8.c @@ -15,5 +15,5 @@ void test_vmov_nu8 (void) out_uint8x8_t = vmov_n_u8 (arg0_uint8_t); } -/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vdup\.8\[ \]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */