(const_int 1)))])
(define_insn "vec_dupv4sf"
- [(set (match_operand:V4SF 0 "register_operand" "=v,v,x")
+ [(set (match_operand:V4SF 0 "register_operand" "=v,v,v,x")
(vec_duplicate:V4SF
- (match_operand:SF 1 "nonimmediate_operand" "Yv,m,0")))]
+ (match_operand:SF 1 "nonimmediate_operand" "Yv,v,m,0")))]
"TARGET_SSE"
"@
- vshufps\t{$0, %1, %1, %0|%0, %1, %1, 0}
+ * return TARGET_AVX2 ? \"vbroadcastss\t{%1, %0|%0, %1}\" : \"vshufps\t{$0, %d1, %0|%0, %d1, 0}\";
+ vbroadcastss\t{%1, %g0|%g0, %1}
vbroadcastss\t{%1, %0|%0, %1}
shufps\t{$0, %0, %0|%0, %0, 0}"
- [(set_attr "isa" "avx,avx,noavx")
- (set_attr "type" "sseshuf1,ssemov,sseshuf1")
- (set_attr "length_immediate" "1,0,1")
- (set_attr "prefix_extra" "0,1,*")
- (set_attr "prefix" "maybe_evex,maybe_evex,orig")
- (set_attr "mode" "V4SF")])
+ [(set_attr "isa" "avx,*,avx,noavx")
+ (set (attr "type")
+ (cond [(and (eq_attr "alternative" "0")
+ (match_test "!TARGET_AVX2"))
+ (const_string "sseshuf1")
+ (eq_attr "alternative" "3")
+ (const_string "sseshuf1")
+ ]
+ (const_string "ssemov")))
+ (set (attr "length_immediate")
+ (if_then_else (eq_attr "type" "sseshuf1")
+ (const_string "1")
+ (const_string "0")))
+ (set_attr "prefix_extra" "0,1,1,*")
+ (set_attr "prefix" "maybe_evex,evex,maybe_evex,orig")
+ (set_attr "mode" "V4SF,V16SF,V4SF,V4SF")
+ (set (attr "enabled")
+ (if_then_else (eq_attr "alternative" "1")
+ (symbol_ref "TARGET_AVX512F && !TARGET_AVX512VL
+ && !TARGET_PREFER_AVX256")
+ (const_string "*")))])
(define_insn "*vec_dupv4si"
- [(set (match_operand:V4SI 0 "register_operand" "=v,v,x")
+ [(set (match_operand:V4SI 0 "register_operand" "=v,v,v,v,x")
(vec_duplicate:V4SI
- (match_operand:SI 1 "nonimmediate_operand" "Yv,m,0")))]
+ (match_operand:SI 1 "nonimmediate_operand" "Yvm,v,Yv,m,0")))]
"TARGET_SSE"
"@
+ vpbroadcastd\t{%1, %0|%0, %1}
+ vpbroadcastd\t{%1, %g0|%g0, %1}
%vpshufd\t{$0, %1, %0|%0, %1, 0}
vbroadcastss\t{%1, %0|%0, %1}
shufps\t{$0, %0, %0|%0, %0, 0}"
- [(set_attr "isa" "sse2,avx,noavx")
- (set_attr "type" "sselog1,ssemov,sselog1")
- (set_attr "length_immediate" "1,0,1")
- (set_attr "prefix_extra" "0,1,*")
- (set_attr "prefix" "maybe_vex,maybe_evex,orig")
- (set_attr "mode" "TI,V4SF,V4SF")
+ [(set_attr "isa" "avx2,*,sse2,avx,noavx")
+ (set_attr "type" "ssemov,ssemov,sseshuf1,ssemov,sseshuf1")
+ (set_attr "length_immediate" "0,0,1,0,1")
+ (set_attr "prefix_extra" "1,1,0,1,*")
+ (set_attr "prefix" "maybe_evex,evex,maybe_vex,maybe_evex,orig")
+ (set_attr "mode" "TI,XI,TI,V4SF,V4SF")
(set (attr "preferred_for_speed")
- (cond [(eq_attr "alternative" "1")
+ (cond [(eq_attr "alternative" "3")
(symbol_ref "!TARGET_INTER_UNIT_MOVES_TO_VEC")
]
- (symbol_ref "true")))])
+ (symbol_ref "true")))
+ (set (attr "enabled")
+ (if_then_else (eq_attr "alternative" "1")
+ (symbol_ref "TARGET_AVX512F && !TARGET_AVX512VL
+ && !TARGET_PREFER_AVX256")
+ (const_string "*")))])
(define_insn "*vec_dupv2di"
[(set (match_operand:V2DI 0 "register_operand" "=x,v,v,v,x")