public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jan Hubicka <hubicka@ucw.cz>
To: Martin Jambor <mjambor@suse.cz>
Cc: GCC Patches <gcc-patches@gcc.gnu.org>, Jan Hubicka <hubicka@ucw.cz>
Subject: Re: [PATCH 2/6] Indirect call graph edges
Date: Mon, 22 Feb 2010 15:52:00 -0000	[thread overview]
Message-ID: <20100222154455.GB3026@kam.mff.cuni.cz> (raw)
In-Reply-To: <20100213180157.129177066@alvy.suse.cz>

> 2010-02-10  Martin Jambor  <mjambor@suse.cz>
> 
> 	* cgraph.h (struct cgraph_node): New field indirect_calls.
> 	(struct cgraph_indirect_call_info): New type.
> 	(struct cgraph_edge): Removed field indirect_call. New fields
> 	indirect_info, indirect_inlining_edge and indirect_unknown_callee.
> 	(cgraph_create_indirect_edge): Declare.
> 	(cgraph_make_edge_direct): Likewise.
> 	(enum LTO_cgraph_tags): New item LTO_cgraph_indirect_edge.
> 	* ipa-prop.h (struct ipa_param_call_note): Removed.
> 	(struct ipa_node_params): Removed field param_calls.
> 	* cgraph.c (cgraph_add_edge_to_call_site_hash): New function.
> 	(cgraph_edge): Search also among the indirect edges, use
> 	cgraph_add_edge_to_call_site_hash to add edges to the call site hash.
> 	(cgraph_set_call_stmt): Possibly turn an indirect edge into a direct
> 	one, use cgraph_add_edge_to_call_site_hash to add edges to the call
> 	site hash.
> 	(initialize_inline_failed): Assign a reason to indirect edges.
> 	(cgraph_create_edge_1): New function.
> 	(cgraph_create_edge): Moved some functionality to
> 	cgraph_create_edge_1.
> 	(cgraph_create_indirect_edge): New function.
> 	(cgraph_edge_remove_callee): Add an assert checking for
> 	non-indirectness.
> 	(cgraph_edge_remove_caller): Special-case indirect edges.
> 	(cgraph_remove_edge): Likewise.
> 	(cgraph_set_edge_callee): New function.
> 	(cgraph_redirect_edge_callee): Use cgraph_set_edge_callee.
> 	(cgraph_make_edge_direct): New function.
> 	(cgraph_update_edges_for_call_stmt_node): Do nothing only when also
> 	the declaration of the call statement matches.
> 	(cgraph_node_remove_callees): Special-case indirect edges.
> 	(cgraph_clone_edge): Likewise.
> 	(cgraph_clone_node): Clone also the indirect edges.
> 	(dump_cgraph_node): Dump indirect_inlining_edge flag instead of
> 	indirect_call, dump count of indirect_calls edges.
> 	* ipa-prop.c (ipa_note_param_call): Create indirect edges instead of
> 	creating notes.  New parameter node.
> 	(ipa_analyze_call_uses): New parameter node, pass it on to
> 	ipa_note_param_call.
> 	(ipa_analyze_stmt_uses): Likewise.
> 	(ipa_analyze_params_uses): Pass node to ipa_analyze_stmt_uses.
> 	(print_edge_addition_message): Work on edges rather than on notes.
> 	(update_call_notes_after_inlining): Likewise.
> 	(ipa_free_node_params_substructures): Do not free notes.
> 	(ipa_node_duplication_hook): Do not duplicate notes.
> 	(ipa_write_param_call_note): Removed.
> 	(ipa_read_param_call_note): Removed.
> 	(ipa_write_indirect_edge_info): New function.
> 	(ipa_read_indirect_edge_info): Likewise.
> 	(ipa_write_node_info): Do not stream notes, do stream information
> 	in indirect edges.
> 	(ipa_read_node_info): Likewise.
> 	(lto_ipa_fixup_call_notes): Removed.
> 	* ipa-cp.c (pass_ipa_cp): Set stmt_fixup to NULL.
> 	* ipa-inline.c (pass_ipa_inline): Likewise.
> 	* cgraphunit.c (verify_cgraph_node): Check also indirect edges.
> 	* cif-code.def (INDIRECT_UNKNOWN_CALL): New reason.
> 	* tree-inline.c (copy_bb): Removed an unnecessary double check for
> 	is_gimple_call.
> 	* tree-inline.c (get_indirect_callee_fndecl): Do not consider indirect
> 	edges.
> 	* lto-cgraph.c (output_outgoing_cgraph_edges): New function.
> 	(output_cgraph): Stream also indirect edges.
> 	(lto_output_edge): Added capability to stream indirect edges.
> 	(input_edge): Likewise.
> 	(input_cgraph_1): Likewise.
> 
> 	* testsuite/gcc.dg/lto/20091209-1_0.c: New testcase.

OK (for pretty-ipa).
As Richard commented, we will need way of collecting list of indirect callers
for need of passes propagating data across callgraph.  That can be done
incrementally.  We need way to get list of possible destinations that should
be fed in by PTA.

Honza

  parent reply	other threads:[~2010-02-22 15:45 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-13 18:03 [PATCH 0/6] Cgraph changes and various devirtualizations Martin Jambor
2010-02-13 18:03 ` [PATCH 1/6] Clarify edge redirection for inline clones Martin Jambor
2010-02-22 14:23   ` Jan Hubicka
2010-02-13 18:04 ` [PATCH 4/6] Remove unused ipa_note_param_call.called flag (approved) Martin Jambor
2010-02-13 18:14   ` Richard Guenther
2010-03-05 16:19     ` Martin Jambor
2010-02-22 15:04   ` Jan Hubicka
2010-02-13 18:04 ` [PATCH 2/6] Indirect call graph edges Martin Jambor
2010-02-13 18:17   ` Richard Guenther
2010-02-13 18:25     ` Richard Guenther
2010-03-05 17:06       ` Martin Jambor
2010-02-22 15:52   ` Jan Hubicka [this message]
2010-02-22 16:05     ` Richard Guenther
2010-02-22 16:06       ` Jan Hubicka
2010-02-13 18:04 ` [PATCH 3/6] Folding of virtual calls Martin Jambor
2010-02-13 18:12   ` Richard Guenther
2010-02-13 18:04 ` [PATCH 5/6] Indirect inlining " Martin Jambor
2010-02-22 16:49   ` Jan Hubicka
2010-03-10 13:45     ` Martin Jambor
2010-03-10 15:24       ` Jan Hubicka
2010-02-13 18:04 ` [PATCH 6/6] Devirtualization in ipa-cp Martin Jambor
2010-02-22 16:37   ` Jan Hubicka
2010-03-11 13:42     ` Martin Jambor

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=20100222154455.GB3026@kam.mff.cuni.cz \
    --to=hubicka@ucw.cz \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=mjambor@suse.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).