On Thu, Mar 25, 2021 at 1:54 PM Jakub Jelinek <ja...@redhat.com> wrote:
>
> On Wed, Mar 24, 2021 at 10:23:44AM -0700, H.J. Lu via Gcc-patches wrote:
> > For always_inline in system headers, we don't know if caller's ISAs are
> > compatible with callee's ISAs until much later.  Skip ISA check for
> > always_inline in system headers if caller has target attribute.
> >
> > gcc/
> >
> >       PR target/98209
> >       PR target/99744
> >       * config/i386/i386.c (ix86_can_inline_p): Don't check ISA for
> >       always_inline in system headers.
>
> Aren't *intrin.h system headers too?

I was under impression that they are not, since they live outside of
/usr/include.

> Doesn't this mean we can now inline all the intrinsics if the caller doesn't
> have the default target options and doesn't have the needed ISA?

No, we should not.


> Consider e.g.
> #include <x86intrin.h>
>
> #ifdef FOO
> void
> foo (__m512 *p)
> {
>   *p = _mm512_setzero_ps ();
> }
> #else
> __attribute__((target ("avx"))) void
> bar (__m512 *p)
> {
>   *p = _mm512_setzero_ps ();
> }
> #endif
>
> #ifdef FOO
> void
> baz (__m512d *p, __m512d *q, int mask)
> {
>   *p = _mm512_mask_mov_pd (*p, mask, *q);
> }
> #else
> __attribute__((target ("avx"))) void
> qux (__m512d *p, __m512d *q, int mask)
> {
>   *p = _mm512_mask_mov_pd (*p, mask, *q);
> }
> #endif
>
> If you compile this without your patch, you'll get
> inlining failed in call to ‘always_inline’ ‘_mm512_setzero_ps’: target 
> specific option mismatch
> errors in all cases (always the first one), but with your patch
> the _mm512_setzero_ps (); gets through completely and on the mask move
> one gets instead
> ‘__builtin_ia32_movapd512_mask’ needs isa option -mavx512f
> error and
> the ABI for passing parameters with 64-byte alignment has changed in GCC 4.6
> note.  IMNSHO this change needs to be reverted and we need to come up with a
> way (some attribute) to say explicitly whether we can or can't inline that
> always_inline function despite target specific option mismatches.

If the patch does not differentiate between system and user headers,
then please revert it.

Uros.

Reply via email to