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