(set_attr "mode" "<MODE>")])
(define_insn "@pred_strided_store<mode>"
- [(set (match_operand:V_VLS 0 "memory_operand" "+m, m")
- (if_then_else:V_VLS
- (unspec:<VM>
- [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1, vmWc1")
- (match_operand 4 "vector_length_operand" " rK, rK")
- (match_operand 5 "const_int_operand" " i, i")
+ [(set (mem:BLK (scratch))
+ (unspec:BLK
+ [(match_operand:V_VLS 0 "memory_operand" " +m, m")
+ (unspec:<VM>
+ [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1, vmWc1")
+ (match_operand 4 "vector_length_operand" " rK, rK")
+ (match_operand 5 "const_int_operand" " i, i")
(reg:SI VL_REGNUM)
(reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
- (unspec:V_VLS
- [(match_operand 2 "<V_VLS:stride_predicate>" "<V_VLS:stride_store_constraint>")
- (match_operand:V_VLS 3 "register_operand" " vr, vr")] UNSPEC_STRIDED)
- (match_dup 0)))]
+ (match_operand 2 "<V_VLS:stride_predicate>" "<V_VLS:stride_store_constraint>")
+ (match_operand:V_VLS 3 "register_operand" " vr, vr")] UNSPEC_STRIDED))]
"TARGET_VECTOR"
"@
vsse<sew>.v\t%3,%0,%z2%p1
--- /dev/null
+/* { dg-do run { target { riscv_v && rv64 } } } */
+/* { dg-additional-options "-std=c99 -O3 -march=rv64gcv_zvl256b -mrvv-vector-bits=zvl" } */
+
+int a;
+int b[14];
+char c[14][14];
+
+int main() {
+ for (long f = 0; f < 14; ++f)
+ for (long g = 0; g < 4; ++g)
+ c[f][g] = 1;
+
+ for (short f = 0; f < 12; f += 1)
+ c[f][f] = b[f];
+
+ for (long f = 0; f < 4; ++f)
+ for (long g = 0; g < 14; ++g)
+ a ^= c[f][g];
+
+ if (a != 0)
+ __builtin_abort ();
+
+ return 0;
+}