]> gcc.gnu.org Git - gcc.git/blobdiff - gcc/config/i386/sse.md
i386: Improve avx* vector concatenation [PR93594]
[gcc.git] / gcc / config / i386 / sse.md
index ac4cf5be686b2e82eaa01eab522a0ce4c9d6161b..cfd79a8354469097af79eab539ea72d35bb9f2b9 100644 (file)
    (set_attr "prefix" "maybe_evex")
    (set_attr "mode" "<sseinsnmode>")])
 
+(define_insn_and_split "*avx_vec_concat<mode>_1"
+  [(set (match_operand:V_256_512 0 "register_operand")
+       (vec_concat:V_256_512
+         (vec_select:<ssehalfvecmode>
+           (unspec:V_256_512
+             [(match_operand:<ssehalfvecmode> 1 "nonimmediate_operand")]
+             UNSPEC_CAST)
+           (match_parallel 3 "avx_identity_operand"
+             [(match_operand 4 "const_int_operand")]))
+         (match_operand:<ssehalfvecmode> 2 "nonimm_or_0_operand")))]
+  "TARGET_AVX
+   && (operands[2] == CONST0_RTX (<ssehalfvecmode>mode)
+       || !MEM_P (operands[1]))
+   && ix86_pre_reload_split ()"
+  "#"
+  "&& 1"
+  [(set (match_dup 0) (vec_concat:V_256_512 (match_dup 1) (match_dup 2)))])
+
 (define_insn "vcvtph2ps<mask_name>"
   [(set (match_operand:V4SF 0 "register_operand" "=v")
        (vec_select:V4SF
This page took 0.046276 seconds and 5 git commands to generate.