From patchwork Fri Jun 10 15:49:48 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Hubicka X-Patchwork-Id: 99933 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id AACE2B703E for ; Sat, 11 Jun 2011 01:50:09 +1000 (EST) Received: (qmail 31365 invoked by alias); 10 Jun 2011 15:50:06 -0000 Received: (qmail 31351 invoked by uid 22791); 10 Jun 2011 15:50:04 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL, BAYES_00, TW_FN, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from nikam.ms.mff.cuni.cz (HELO nikam.ms.mff.cuni.cz) (195.113.20.16) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 10 Jun 2011 15:49:49 +0000 Received: by nikam.ms.mff.cuni.cz (Postfix, from userid 16202) id 6AE579AC86C; Fri, 10 Jun 2011 17:49:48 +0200 (CEST) Date: Fri, 10 Jun 2011 17:49:48 +0200 From: Jan Hubicka To: gcc-patches@gcc.gnu.org Subject: Cgraph alias reorg 9/14 (skip aliases in ipa-cp) Message-ID: <20110610154948.GG28776@kam.mff.cuni.cz> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Hi. this patch updates ipa-cp to skip aliases. Since it includes some reformating, I decided to leave it for separate patch. It also prevents ipa-cp from an attempt to clone or propagate through thunks. We still don't do any jump functions on those. Regtested/boostrapped x86_64-linux, will commit it shortly. Honza * ipa-cp.c (ipcp_versionable_function_p): Thunks are not versionable. (ipcp_initialize_node_lattices): Do not deal with aliases; Do not try to propagate through thunks. (ipcp_change_tops_to_bottom): Do not deal with aliases. Index: ipa-cp.c =================================================================== --- ipa-cp.c (revision 174911) +++ ipa-cp.c (working copy) @@ -354,6 +354,10 @@ ipcp_versionable_function_p (struct cgra if (node->alias) return false; + /* We don't know how to clone thunks. */ + if (node->thunk.thunk_p) + return false; + /* There are a number of generic reasons functions cannot be versioned. We also cannot remove parameters if there are type attributes such as fnspec present. */ @@ -507,9 +511,11 @@ ipcp_initialize_node_lattices (struct cg struct ipa_node_params *info = IPA_NODE_REF (node); enum ipa_lattice_type type; - if (ipa_is_called_with_var_arguments (info) || node->alias) + if (ipa_is_called_with_var_arguments (info)) type = IPA_BOTTOM; - else if (node->local.local) + /* We don't know how to clone thunks even when they are local. */ + else if (node->local.local + && !node->thunk.thunk_p) type = IPA_TOP; /* When cloning is allowed, we can assume that externally visible functions are not called. We will compensate this by cloning later. */ @@ -592,40 +598,41 @@ ipcp_change_tops_to_bottom (void) prop_again = false; for (node = cgraph_nodes; node; node = node->next) - { - struct ipa_node_params *info = IPA_NODE_REF (node); - count = ipa_get_param_count (info); - for (i = 0; i < count; i++) - { - struct ipcp_lattice *lat = ipa_get_lattice (info, i); - if (lat->type == IPA_TOP) - { - prop_again = true; - if (dump_file) - { - fprintf (dump_file, "Forcing param "); - print_generic_expr (dump_file, ipa_get_param (info, i), 0); - fprintf (dump_file, " of node %s to bottom.\n", - cgraph_node_name (node)); - } - lat->type = IPA_BOTTOM; - } - if (!ipa_param_cannot_devirtualize_p (info, i) - && ipa_param_types_vec_empty (info, i)) - { - prop_again = true; - ipa_set_param_cannot_devirtualize (info, i); - if (dump_file) - { - fprintf (dump_file, "Marking param "); - print_generic_expr (dump_file, ipa_get_param (info, i), 0); - fprintf (dump_file, " of node %s as unusable for " - "devirtualization.\n", - cgraph_node_name (node)); - } - } - } - } + if (!node->alias) + { + struct ipa_node_params *info = IPA_NODE_REF (node); + count = ipa_get_param_count (info); + for (i = 0; i < count; i++) + { + struct ipcp_lattice *lat = ipa_get_lattice (info, i); + if (lat->type == IPA_TOP) + { + prop_again = true; + if (dump_file) + { + fprintf (dump_file, "Forcing param "); + print_generic_expr (dump_file, ipa_get_param (info, i), 0); + fprintf (dump_file, " of node %s to bottom.\n", + cgraph_node_name (node)); + } + lat->type = IPA_BOTTOM; + } + if (!ipa_param_cannot_devirtualize_p (info, i) + && ipa_param_types_vec_empty (info, i)) + { + prop_again = true; + ipa_set_param_cannot_devirtualize (info, i); + if (dump_file) + { + fprintf (dump_file, "Marking param "); + print_generic_expr (dump_file, ipa_get_param (info, i), 0); + fprintf (dump_file, " of node %s as unusable for " + "devirtualization.\n", + cgraph_node_name (node)); + } + } + } + } return prop_again; } @@ -813,10 +820,11 @@ ipcp_iterate_stage (void) ipa_update_after_lto_read (); for (node = cgraph_nodes; node; node = node->next) - { - ipcp_initialize_node_lattices (node); - ipcp_compute_node_scale (node); - } + if (!node->alias) + { + ipcp_initialize_node_lattices (node); + ipcp_compute_node_scale (node); + } if (dump_file && (dump_flags & TDF_DETAILS)) { ipcp_print_all_lattices (dump_file);