From patchwork Thu Dec 8 17:26:29 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Martin_Li=C5=A1ka?= X-Patchwork-Id: 87299 Delivered-To: patch@linaro.org Received: by 10.140.20.101 with SMTP id 92csp960017qgi; Thu, 8 Dec 2016 09:27:03 -0800 (PST) X-Received: by 10.99.185.1 with SMTP id z1mr49106844pge.179.1481218023817; Thu, 08 Dec 2016 09:27:03 -0800 (PST) Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id 129si29653530pgi.256.2016.12.08.09.27.03 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 08 Dec 2016 09:27:03 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-return-443805-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org; spf=pass (google.com: domain of gcc-patches-return-443805-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-443805-patch=linaro.org@gcc.gnu.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:to:references:from:message-id:date:mime-version :in-reply-to:content-type; q=dns; s=default; b=DT6fJTk8kO0W0rdfD Axyx/8PEY3NW8hAdtOkxS/EkAQDdd49gHGfIde7+AHuY0ZijvMFEfEd4N9o6r+5K dxWixlA9lJj4B9td7dzEvLmfN3IgxrXQTiniuLkFUu1tkCybafAfKvlFZTKG6cYs jC8G0hJFw8745UiUpK31NWqU8U= 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 :subject:to:references:from:message-id:date:mime-version :in-reply-to:content-type; s=default; bh=l3oDw4tsU3mT5acWOQBMSZi c8mY=; b=vI1pU5jV+a71ZcXH6quNF0H19668sTFyveY+b3r1+e6FjyGPJfZPwGM QBfrnLAK2l7V0PppDVibAQMHwes4Q9KQYVWot5QzYuOaJ+/cugIEAStTIZHwqnR3 gXfvcTpCJP2uloiUrTujP/ZXkLyytMXOvtTt99EAQKzooQWFu/gw= Received: (qmail 61300 invoked by alias); 8 Dec 2016 17:26:45 -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 59814 invoked by uid 89); 8 Dec 2016 17:26:44 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00, SPF_PASS autolearn=ham version=3.3.2 spammy=H*MI:sk:52e7817, H*i:sk:52e7817, H*f:sk:52e7817, scanned X-HELO: mx2.suse.de Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 08 Dec 2016 17:26:34 +0000 Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 70CADAB03; Thu, 8 Dec 2016 17:26:31 +0000 (UTC) Subject: Re: [PATCH] Print 2 digits after decimal delimiter for BB frequencies To: Martin Sebor , GCC Patches References: <52e78179-a0e8-9e25-2686-7cdf25c7d4b7@gmail.com> From: =?UTF-8?Q?Martin_Li=c5=a1ka?= Message-ID: <0ca80770-780b-cd7b-fa7f-e7f65ec9a7e1@suse.cz> Date: Thu, 8 Dec 2016 18:26:29 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <52e78179-a0e8-9e25-2686-7cdf25c7d4b7@gmail.com> X-IsSubscribed: yes On 12/08/2016 05:39 PM, Martin Sebor wrote: > On 12/08/2016 05:55 AM, Martin Liška wrote: >> With the patch applied, one can distinguish between PROB_VERY_UNLIKELY and >> real zero probability: > > I tried to see if formatting the expression > > e->probability * 100.0 / REG_BR_PROB_BASE > > with "%.2f" is guaranteed to output non-zero when e->probability > is non-zero. If I got the values right then the smallest non-zero > e->probability can be as low as 1, and REG_BR_PROB_BASE is 10000. > That evaluates to 0.0099999999999999985 which Glibc formats as > 0.01 because (AFAIK) its printf rounds to nearest. Thank you for playing with that. > > If this is guaranteed then I think it's fine. Otherwise, if there > is a chance that the printed result could be 0.00% for a non-zero > probability it might be worth to detect it and make sure it's at > least 0.01% to avoid the same confusion I had with the 0.00%. Yep, I like that assumption. > > FWIW, if GCC uses integers rather than floats internally to make > decisions (I don't know) then also printing integers would give > the most accurate results. E.g., something like > printf ("%2u.%u%%", e->probability / 100, e->probability % 100) That's bit tricky as you need "%2u.%02u%%", where '02u' depends on result of REG_BR_PROB_BASE / 100. We plan with Honza to utilize probably sreal type instead of the scaled integers. So that I prepared a new patch (not tested yet). Ideas? Thanks, Martin > > Thanks > Martin > >> >> f () >> { >> int _1; >> >> [100.00%]: >> _1 = __builtin_sprintf (&d2, "%i", 12); >> if (_1 != 2) >> goto ; [0.04%] >> else >> goto ; [99.96%] >> >> [0.04%]: >> __builtin_abort (); >> >> [99.96%]: >> return; >> >> } >> >> Patch can bootstrap on ppc64le-redhat-linux and survives regression tests. >> >> Ready to be installed? >> Martin >> > >From afbc46f8ebcdf00d320a066b692537399cd189c0 Mon Sep 17 00:00:00 2001 From: marxin Date: Thu, 1 Dec 2016 10:55:55 +0100 Subject: [PATCH] Print 2 digits after decimal delimiter for BB frequencies gcc/ChangeLog: 2016-12-01 Martin Liska * gimple-pretty-print.c (dump_probability): New function. (dump_edge_probability): Use the function. (dump_gimple_label): Likewise. (dump_gimple_bb_header): Likewise. gcc/testsuite/ChangeLog: 2016-12-02 Martin Liska * gcc.dg/tree-ssa/20040703-1.c: Update scanned pattern. * gcc.dg/tree-ssa/dump-2.c: Likewise. --- gcc/gimple-pretty-print.c | 30 ++++++++++++++++++++++++------ gcc/testsuite/gcc.dg/tree-ssa/20040703-1.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/dump-2.c | 2 +- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/gcc/gimple-pretty-print.c b/gcc/gimple-pretty-print.c index b5e866d..27a22c4 100644 --- a/gcc/gimple-pretty-print.c +++ b/gcc/gimple-pretty-print.c @@ -72,13 +72,32 @@ debug_gimple_stmt (gimple *gs) print_gimple_stmt (stderr, gs, 0, TDF_VOPS|TDF_MEMSYMS); } + +/* Return formatted string of a VALUE probability + (biased by REG_BR_PROB_BASE). Returned string is allocated + by xstrdup_for_dump. */ + +static const char * +dump_probability (int value) +{ + char buf[16]; + float minimum = 0.01f; + + gcc_assert (0 <= value && value <= REG_BR_PROB_BASE); + float fvalue = value * 100.0f / REG_BR_PROB_BASE; + if (fvalue < minimum && value > 0) + return "[0.01%]"; + + sprintf (buf, "[%.2f%%]", fvalue); + return xstrdup_for_dump (buf); +} + /* Dump E probability to BUFFER. */ static void dump_edge_probability (pretty_printer *buffer, edge e) { - pp_scalar (buffer, " [%.1f%%]", - e->probability * 100.0 / REG_BR_PROB_BASE); + pp_scalar (buffer, " %s", dump_probability (e->probability)); } /* Print GIMPLE statement G to FILE using SPC indentation spaces and @@ -1023,8 +1042,7 @@ dump_gimple_label (pretty_printer *buffer, glabel *gs, int spc, int flags) dump_generic_node (buffer, label, spc, flags, false); basic_block bb = gimple_bb (gs); if (bb && !(flags & TDF_GIMPLE)) - pp_scalar (buffer, " [%.1f%%]", - bb->frequency * 100.0 / REG_BR_PROB_BASE); + pp_scalar (buffer, " %s", dump_probability (bb->frequency)); pp_colon (buffer); } if (flags & TDF_GIMPLE) @@ -2590,8 +2608,8 @@ dump_gimple_bb_header (FILE *outf, basic_block bb, int indent, int flags) if (flags & TDF_GIMPLE) fprintf (outf, "%*sbb_%d:\n", indent, "", bb->index); else - fprintf (outf, "%*s [%.1f%%]:\n", indent, "", bb->index, - bb->frequency * 100.0 / REG_BR_PROB_BASE); + fprintf (outf, "%*s %s:\n", + indent, "", bb->index, dump_probability (bb->frequency)); } } } diff --git a/gcc/testsuite/gcc.dg/tree-ssa/20040703-1.c b/gcc/testsuite/gcc.dg/tree-ssa/20040703-1.c index 2980047..eb9fb56 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/20040703-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/20040703-1.c @@ -9,4 +9,4 @@ float foo(float x) } /* We should *not* fold the arithmetic. */ -/* { dg-final { scan-tree-dump-times "0\\.0\[^%\]" 0 "dom2"} } */ +/* { dg-final { scan-tree-dump-times "0\\.0\[^%0\]" 0 "dom2"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/dump-2.c b/gcc/testsuite/gcc.dg/tree-ssa/dump-2.c index 11cde92..8a63af4 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/dump-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/dump-2.c @@ -6,4 +6,4 @@ int f(void) return 0; } -/* { dg-final { scan-tree-dump " \\\[100\\\.0%\\\]:" "optimized" } } */ +/* { dg-final { scan-tree-dump " \\\[100\\\.00%\\\]:" "optimized" } } */ -- 2.10.2