On Fri, Apr 12, 2019 at 4:41 AM Martin Liška <mli...@suse.cz> wrote:
>
> On 4/11/19 6:30 PM, H.J. Lu wrote:
> > On Thu, Apr 11, 2019 at 1:38 AM Martin Liška <mli...@suse.cz> wrote:
> >>
> >> Hi.
> >>
> >> The patch is adding missing AVX512 ISAs for target and target_clone
> >> attributes.
> >>
> >> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
> >>
> >> Ready to be installed?
> >> Thanks,
> >> Martin
> >>
> >> gcc/ChangeLog:
> >>
> >> 2019-04-10  Martin Liska  <mli...@suse.cz>
> >>
> >>         PR target/89929
> >>         * config/i386/i386.c (get_builtin_code_for_version): Add
> >>         support for missing AVX512 ISAs.
> >>
> >> gcc/testsuite/ChangeLog:
> >>
> >> 2019-04-10  Martin Liska  <mli...@suse.cz>
> >>
> >>         PR target/89929
> >>         * g++.target/i386/mv28.C: New test.
> >>         * gcc.target/i386/mvc14.c: New test.
> >> ---
> >>  gcc/config/i386/i386.c                | 34 ++++++++++++++++++++++++++-
> >>  gcc/testsuite/g++.target/i386/mv28.C  | 30 +++++++++++++++++++++++
> >>  gcc/testsuite/gcc.target/i386/mvc14.c | 16 +++++++++++++
> >>  3 files changed, 79 insertions(+), 1 deletion(-)
> >>  create mode 100644 gcc/testsuite/g++.target/i386/mv28.C
> >>  create mode 100644 gcc/testsuite/gcc.target/i386/mvc14.c
> >>
> >>
> >
>
> Hi.
>
> > Since any ISAs beyond AVX512F may be enabled individually, we
> > can't simply assign priorities to them.   For GFNI, we can have
> >
> > 1. GFNI
> > 2.  GFNI + AVX
> > 3.  GFNI + AVX512F
> > 4. GFNI + AVX512F + AVX512VL
>
> Makes sense to me! I'm considering syntax extension where one would be
> able to come up with a priority. Eg.
>
> __attribute__((target("gfni,avx512bw", priority((3)))))
>
> Without that the ISA combinations are probably not comparable in a reasonable 
> way.
>
> >
> > For this code,  GFNI + AVX512BW is ignored:
> >
> > [hjl@gnu-cfl-1 pr89929]$ cat z.ii
> > __attribute__((target("gfni")))
> > int foo(int i) {
> >         return 1;
> > }
> > __attribute__((target("gfni,avx512bw")))
> > int foo(int i) {
> >         return 4;
> > }
> > __attribute__((target("default")))
> > int foo(int i) {
> >         return 3;
> > }
> > int bar ()
> > {
> >         return foo(2);
> > }
>
> For 'target' attribute it works for me:
>
> 1) $ cat z.c && ./xg++ -B. z.c -c
> #include <x86intrin.h>
> volatile __m512i x1, x2;
> volatile __mmask64 m64;
>
> __attribute__((target("gfni")))
> int foo(int i) {
>     x1 = _mm512_gf2p8affineinv_epi64_epi8(x1, x2, 3);
>     return 1;
> }
> __attribute__((target("gfni,avx512bw")))
> int foo(int i) {
>     return 4;
> }
> __attribute__((target("default")))
> int foo(int i) {
>   return 3;
> }
> int bar ()
> {
>         return foo(2);
> }
> In file included from ./include/immintrin.h:117,
>                  from ./include/x86intrin.h:32,
>                  from z.c:1:
> z.c: In function ‘int foo(int)’:
> z.c:7:10: error: ‘__builtin_ia32_vgf2p8affineinvqb_v64qi’ needs isa option 
> -m32 -mgfni -mavx512f
>     7 |     x1 = _mm512_gf2p8affineinv_epi64_epi8(x1, x2, 3);
>       |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> z.c:7:10: note: the ABI for passing parameters with 64-byte alignment has 
> changed in GCC 4.6
>
> 2) $ cat z.c && ./xg++ -B. z.c -c
> #include <x86intrin.h>
> volatile __m512i x1, x2;
> volatile __mmask64 m64;
>
> __attribute__((target("gfni")))
> int foo(int i) {
>     return 1;
> }
> __attribute__((target("gfni,avx512bw")))
> int foo(int i) {
>     x1 = _mm512_gf2p8affineinv_epi64_epi8(x1, x2, 3);
>     return 4;
> }
> __attribute__((target("default")))
> int foo(int i) {
>   return 3;
> }
> int bar ()
> {
>         return foo(2);
> }
>
> [OK]
>
> Btw. is it really correct the '-m32' in: 'needs isa option -m32' ?

It does look odd.

> Similar applies to target_clone attribute where we'll have to come up with
> a syntax that will allow multiple ISA to be combined. Something like:
>
> __attribute__((target_clones("gfni+avx512bw")))
>
> ? Priorities can be maybe implemented by order?
>

I am thinking -misa=processor which will enable ISAs for
processor.  It differs from -march=.  -misa= doesn't set
-mtune.

-- 
H.J.

Reply via email to