On Thu, Sep 03, 2020 at 10:11:14AM +0800, Hongtao Liu wrote:
> Thanks for the review, update patch.

Ok for trunk, thanks.

> From acf3825279190ca0540bb4704f66568fdbe06ce8 Mon Sep 17 00:00:00 2001
> From: liuhongt <hongtao....@intel.com>
> Date: Wed, 8 Jul 2020 17:14:36 +0800
> Subject: [PATCH] Optimize memory broadcast for constant vector under AVX512.
> 
> For constant vector having one duplicated value, there's no need to put
> whole vector in the constant pool, using embedded broadcast instead.
> 
> 2020-07-09  Hongtao Liu  <hongtao....@intel.com>
> 
> gcc/ChangeLog:
> 
>       PR target/87767
>       * config/i386/i386-features.c
>       (replace_constant_pool_with_broadcast): New function.
>       (constant_pool_broadcast): Ditto.
>       (class pass_constant_pool_broadcast): New pass.
>       (make_pass_constant_pool_broadcast): Ditto.
>       (remove_partial_avx_dependency): Call
>       replace_constant_pool_with_broadcast under TARGET_AVX512F, it
>       would save compile time when both pass rpad and cpb are
>       available.
>       (remove_partial_avx_dependency_gate): New function.
>       (class pass_remove_partial_avx_dependency::gate): Call
>       remove_partial_avx_dependency_gate.
>       * config/i386/i386-passes.def: Insert new pass after combine.
>       * config/i386/i386-protos.h
>       (make_pass_constant_pool_broadcast): Declare.
>       * config/i386/sse.md (*avx512dq_mul<mode>3<mask_name>_bcst):
>       New define_insn.
>       (*avx512f_mul<mode>3<mask_name>_bcst): Ditto.
>       * config/i386/avx512fintrin.h (_mm512_set1_ps,
>       _mm512_set1_pd,_mm512_set1_epi32, _mm512_set1_epi64): Adjusted.
> 
> gcc/testsuite/ChangeLog:
> 
>       PR target/87767
>       * gcc.target/i386/avx2-broadcast-pr87767-1.c: New test.
>       * gcc.target/i386/avx512f-broadcast-pr87767-1.c: New test.
>       * gcc.target/i386/avx512f-broadcast-pr87767-2.c: New test.
>       * gcc.target/i386/avx512f-broadcast-pr87767-3.c: New test.
>       * gcc.target/i386/avx512f-broadcast-pr87767-4.c: New test.
>       * gcc.target/i386/avx512f-broadcast-pr87767-5.c: New test.
>       * gcc.target/i386/avx512f-broadcast-pr87767-6.c: New test.
>       * gcc.target/i386/avx512f-broadcast-pr87767-7.c: New test.
>       * gcc.target/i386/avx512vl-broadcast-pr87767-1.c: New test.
>       * gcc.target/i386/avx512vl-broadcast-pr87767-1.c: New test.
>       * gcc.target/i386/avx512vl-broadcast-pr87767-2.c: New test.
>       * gcc.target/i386/avx512vl-broadcast-pr87767-3.c: New test.
>       * gcc.target/i386/avx512vl-broadcast-pr87767-4.c: New test.
>       * gcc.target/i386/avx512vl-broadcast-pr87767-5.c: New test.
>       * gcc.target/i386/avx512vl-broadcast-pr87767-6.c: New test.

        Jakub

Reply via email to