+2019-12-10 Richard Sandiford <richard.sandiford@arm.com>
+
+ * config/aarch64/iterators.md (vccore): New iterator.
+ * config/aarch64/aarch64-sve.md (vec_series<mode>): Use it instead
+ of vwcore.
+ (*vec_series<mode>_plus): Likewise.
+
2019-12-10 Frederik Harwath <frederik@codesourcery.com>
* omp-low.c (scan_omp_for): Use clause location in warning.
(match_operand:<VEL> 2 "aarch64_sve_index_operand" "r, Usi, r")))]
"TARGET_SVE"
"@
- index\t%0.<Vctype>, #%1, %<vwcore>2
- index\t%0.<Vctype>, %<vwcore>1, #%2
- index\t%0.<Vctype>, %<vwcore>1, %<vwcore>2"
+ index\t%0.<Vctype>, #%1, %<vccore>2
+ index\t%0.<Vctype>, %<vccore>1, #%2
+ index\t%0.<Vctype>, %<vccore>1, %<vccore>2"
)
;; Optimize {x, x, x, x, ...} + {0, n, 2*n, 3*n, ...} if n is in range
"TARGET_SVE && aarch64_check_zero_based_sve_index_immediate (operands[2])"
{
operands[2] = aarch64_check_zero_based_sve_index_immediate (operands[2]);
- return "index\t%0.<Vctype>, %<vwcore>1, #%2";
+ return "index\t%0.<Vctype>, %<vccore>1, #%2";
}
)
(VNx2DI "x")
(VNx2DF "x")])
+;; Like vwcore, but for the container mode rather than the element mode.
+(define_mode_attr vccore [(VNx16QI "w") (VNx8QI "w") (VNx4QI "w") (VNx2QI "x")
+ (VNx8HI "w") (VNx4HI "w") (VNx2HI "x")
+ (VNx4SI "w") (VNx2SI "x")
+ (VNx2DI "x")])
+
;; Double vector types for ALLX.
(define_mode_attr Vallxd [(QI "8b") (HI "4h") (SI "2s")])
+2019-12-10 Richard Sandiford <richard.sandiford@arm.com>
+
+ * gcc.target/aarch64/sve/mixed_size_6.c: New test.
+
2019-12-10 Frederik Harwath <frederik@codesourcery.com>
* c-c++-common/goacc/clause-locations.c: New test.
--- /dev/null
+/* { dg-options "-O3 -msve-vector-bits=256" } */
+
+#include <stdint.h>
+
+void
+f1 (uint64_t *restrict ptr1, uint8_t *restrict ptr2, uint8_t start)
+{
+#pragma GCC unroll 0
+ for (int i = 0; i < 4; ++i)
+ {
+ ptr1[i] = 10;
+ ptr2[i] = start;
+ start += 1;
+ }
+}
+
+void
+f2 (uint64_t *restrict ptr1, uint16_t *restrict ptr2, uint16_t start)
+{
+#pragma GCC unroll 0
+ for (int i = 0; i < 4; ++i)
+ {
+ ptr1[i] = 10;
+ ptr2[i] = start;
+ start += 2;
+ }
+}
+
+void
+f3 (uint64_t *restrict ptr1, uint32_t *restrict ptr2, uint32_t start)
+{
+#pragma GCC unroll 0
+ for (int i = 0; i < 4; ++i)
+ {
+ ptr1[i] = 10;
+ ptr2[i] = start;
+ start += 4;
+ }
+}
+
+/* { dg-final { scan-assembler {\tindex\tz[0-9]+\.d, x[0-9]+, #1\n} } } */
+/* { dg-final { scan-assembler {\tindex\tz[0-9]+\.d, x[0-9]+, #1\n} } } */
+/* { dg-final { scan-assembler {\tindex\tz[0-9]+\.d, x[0-9]+, #4\n} } } */
+
+/* { dg-final { scan-assembler-not {\tindex\tz[0-9]+\.d, w[0-9]+, #1\n} } } */
+/* { dg-final { scan-assembler-not {\tindex\tz[0-9]+\.d, w[0-9]+, #1\n} } } */
+/* { dg-final { scan-assembler-not {\tindex\tz[0-9]+\.d, w[0-9]+, #4\n} } } */