aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@codesourcery.com>2009-11-11 14:23:03 +0000
committerDaniel Jacobowitz <drow@gcc.gnu.org>2009-11-11 14:23:03 +0000
commit814a4c3b3548e6fae72992026982d3ce8a186568 (patch)
tree8b82758d87fb4dcc505191cc1b4a840c0e65c2cb /gcc
parent40f73786e9ae1b4a4fafffaff58a54d79f4a5a1a (diff)
downloadgcc-814a4c3b3548e6fae72992026982d3ce8a186568.zip
gcc-814a4c3b3548e6fae72992026982d3ce8a186568.tar.gz
gcc-814a4c3b3548e6fae72992026982d3ce8a186568.tar.bz2
arm.c (neon_vdup_constant, [...]): New.
gcc/ * 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<mode>): 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<mode>): Use neon_make_constant. gcc/testsuite/ * gcc.target/arm/neon: Regenerate generated tests. From-SVN: r154094
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog16
-rw-r--r--gcc/config/arm/arm-protos.h1
-rw-r--r--gcc/config/arm/arm.c190
-rw-r--r--gcc/config/arm/neon-testgen.ml1
-rw-r--r--gcc/config/arm/neon.md19
-rw-r--r--gcc/config/arm/neon.ml21
-rw-r--r--gcc/config/arm/vec-common.md5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdupQ_nf32.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdupQ_np16.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdupQ_np8.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdupQ_ns16.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdupQ_ns32.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdupQ_ns8.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdupQ_nu16.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdupQ_nu32.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdupQ_nu8.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdup_nf32.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdup_np16.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdup_np8.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdup_ns16.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdup_ns32.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdup_ns8.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdup_nu16.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdup_nu32.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdup_nu8.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmovQ_nf32.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmovQ_np16.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmovQ_np8.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmovQ_ns16.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmovQ_ns32.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmovQ_ns8.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmovQ_nu16.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmovQ_nu32.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmovQ_nu8.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmov_nf32.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmov_np16.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmov_np8.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmov_ns16.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmov_ns32.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmov_ns8.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmov_nu16.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmov_nu32.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmov_nu8.c2
44 files changed, 276 insertions, 53 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d92359c..04b4498 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,21 @@
2009-11-11 Daniel Jacobowitz <dan@codesourcery.com>
+ * 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<mode>): 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<mode>): Use neon_make_constant.
+
+2009-11-11 Daniel Jacobowitz <dan@codesourcery.com>
+
* config/arm/neon.md (*neon_mov<mode>): Reject two non-register
operands.
(movti, mov<mode>): Call force_reg on one operand if required.
diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h
index ed70926..4d6d51b 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 fc0c559..5fb2d17 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 00a8e53..f1c431a 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 ac1e9d4..43b3805 100644
--- a/gcc/config/arm/neon.md
+++ b/gcc/config/arm/neon.md
@@ -2687,9 +2687,9 @@
})
(define_insn "neon_vdup_n<mode>"
- [(set (match_operand:VDQW 0 "s_register_operand" "=w")
- (unspec:VDQW [(match_operand:<V_elem> 1 "s_register_operand" "r")]
- UNSPEC_VDUP_N))]
+ [(set (match_operand:VX 0 "s_register_operand" "=w")
+ (unspec:VX [(match_operand:<V_elem> 1 "s_register_operand" "r")]
+ UNSPEC_VDUP_N))]
"TARGET_NEON"
"vdup%?.<V_sz_elem>\t%<V_reg>0, %1"
;; Assume this schedules like vmov.
@@ -2697,6 +2697,19 @@
(set_attr "neon_type" "neon_bp_simple")]
)
+(define_insn "neon_vdup_n<mode>"
+ [(set (match_operand:V32 0 "s_register_operand" "=w,w")
+ (unspec:V32 [(match_operand:<V_elem> 1 "s_register_operand" "r,t")]
+ UNSPEC_VDUP_N))]
+ "TARGET_NEON"
+ "@
+ vdup%?.<V_sz_elem>\t%<V_reg>0, %1
+ vdup%?.<V_sz_elem>\t%<V_reg>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 114097d..466b06b 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 a01efb4..d33fdf9 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>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 0267ed4..3817015 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2009-11-11 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * gcc.target/arm/neon: Regenerate generated tests.
+
2009-11-10 Jason Merrill <jason@redhat.com>
* 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 c38959a..a4d5756 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 6e3e726..76b3695 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 647ff2c..61dff2c 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 1fb27ef..593dbeb 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 a0e8f7f..22ec1ae 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 6f2aea7..80d046c 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 bbf5020..9f6c98d 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 e149335..f847c23 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 81cf626..4637c52 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 277b200..94101f6 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 76f1c17..aa505ac 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 ea66a60..271d501 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 89794c3..14c3e5e 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 8b0fed9..98a7f55 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 0d39eec..de853e4 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 eb02c37..abb7472 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 84e8c76..278df3c 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 4d6ab33..4d67513 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 7776b34..9e469f1 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 72fbeda..3109d81 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 d908658..99502f9 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 77a2a41..eea4e1e 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 13ba030..4c98006 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 999d709..b557356 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 f02aca6..748bf6b 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 3c01d39..1b7f83c 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 3013619..f67f365 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 88fa47b..255f565 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 5a726bf..6b37dcf 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 d49655c..1905582 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 faa4d54..5c56d02 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 9f31a5c..b460358 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 f68b01b..dbd70ee 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 a6053eb..e035c57 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 9f0634e..3ceee79 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 62f9d4a..c5328d2 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 } } */