===================================================================
@@ -835,15 +835,18 @@ (define_expand "vec_init<mode><Vel>"
;; Shift an SVE vector left and insert a scalar into element 0.
(define_insn "vec_shl_insert_<mode>"
- [(set (match_operand:SVE_ALL 0 "register_operand" "=w, w")
+ [(set (match_operand:SVE_ALL 0 "register_operand" "=?w, w, ??&w, ?&w")
(unspec:SVE_ALL
- [(match_operand:SVE_ALL 1 "register_operand" "0, 0")
- (match_operand:<VEL> 2 "register_operand" "rZ, w")]
+ [(match_operand:SVE_ALL 1 "register_operand" "0, 0, w, w")
+ (match_operand:<VEL> 2 "aarch64_reg_or_zero" "rZ, w, rZ, w")]
UNSPEC_INSR))]
"TARGET_SVE"
"@
insr\t%0.<Vetype>, %<vwcore>2
- insr\t%0.<Vetype>, %<Vetype>2"
+ insr\t%0.<Vetype>, %<Vetype>2
+ movprfx\t%0, %1\;insr\t%0.<Vetype>, %<vwcore>2
+ movprfx\t%0, %1\;insr\t%0.<Vetype>, %<Vetype>2"
+ [(set_attr "movprfx" "*,*,yes,yes")]
)
;; -------------------------------------------------------------------------
===================================================================
@@ -10,12 +10,13 @@ typedef int32_t vnx4si __attribute__((ve
/*
** foo:
+** fmov (s[0-9]+), w1
** mov (z[0-9]+\.s), w2
** mov (z[0-9]+\.s), w0
-** insr \2, w1
-** insr \2, w1
-** insr \2, w1
-** zip1 \2, \2, \1
+** insr \3, \1
+** insr \3, \1
+** insr \3, \1
+** zip1 \3, \3, \2
** ...
*/
__attribute__((noipa))