On Thu, Aug 28, 2014 at 3:48 PM, Kirill Yukhin <kirill.yuk...@gmail.com> wrote: > Hello, > This patch adds patterns to support FMA new insns. > > Bootstrapped. > AVX-512* tests on top of patch-set all pass > under simulator. > > Is it ok for trunk? > > gcc/ > * config/i386/sse.md > (define_mode_iterator VF_AVX512VL): New. > (define_mode_iterator FMAMODEM): Allow 128/256bit evex version. > (define_mode_iterator FMAMODE): Ditto. > (define_expand "avx512f_fmadd_<mode>_maskz<round_expand_name>"): > Delete. > (define_expand "<avx512>_fmadd_<mode>_maskz<round_expand_name>"): New. > (define_insn > "<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name><round_name>"): > Delete. > (define_insn > > "<sd_mask_codefor>fma_fmadd_noavx512_<mode><sd_maskz_name><round_name>": > New. > (define_insn "avx512f_fmadd_<mode>_mask<round_name>"): Delete. > (define_insn "<avx512>_fmadd_<mode>_mask<round_name>"): New. > (define_insn "avx512f_fmadd_<mode>_mask3<round_name>"): Delete. > (define_insn "<avx512>_fmadd_<mode>_mask3<round_name>"): New. > (define_insn > "<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name><round_name>"): > Delete. > (define_insn > > "<sd_mask_codefor>fma_fmsub_noavx512<mode><sd_maskz_name><round_name>"): > New. > (define_insn > "<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name><round_name>"): Use > VF_AVX512VL. > (define_insn "avx512f_fmadd_<mode>_mask<round_name>"): Delete. > (define_insn "<avx512>_fmadd_<mode>_mask<round_name>"): New. > (define_insn "avx512f_fmadd_<mode>_mask3<round_name>"): Delete. > (define_insn "<avx512>_fmadd_<mode>_mask3<round_name>"): New. > (define_insn > "<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name><round_name>"): > Delete. > (define_insn > > "<sd_mask_codefor>fma_fmsub_noavx512<mode><sd_maskz_name><round_name>"): > New. > (define_insn "avx512f_fmsub_<mode>_mask<round_name>"): Delete. > (define_insn "<avx512>_fmsub_<mode>_mask<round_name>"): New. > (define_insn "avx512f_fmsub_<mode>_mask3<round_name>"): Delete. > (define_insn "<avx512>_fmsub_<mode>_mask3<round_name>"): New. > (define_insn > "<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name><round_name>"): > Delete. > (define_insn > > "<sd_mask_codefor>fma_fnmadd_noavx512_<mode><sd_maskz_name><round_name>"): > New. > (define_insn > "<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name><round_name>"): > Use VF_AVX512VL. > (define_insn "avx512f_fnmadd_<mode>_mask<round_name>"): Delete. > (define_insn "<avx512>_fnmadd_<mode>_mask<round_name>"): New. > (define_insn "avx512f_fnmadd_<mode>_mask3<round_name>"): Delete. > (define_insn "<avx512>_fnmadd_<mode>_mask3<round_name>"): New. > (define_insn > "<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name><round_name>"): > Delete. > (define_insn > > "<sd_mask_codefor>fma_fnmsub_noavx512_<mode><sd_maskz_name><round_name>"): > New. > (define_insn > "<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name><round_name>"): > Use VF_AVX512VL. > (define_insn "avx512f_fnmsub_<mode>_mask<round_name>"): Delete. > (define_insn "<avx512>_fnmsub_<mode>_mask<round_name>"): New. > (define_insn "avx512f_fnmsub_<mode>_mask3<round_name>"): Delete. > (define_insn "<avx512>_fnmsub_<mode>_mask3<round_name>"): New. > (define_expand "avx512f_fmaddsub_<mode>_maskz<round_expand_name>"): > Delete. > (define_expand "<avx512>_fmaddsub_<mode>_maskz<round_expand_name>"): > New. > (define_insn > "<sd_mask_codefor>fma_fmaddsub_<mode><sd_maskz_name><round_name>"): > Rename to > (define_insn > > "<sd_mask_codefor>fma_fmaddsub_noavx512_<mode><sd_maskz_name><round_name>"): > this. > (define_insn > "<sd_mask_codefor>fma_fmaddsub_<mode><sd_maskz_name><round_name>"): > Use VF_AVX512VL. > (define_insn "avx512f_fmaddsub_<mode>_mask<round_name>"): Delete. > (define_insn "<avx512>_fmaddsub_<mode>_mask<round_name>"): New. > (define_insn "avx512f_fmaddsub_<mode>_mask3<round_name>"): Delete. > (define_insn "<avx512>_fmaddsub_<mode>_mask3<round_name>"): New. > (define_insn > "<sd_mask_codefor>fma_fmsubadd_<mode><sd_maskz_name><round_name>"): > Rename to > (define_insn > > "<sd_mask_codefor>fma_fmsubadd_noavx512_<mode><sd_maskz_name><round_name>"): > this. > (define_insn > "<sd_mask_codefor>fma_fmsubadd_<mode><sd_maskz_name><round_name>"): > Use VF_AVX512VL. > (define_insn "avx512f_fmsubadd_<mode>_mask<round_name>"): Delete. > (define_insn "<avx512>_fmsubadd_<mode>_mask<round_name>"): New. > (define_insn "avx512f_fmsubadd_<mode>_mask3<round_name>"): Delete. > (define_insn "<avx512>_fmsubadd_<mode>_mask3<round_name>"): New.
Please document these changes as: [new_pattern_name]: Rename from [old_pattern_name] and use VF_AVXyy mode iterator. > -(define_insn "<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name><round_name>" > +(define_insn > "<sd_mask_codefor>fma_fmsub_noavx512<mode><sd_maskz_name><round_name>" I'd suggest to put noavx512 at the beginning, so: "noavx512_<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name><round_name>" This way, we will have avx512 and noavx512 prefixes. It looks more consistent to me. Otherwise the patch is OK (it is fairly mechanical). Thanks, Uros.