On Wed, Dec 18, 2013 at 2:07 PM, Kirill Yukhin <kirill.yuk...@gmail.com> wrote: > Hello, > > On 02 Dec 16:13, Kirill Yukhin wrote: >> Hello, >> On 19 Nov 12:14, Kirill Yukhin wrote: >> > Hello, >> > On 15 Nov 20:10, Kirill Yukhin wrote: >> > > > Is it ok to commit to main trunk? >> > > Ping. >> > Ping. >> Ping. > Ping. > > Updated patch in the bottom.
This patch actually implements AVX512F arguments passing ABI and insn sequences generation for basic vector functionality (I guess these expanders were referred as "hooks"). Looking at the title, I expected most changes in ix86_builtin_vectorized_function, but IIRC, I have seen these in another patch. @@ -18629,6 +18713,11 @@ ix86_expand_vector_convert_uns_vsivsf (rtx target, rtx val) enum machine_mode fltmode = GET_MODE (target); rtx (*cvt) (rtx, rtx); + if (intmode == V16SImode) + { + emit_insn (gen_ufloatv16siv16sf2 (target, val)); + return; + } if (intmode == V4SImode) Please put the above directly in the sse.md expander. Use static mode checks in .md files (see below). @@ -3555,11 +3556,17 @@ (match_operand:VF1 1 "register_operand")] "TARGET_SSE2" { - rtx tmp[3]; - tmp[0] = ix86_expand_adjust_ufix_to_sfix_si (operands[1], &tmp[2]); - tmp[1] = gen_reg_rtx (<sseintvecmode>mode); - emit_insn (gen_fix_trunc<mode><sseintvecmodelower>2 (tmp[1], tmp[0])); - emit_insn (gen_xor<sseintvecmodelower>3 (operands[0], tmp[1], tmp[2])); + if (GET_MODE (operands[1]) == V16SFmode) + emit_insn (gen_ufix_truncv16sfv16si2 (operands[0], + operands[1])); + else Please use static mode checks in the form of "if (<MODE>mode == V16SFmode)" in the .md files. The <MODE> will be substituted from VF1 mode iterator in the C source before compilation. diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 99f6b1f..da08020 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -5636,7 +5636,7 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, This (minor) change should be reviewed by a middle-end reviewer. BTW: I didn't find (updated?) ChangeLog anywhere in the message, so i took the one from the original submission: 2013-11-12 Alexander Ivchenko <alexander.ivche...@intel.com> Maxim Kuznetsov <maxim.kuznet...@intel.com> Sergey Lega <sergey.s.l...@intel.com> Anna Tikhonova <anna.tikhon...@intel.com> Ilya Tocar <ilya.to...@intel.com> Andrey Turetskiy <andrey.turets...@intel.com> Ilya Verbin <ilya.ver...@intel.com> Kirill Yukhin <kirill.yuk...@intel.com> Michael Zolotukhin <michael.v.zolotuk...@intel.com> * config/i386/i386.c (MAX_CLASSES): Increase number of classes. (classify_argument): Extend for 512 bit vectors. (construct_container): Ditto. (function_arg_advance_32): Ditto. (function_arg_advance_64): Ditto. (function_arg_32): Ditto. (function_arg_64): Ditto. (function_value_32): Ditto. (return_in_memory_32): Ditto. (ix86_gimplify_va_arg): Ditto. (standard_sse_constant_p): Ditto. (standard_sse_constant_opcode): Ditto. (ix86_expand_vector_convert_uns_vsivsf): Ditto. (ix86_build_const_vector): Ditto. (ix86_build_signbit_mask): Ditto. (ix86_expand_sse_cmp): Extend for AVX512. (ix86_expand_sse_movcc): Ditto. (ix86_expand_int_vcond): Ditto. (ix86_expand_vec_perm): Ditto. (ix86_expand_sse_unpack): Ditto. (ix86_constant_alignment): Ditto. (avx_vpermilp_parallel): Ditto. (ix86_rtx_costs): Ditto. (ix86_expand_vector_init_duplicate): Ditto. (ix86_expand_vector_init_concat): Ditto. (ix86_expand_vector_init_general): Ditto. (ix86_expand_vector_extract): Ditto. (emit_reduc_half): Ditto. (ix86_vector_mode_supported_p): Ditto. (ix86_emit_swdivsf): Ditto. (ix86_emit_swsqrtsf): Ditto. (expand_vec_perm_1): Ditto. (ix86_vectorize_vec_perm_const_ok): Ditto. (ix86_expand_mul_widen_evenodd): Ditto. (ix86_expand_sse2_mulvxdi3): Ditto. (ix86_preferred_simd_mode): Ditto. (ix86_autovectorize_vector_sizes): Ditto. (ix86_expand_vec_perm_vpermi2): New. (ix86_vector_duplicate_value): Ditto. * config/i386/sse.md (fixuns_trunc<mode><sseintvecmodelower>2): Extend for AVX512. (vec_pack_ufix_trunc_<mode>): Ditto. * tree-vect-stmts.c (vectorizable_load): Support AVX512's gathers. * tree-vectorizer.h (MAX_VECTORIZATION_FACTOR): Extend for 512 bit vectors. I assumed the same testing procedure as described in the original submission: Testing: 1. Bootstrap pass. 2. make check shows no regressions. 3. Spec 2000 & 2006 build show no regressions both with and without -mavx512f option. 4. Spec 2000 & 2006 run shows no stability regressions without -mavx512f option. The x86 part is OK for mainline. You will also need approval from the middle-end reviewer for tree-* parts. Thanks, Uros.