(V8HI "avx512vl") (V16HI "avx512vl") (V32HI "avx512bw")])
(define_mode_attr shuffletype
- [(V32HF "f") (V16HF "f") (V8HF "f")
+ [(V32HF "i") (V16HF "i") (V8HF "i")
+ (V32BF "i") (V16BF "i") (V8BF "i")
(V16SF "f") (V16SI "i") (V8DF "f") (V8DI "i")
(V8SF "f") (V8SI "i") (V4DF "f") (V4DI "i")
(V4SF "f") (V4SI "i") (V2DF "f") (V2DI "i")
[(V64QI "b") (V32HI "w") (V16SI "k") (V8DI "q")
(V32QI "b") (V16HI "w") (V8SI "k") (V4DI "q")
(V16QI "b") (V8HI "w") (V4SI "k") (V2DI "q")
- (V32HF "w") (V16SF "k") (V8DF "q")
- (V16HF "w") (V8SF "k") (V4DF "q")
- (V8HF "w") (V4SF "k") (V2DF "q")
- (HF "w") (SF "k") (DF "q")])
+ (V32HF "w") (V32BF "w") (V16SF "k") (V8DF "q")
+ (V16HF "w") (V16BF "w") (V8SF "k") (V4DF "q")
+ (V8HF "w") (V8BF "w") (V4SF "k") (V2DF "q")
+ (HF "w") (BF "w") (SF "k") (DF "q")])
;; Mapping of vector modes to VPTERNLOG suffix
(define_mode_attr ternlogsuffix
;; For 256-bit modes for TARGET_AVX512VL && TARGET_AVX512DQ
;; i32x4, f32x4, i64x2 or f64x2 suffixes.
(define_mode_attr i128vldq
- [(V8SF "f32x4") (V4DF "f64x2")
+ [(V16HF "i32x4") (V16BF "i32x4") (V8SF "f32x4") (V4DF "f64x2")
(V32QI "i32x4") (V16HI "i32x4") (V8SI "i32x4") (V4DI "i64x2")])
;; Mix-n-match
(match_operand:VF_128 2 "register_operand" "v")
(const_int 1)))]
"TARGET_AVX512ER"
- "vrcp28<ssescalarmodesuffix>\t{<round_saeonly_mask_op3>%1, %2, %0<mask_operand3>|<mask_opernad3>%0, %2, %<iptr>1<round_saeonly_mask_op3>}"
+ "vrcp28<ssescalarmodesuffix>\t{<round_saeonly_mask_op3>%1, %2, %0<mask_operand3>|<mask_operand3>%0, %2, %<iptr>1<round_saeonly_mask_op3>}"
[(set_attr "length_immediate" "1")
(set_attr "prefix" "evex")
(set_attr "type" "sse")
--- /dev/null
+/* PR target/106721 */
+/* { dg-do assemble { target avx512vl } } */
+/* { dg-options "-O3 -mavx512vl" } */
+
+typedef __bf16 __m256bf16 __attribute__((__vector_size__(32)));
+void (*bar) (__m256bf16, __m256bf16, __m256bf16);
+__m256bf16 a;
+volatile __bf16 b, c, d, e, f, g, h;
+
+void
+foo (void)
+{
+ __m256bf16 x[8];
+ int i;
+ for (i = 0; i < 8; i++)
+ x[i] = (__m256bf16) { b, c, d, e, f, g, h };
+ a = x[6];
+ bar (x[0], x[6], x[7]);
+}