public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Biener <rguenther@suse.de>
To: Jan Hubicka <hubicka@ucw.cz>
Cc: gcc-patches@gcc.gnu.org
Subject: Re: [PATCH] tree-optimization/109304 - properly handle instrumented aliases
Date: Tue, 11 Apr 2023 08:15:54 +0000 (UTC)	[thread overview]
Message-ID: <nycvar.YFH.7.77.849.2304110810080.4466@jbgna.fhfr.qr> (raw)
In-Reply-To: <ZCtfhKCu5IrkwQFw@kam.mff.cuni.cz>

On Tue, 4 Apr 2023, Jan Hubicka wrote:

> > On Tue, 28 Mar 2023, Richard Biener wrote:
> > 
> > > When adjusting calls to reflect instrumentation we failed to handle
> > > calls to aliases since they appear to have no body.  Instead resort
> > > to symtab node availability.  The patch also avoids touching
> > > internal function calls in a more obvious way (builtins might
> > > have a body available).
> > > 
> > > profiledbootstrap & regtest running on x86_64-unknown-linux-gnu.
> > > 
> > > Honza - does this look OK?
> > > 	PR tree-optimization/109304
> > > 	* tree-profile.cc (tree_profiling): Use symtab node
> > > 	availability to decide whether to skip adjusting calls.
> > > 	Do not adjust calls to internal functions.
> > > @@ -842,12 +842,15 @@ tree_profiling (void)
> > >  	    for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
> > >  	      {
> > >  		gcall *call = dyn_cast <gcall *> (gsi_stmt (gsi));
> > > -		if (!call)
> > > +		if (!call || gimple_call_internal_p (call))
> > >  		  continue;
> > >  
> > >  		/* We do not clear pure/const on decls without body.  */
> > >  		tree fndecl = gimple_call_fndecl (call);
> > > -		if (fndecl && !gimple_has_body_p (fndecl))
> > > +		cgraph_node *callee;
> > > +		if (fndecl
> > > +		    && (callee = cgraph_node::get (fndecl))
> > > +		    && callee->get_availability (node) == AVAIL_NOT_AVAILABLE)
> 
> As discussed earlier, the testcase I posted can be adjusted to put the
> const declared wrapper into another translation unit, so I think we will
> need to drop the visibility check completely.  But as discussed, it is
> wrong code issue, but not a regression, so we may go with the
> availability check as you suggest. So the patch is OK. 
> 
> 
> I wonder if we do not want to drop it everywhere (as we plan for next
> stage1 anyway).  I think similar ICE as in the PR can be produced with
> LTO. In normal situation declaration merging will do the right thing:
> If you have unit A calling const foo externally, it won't get processed
> by the code above.  However unit B declaring foo will get it downgraded
> to non-const.
> 
> Now at WPA time we will read both A and B and in declaration merging B's
> definition will prevail.  This won't happen if lto_symtab_merge_p
> returns false which can probably be triggered by adding warning/error
> attribute to B's declaration but not to A's.
> 
> It is however really side case and I am worried about dropping
> pure/const from builtin declarations...

Yeah, that's what I'm worried about as well.  I guess we'd need to
do the demotion to non-const/pure at WPA time and have a flag
in the cgraph node indicating instrument_add_{read,write}?  But
then how should we deal with C++ comdats instrumented in one TU
but not in another?  Does this mean we should do instrumentation
at IPA time instead of as small IPA pass before IPA?

That said, when there's a definition of say strlen in a TU and
that's instrumented we do want to drop pure from calls but if
not then we shouldn't worry.

Without LTO we'd still run into coverage issues but at least
with LTO we shouldn't ICE?

Richard.

  parent reply	other threads:[~2023-04-11  8:15 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-31  7:20 Richard Biener
2023-04-03 23:21 ` Jan Hubicka
2023-04-04  8:26   ` Jakub Jelinek
2023-04-04 10:14     ` Jan Hubicka
2023-04-11  8:21       ` Richard Biener
2023-04-11  8:15   ` Richard Biener [this message]
2023-04-14 19:12     ` Jan Hubicka
2023-04-17  6:35       ` Richard Biener
2023-04-18 16:18         ` Jan Hubicka
  -- strict thread matches above, loose matches on Subject: below --
2023-03-28  8:06 Richard Biener

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=nycvar.YFH.7.77.849.2304110810080.4466@jbgna.fhfr.qr \
    --to=rguenther@suse.de \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=hubicka@ucw.cz \
    /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).