From patchwork Thu Aug 8 13:04:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Martin_Li=C5=A1ka?= X-Patchwork-Id: 1144013 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-506499-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=suse.cz Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="ESfkADZy"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4647r55QR6z9sN4 for ; Thu, 8 Aug 2019 23:04:35 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :subject:to:message-id:date:mime-version:content-type; q=dns; s= default; b=WGXfCeM197cmEppuzqB5Cu4omSk5fph5NnN6JQrY3bqGH9Vvr9i1d jV+ZwuDQS6Z1Tu+g6LmMAgnNSVBBdRMEmVlLsqhcxwYbClPZ2WuLTVReQniFAl3a uzp4EcIW+8iG+IM+VqHoVnAzzcuFRkRNkEdr6ExSPQBzCeW5b93Jg0= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :subject:to:message-id:date:mime-version:content-type; s= default; bh=0Hig4+ewxLGVC9yO6iNEj99KfVE=; b=ESfkADZycqx+BwGqcZUb 0go+ngM6n6DHZvXpWNIgmVjYcy6yN1YpT+1RAYY12NFslhpFIm36qocuANJasRRo Yr1ErVJwzz3Xia85B4QO/bN4mpWSs4I3d/hQ2c68Cnkp0as6b5uWjQfrMwzmmtBG rg/LwoFzf4sSXEf/41f1xTQ= Received: (qmail 8009 invoked by alias); 8 Aug 2019 13:04:18 -0000 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 Received: (qmail 7910 invoked by uid 89); 8 Aug 2019 13:04:17 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-17.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.1 spammy=cgraph_node, transformation, UD:indir-call-prof.C X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 08 Aug 2019 13:04:14 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 2B2E1AFD2 for ; Thu, 8 Aug 2019 13:04:12 +0000 (UTC) From: =?utf-8?q?Martin_Li=C5=A1ka?= Subject: [PATCH] Port value profiling to -fopt-info infrastructure. To: gcc-patches@gcc.gnu.org Message-ID: <5d86ba1f-cf38-3a69-8b9f-60a108922243@suse.cz> Date: Thu, 8 Aug 2019 15:04:11 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 X-IsSubscribed: yes Hi. As requested by Richi, I'm suggesting to use new dump_printf optimization info infrastructure. Patch can bootstrap on x86_64-linux-gnu and survives regression tests. Ready to be installed? Thanks, Martin gcc/ChangeLog: 2019-08-08 Martin Liska * value-prof.c (gimple_divmod_fixed_value_transform): Use dump_printf_loc. (gimple_mod_pow2_value_transform): Likewise. (gimple_mod_subtract_transform): Likewise. (init_node_map): Likewise. (gimple_ic_transform): Likewise. (gimple_stringops_transform): Likewise. gcc/testsuite/ChangeLog: 2019-08-08 Martin Liska * g++.dg/tree-prof/indir-call-prof.C: Add -optimize to -fdump-ipa-profile. * g++.dg/tree-prof/morefunc.C: Likewise. * g++.dg/tree-prof/reorder.C: Likewise. * gcc.dg/tree-prof/ic-misattribution-1.c: Likewise. * gcc.dg/tree-prof/indir-call-prof.c: Likewise. * gcc.dg/tree-prof/stringop-1.c: Likewise. * gcc.dg/tree-prof/stringop-2.c: Likewise. * gcc.dg/tree-prof/val-prof-1.c: Likewise. * gcc.dg/tree-prof/val-prof-2.c: Likewise. * gcc.dg/tree-prof/val-prof-3.c: Likewise. * gcc.dg/tree-prof/val-prof-4.c: Likewise. * gcc.dg/tree-prof/val-prof-5.c: Likewise. * gcc.dg/tree-prof/val-prof-7.c: Likewise. --- .../g++.dg/tree-prof/indir-call-prof.C | 2 +- gcc/testsuite/g++.dg/tree-prof/morefunc.C | 2 +- gcc/testsuite/g++.dg/tree-prof/reorder.C | 2 +- .../gcc.dg/tree-prof/ic-misattribution-1.c | 2 +- .../gcc.dg/tree-prof/indir-call-prof.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/stringop-1.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/stringop-2.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c | 2 +- gcc/value-prof.c | 105 +++++++++--------- 14 files changed, 64 insertions(+), 67 deletions(-) diff --git a/gcc/testsuite/g++.dg/tree-prof/indir-call-prof.C b/gcc/testsuite/g++.dg/tree-prof/indir-call-prof.C index 3134c3c0643..be896c02774 100644 --- a/gcc/testsuite/g++.dg/tree-prof/indir-call-prof.C +++ b/gcc/testsuite/g++.dg/tree-prof/indir-call-prof.C @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile -fdump-ipa-afdo" } */ +/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized -fdump-ipa-afdo" } */ struct A { A () {} diff --git a/gcc/testsuite/g++.dg/tree-prof/morefunc.C b/gcc/testsuite/g++.dg/tree-prof/morefunc.C index a9bdc167f45..621d09aec5b 100644 --- a/gcc/testsuite/g++.dg/tree-prof/morefunc.C +++ b/gcc/testsuite/g++.dg/tree-prof/morefunc.C @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -fno-devirtualize --param=profile-func-internal-id=0 -fdump-ipa-profile -fdump-ipa-afdo -Wno-attributes -Wno-coverage-mismatch -Wno-missing-profile" } */ +/* { dg-options "-O2 -fno-devirtualize --param=profile-func-internal-id=0 -fdump-ipa-profile-optimized -fdump-ipa-afdo -Wno-attributes -Wno-coverage-mismatch -Wno-missing-profile" } */ #include "reorder_class1.h" #include "reorder_class2.h" diff --git a/gcc/testsuite/g++.dg/tree-prof/reorder.C b/gcc/testsuite/g++.dg/tree-prof/reorder.C index 6b3bad1f54d..000fb651a69 100644 --- a/gcc/testsuite/g++.dg/tree-prof/reorder.C +++ b/gcc/testsuite/g++.dg/tree-prof/reorder.C @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -fno-devirtualize --param=profile-func-internal-id=0 -fdump-ipa-profile -fdump-ipa-afdo -Wno-coverage-mismatch -Wno-attributes" } */ +/* { dg-options "-O2 -fno-devirtualize --param=profile-func-internal-id=0 -fdump-ipa-profile-optimized -fdump-ipa-afdo -Wno-coverage-mismatch -Wno-attributes" } */ #ifdef _PROFILE_USE #include "reorder_class1.h" diff --git a/gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1.c b/gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1.c index 3979b17b156..126236eba8e 100644 --- a/gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1.c +++ b/gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -fdump-ipa-profile" } */ +/* { dg-options "-O2 -fdump-ipa-profile-optimized" } */ /* { dg-additional-sources "ic-misattribution-1a.c" } */ extern void other_caller (void); diff --git a/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c b/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c index 53063c3e7fa..3ca78936e1c 100644 --- a/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c +++ b/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile -fdump-ipa-afdo" } */ +/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized -fdump-ipa-afdo" } */ static int a1 (void) { diff --git a/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c b/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c index d75b2548dbc..51e1080b9f4 100644 --- a/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c +++ b/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile" } */ +/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized" } */ int a[1000]; int b[1000]; int size=1; diff --git a/gcc/testsuite/gcc.dg/tree-prof/stringop-2.c b/gcc/testsuite/gcc.dg/tree-prof/stringop-2.c index c1f757388fd..0264bb37c9c 100644 --- a/gcc/testsuite/gcc.dg/tree-prof/stringop-2.c +++ b/gcc/testsuite/gcc.dg/tree-prof/stringop-2.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile" } */ +/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized" } */ int a[1000]; int b[1000]; int size=1; diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c b/gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c index 492c4c1c4b2..8495c4caf89 100644 --- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c +++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile" } */ +/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized" } */ int a[1000]; int b = 256; int c = 257; diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c b/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c index b3bbadfeb40..4f758af71ca 100644 --- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c +++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile" } */ +/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized" } */ unsigned int a[1000]; unsigned int b = 256; unsigned int c = 1024; diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c b/gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c index 60953d09b15..5897d750d80 100644 --- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c +++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile" } */ +/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized" } */ unsigned int a[1000]; unsigned int b = 257; unsigned int c = 1023; diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c b/gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c index 50ae2de792a..b13601ede69 100644 --- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c +++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile" } */ +/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized" } */ unsigned int a[1000]; unsigned int b = 999; unsigned int c = 1002; diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c b/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c index 80eb3205a4f..982bcb13435 100644 --- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c +++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile" } */ +/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized" } */ int a[1000]; int b=997; int diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c b/gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c index 18b2b2590ac..5ddb1a88c29 100644 --- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c +++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -fdump-ipa-profile -mtune=core2" } */ +/* { dg-options "-O2 -fdump-ipa-profile-optimized -mtune=core2" } */ /* { dg-skip-if "" { ! { i?86-*-* x86_64-*-* } } } */ char *buffer1; diff --git a/gcc/value-prof.c b/gcc/value-prof.c index 759458868a8..9d9785b179d 100644 --- a/gcc/value-prof.c +++ b/gcc/value-prof.c @@ -809,12 +809,9 @@ gimple_divmod_fixed_value_transform (gimple_stmt_iterator *si) } result = gimple_divmod_fixed_value (stmt, tree_val, prob, count, all); - if (dump_file) - { - fprintf (dump_file, "Transformation done: div/mod by constant "); - print_generic_expr (dump_file, tree_val, TDF_SLIM); - fprintf (dump_file, "\n"); - } + if (dump_enabled_p ()) + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt, + "Transformation done: div/mod by constant %T\n", tree_val); gimple_assign_set_rhs_from_tree (si, result); update_stmt (gsi_stmt (*si)); @@ -949,8 +946,9 @@ gimple_mod_pow2_value_transform (gimple_stmt_iterator *si) if (check_counter (stmt, "pow2", &count, &all, gimple_bb (stmt)->count)) return false; - if (dump_file) - fprintf (dump_file, "Transformation done: mod power of 2\n"); + if (dump_enabled_p ()) + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt, + "Transformation done: mod power of 2\n"); if (all > 0) prob = profile_probability::probability_in_gcov_type (count, all); @@ -1133,8 +1131,9 @@ gimple_mod_subtract_transform (gimple_stmt_iterator *si) return false; gimple_remove_histogram_value (cfun, stmt, histogram); - if (dump_file) - fprintf (dump_file, "Transformation done: mod subtract\n"); + if (dump_enabled_p ()) + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt, + "Transformation done: mod subtract\n"); /* Compute probability of taking the optimal path(s). */ if (all > 0) @@ -1185,37 +1184,40 @@ init_node_map (bool local) if (n->has_gimple_body_p () || n->thunk.thunk_p) { cgraph_node **val; + dump_user_location_t loc + = dump_user_location_t::from_function_decl (n->decl); if (local) { n->profile_id = coverage_compute_profile_id (n); while ((val = cgraph_node_map->get (n->profile_id)) || !n->profile_id) { - if (dump_file) - fprintf (dump_file, "Local profile-id %i conflict" - " with nodes %s %s\n", - n->profile_id, - n->dump_name (), - (*val)->dump_name ()); + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc, + "Local profile-id %i conflict" + " with nodes %s %s\n", + n->profile_id, + n->dump_name (), + (*val)->dump_name ()); n->profile_id = (n->profile_id + 1) & 0x7fffffff; } } else if (!n->profile_id) { - if (dump_file) - fprintf (dump_file, - "Node %s has no profile-id" - " (profile feedback missing?)\n", - n->dump_name ()); + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc, + "Node %s has no profile-id" + " (profile feedback missing?)\n", + n->dump_name ()); continue; } else if ((val = cgraph_node_map->get (n->profile_id))) { - if (dump_file) - fprintf (dump_file, - "Node %s has IP profile-id %i conflict. " - "Giving up.\n", - n->dump_name (), n->profile_id); + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc, + "Node %s has IP profile-id %i conflict. " + "Giving up.\n", + n->dump_name (), n->profile_id); *val = NULL; continue; } @@ -1445,41 +1447,36 @@ gimple_ic_transform (gimple_stmt_iterator *gsi) { if (val) { - if (dump_file) - { - fprintf (dump_file, "Indirect call -> direct call from other module"); - print_generic_expr (dump_file, gimple_call_fn (stmt), TDF_SLIM); - fprintf (dump_file, "=> %i (will resolve only with LTO)\n", (int)val); - } + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, stmt, + "Indirect call -> direct call from other " + "module %T=> %i (will resolve only with LTO)", + gimple_call_fn (stmt), (int)val); } return false; } if (!check_ic_target (stmt, direct_call)) { - if (dump_file) - { - fprintf (dump_file, "Indirect call -> direct call "); - print_generic_expr (dump_file, gimple_call_fn (stmt), TDF_SLIM); - fprintf (dump_file, "=> "); - print_generic_expr (dump_file, direct_call->decl, TDF_SLIM); - fprintf (dump_file, " transformation skipped because of type mismatch"); - print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); - } + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, stmt, + "Indirect call -> direct call %T => %T " + "transformation skipped because of type mismatch: %G", + gimple_call_fn (stmt), direct_call->decl, stmt); gimple_remove_histogram_value (cfun, stmt, histogram); return false; } - if (dump_file) + if (dump_enabled_p ()) { - fprintf (dump_file, "Indirect call -> direct call "); - print_generic_expr (dump_file, gimple_call_fn (stmt), TDF_SLIM); - fprintf (dump_file, "=> "); - print_generic_expr (dump_file, direct_call->decl, TDF_SLIM); - fprintf (dump_file, " transformation on insn postponned to ipa-profile"); - print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); - fprintf (dump_file, "hist->count %" PRId64 - " hist->all %" PRId64"\n", count, all); + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt, + "Indirect call -> direct call " + "%T => %T transformation on insn postponed " + "to ipa-profile: %G", gimple_call_fn (stmt), + direct_call->decl, stmt); + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt, + "hist->count %" PRId64 + " hist->all %" PRId64"\n", count, all); } return true; @@ -1708,10 +1705,10 @@ gimple_stringops_transform (gimple_stmt_iterator *gsi) TYPE_PRECISION (get_gcov_type ()), false)); } - if (dump_file) - fprintf (dump_file, - "Transformation done: single value %i stringop for %s\n", - (int)val, built_in_names[(int)fcode]); + if (dump_enabled_p ()) + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt, + "Transformation done: single value %i stringop for %s\n", + (int)val, built_in_names[(int)fcode]); gimple_stringop_fixed_value (stmt, tree_val, prob, count, all);