public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
From: Rimvydas Jasinskas <rimvydasjas@gmail.com>
To: Harald Anlauf <anlauf@gmx.de>
Cc: fortran <fortran@gcc.gnu.org>
Subject: Re: Support for NOINLINE attribute
Date: Sat, 11 Feb 2023 00:16:55 +0200	[thread overview]
Message-ID: <CAFmAMQ08t9rKAC9w_x+Z2Dj=LJUok8DT2B02qR3U6hvtnpk7Ug@mail.gmail.com> (raw)
In-Reply-To: <trinity-4b3fd457-1be1-4c15-b277-628cc43074b2-1676063244052@3c-app-gmx-bs43>

On Fri, Feb 10, 2023 at 11:07 PM Harald Anlauf via Fortran
<fortran@gcc.gnu.org> wrote:
> I actually like the idea of supporting the suggested attributes,
> provided they work and behave the same way with and without LTO.
All these three declaration attributes apply the same regardless of
LTO, LTO just expands what optimizations see during link time.

>-NOINLINE: I disagree with Steve here; we shouldn't invent a new
>  syntax (noinline on/off), and rather follow what other compilers
>  provide (INLINE/NOINLINE).
It would also be very complicated to implement this, attribute applies
to declaration and not the use location.  Way better would be just to
forward optimization pragmas see
https://gcc.gnu.org/onlinedocs/gcc/Function-Specific-Option-Pragmas.html
say !GCC$ OPTIMIZE "-O1" subroutine foo() .... !GCC$ OPTIMIZE "-O2"
subroutine bar(), or maybe even !GCC$ push_options subroutine
foor()... end subroutine !GCC$ pop_options
However I have no idea where to even start looking to get these
working (this would be location based pragmas).  NOINLINE already took
me quite some time to study other gcc frontends while trying to find
where it could be hooked in gfortran frontend.  There could be other
special cases in the code where attributes need to be applied
explicitly again, say OMP.

> - NORETURN: this is an important attribute, as your testcases show.
>   However:
>
> +@item @code{NORETURN} -- add hint that given function cannot return.  This
> +makes slightly better code.  More importantly, it helps avoid spurious warnings
> +of uninitialized variables.
>
>   I would not claim "This makes slightly better code", but rather
>   that it provides additional optimiztion opportunities.
I took those from gcc/doc/extend.texi:25383 with a bit of shortening.
I'm not a native speaker, so it is hard for me to condense information
into short readable descriptions :-)

>   Can you explain why you wrote that it should help to "avoid spurious
>   warnings of uninitialized variables"?  While this attribute does provide
>   a useful hint to the compiler, a user should not focus on that attribute
>   just to silence the compiler.
Same, from extend.texi, see gcc/testsuite/gfortran.dg/noreturn-3.f90
It is about marking dead conditional branches, so that the compiler
can prove proper initialization (no -Wmaybe-uninitialized given).  It
should behave the same as in C frontend.

> - WEAK: I do not like the way it is coded in the provided patch.
>   If a target does not support it, we should not generate an error,
>   but rather emit a warning that it is not supported.
>   It appears that declare_weak() already does that.
I took the idea from Ada frontend see gcc/ada/gcc-interface/utils.cc:7210
I would generally prefer a hard error here, libraries like MPI could
break spectacularly if weak symbols would get emitted as global.
Maybe it would be better later add support to use the trick from
finclude/math-vector-fortran.h like:
!GCC$ ATTRIBUTES weak :: SYM if('x86_64')
just an idea, but i'm fine with anything allowing me not sed
"/SYM/s/.globl/.weak/" through assembly intermediates in makefile
rules.

Once the fine details get ironed out I could prepare patch series of
each attribute as its own separate patch, but given the proximity of
changes locations maybe a single patch is OK?

Regards,
Rimvydas

  parent reply	other threads:[~2023-02-10 22:17 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-10  5:42 Rimvydas Jasinskas
2023-02-10  8:24 ` Steve Kargl
2023-02-10  8:38   ` Rimvydas Jasinskas
2023-02-10 18:53     ` Steve Kargl
2023-02-10 21:07 ` Harald Anlauf
2023-02-10 21:16   ` Steve Kargl
2023-02-10 22:16   ` Rimvydas Jasinskas [this message]
2023-02-11 21:26     ` Harald Anlauf
2023-02-12  6:59       ` Rimvydas Jasinskas
2023-02-12 21:28         ` Harald Anlauf
2023-02-13 17:50           ` Harald Anlauf
2023-02-14  9:35             ` nvptx: Adjust 'scan-assembler' in 'gfortran.dg/weak-1.f90' (was: Support for NOINLINE attribute) Thomas Schwinge
2023-02-14 19:55               ` Harald Anlauf
2023-02-15 20:58                 ` Support for WEAK attribute, part 2 Rimvydas Jasinskas
2023-02-16 21:50                   ` Harald Anlauf
2023-02-23 13:55                     ` Rimvydas Jasinskas
2023-02-23 20:53                       ` Harald Anlauf
2023-02-24  5:16                         ` Rimvydas Jasinskas
2023-02-24 22:03                           ` Harald Anlauf
2023-03-28 21:06                           ` Enable 'gfortran.dg/weak-2.f90' for nvptx target (was: Support for WEAK attribute, part 2) Thomas Schwinge
2023-02-18 20:35 ` Support for NOINLINE attribute Bernhard Reutner-Fischer
2023-02-24  7:19   ` Bernhard Reutner-Fischer
2023-02-24 12:02     ` Rimvydas Jasinskas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAFmAMQ08t9rKAC9w_x+Z2Dj=LJUok8DT2B02qR3U6hvtnpk7Ug@mail.gmail.com' \
    --to=rimvydasjas@gmail.com \
    --cc=anlauf@gmx.de \
    --cc=fortran@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).