On Fri, Aug 15, 2014 at 1:42 PM, Kirill Yukhin <kirill.yuk...@gmail.com> wrote: > Hello, > This patch splits VI48_AVX512F iterator into two. > It extends vcvtps2udq,vpbroadcastmb2d patterns as well. > > Bootstrapped. > New tests on top of patch-set all pass > under simulator. > > Is it ok for trunk? > > gcc/ > * config/i386/sse.md > (define_mode_iterator VI48_AVX512F): Delete. > (define_mode_iterator VI4_AVX512VL): New. > (define_mode_iterator VI248_AVX512): New. > (define_insn > "<mask_codefor>avx512f_ufix_notruncv16sfv16si<mask_name><round_name>"): > Delete. > (define_insn > > "<mask_codefor><avx512>_ufix_notrunc<sf2simodelower><mode><mask_name><round_name>"): > New. > (define_insn "avx512cd_maskw_vec_dup<mode>"): Macroize. > (define_insn "<avx2_avx512f>_ashrv<mode><mask_name>"): Delete. > (define_insn "<avx2_avx512bw>_ashrv<mode><mask_name>"): New.
It looks to me that the macroization is somehow wrong for ashrv. I'd split the mode iterator to: > +(define_mode_iterator VI248_AVX512 > + [(V16SI "TARGET_AVX512F") (V8SI "TARGET_AVX2") (V4SI "TARGET_AVX2") > + (V32HI "TARGET_AVX512BW") > + (V16HI "TARGET_AVX512BW && TARGET_AVX512VL") > + (V8HI "TARGET_AVX512BW && TARGET_AVX512VL") > + (V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX512VL") (V2DI > "TARGET_AVX512VL")]) > + V4SI, V8SI, V16SI (AVX512F), V8DI (AVX512F), V4DI (AVX512VL), V2DI (AVX512VL), with AVX2 as the baseline and V32HI, V16HI (AVX512VL), V8HI (AVX512VL), with AVX512BW as the baseline Uros.