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.

Reply via email to