This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Verify edge probability consistency in verify_flow_info
- From: Jeff Law <law at redhat dot com>
- To: Tom de Vries <Tom_deVries at mentor dot com>, Jan Hubicka <hubicka at ucw dot cz>, Richard Biener <rguenther at suse dot de>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 3 Aug 2017 11:01:46 -0600
- Subject: Re: [PATCH] Verify edge probability consistency in verify_flow_info
- Authentication-results: sourceware.org; auth=none
- Authentication-results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com
- Authentication-results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=law at redhat dot com
- Dmarc-filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5D8CF15565
- References: <61e0af9b-205c-644a-b1ee-42e035d61cc1@mentor.com>
On 08/02/2017 10:07 AM, Tom de Vries wrote:
> Hi,
>
> I.
>
> for target nvptx we recently ran into PR81442, an ICE in verify_flow_info:
> ...
> error: verify_flow_info: REG_BR_PROB is set but cfg probability is not
> ...
>
> We start out with a jump instruction:
> ...
> (jump_insn 18 17 31 2 (set (pc)
> (if_then_else (ne (reg:BI 83)
> (const_int 0 [0]))
> (label_ref 31)
> (pc))) "reduction-5.c":52 104 {br_true}
> (expr_list:REG_DEAD (reg:BI 83)
> (int_list:REG_BR_PROB 10000 (nil)))
> -> 31)
> ...
>
> The probability is set on the branch edge, but not on the fallthru edge.
>
> After fixup_reorder_chain, the condition is reversed, and the
> probability reg-note update accordingly:
> ...
> (jump_insn 18 17 32 2 (set (pc)
> (if_then_else (eq (reg:BI 83)
> (const_int 0 [0]))
> (label_ref:DI 33)
> (pc))) "reduction-5.c":52 105 {br_false}
> (expr_list:REG_DEAD (reg:BI 83)
> (int_list:REG_BR_PROB 0 (nil)))
> -> 33)
> ...
>
> The branch and fallthru edge are also reversed, which means now the
> probability is set on the fallthru edge, and not on the branch edge.
>
> This is the immediate cause for the verify_flow_info error.
>
>
> II.
>
> We've fixed the ICE in the target by setting the probability on the
> fallthru edge when we introduce it (r250422).
>
> We've noted other places where we were forgetting to set the probability
> (fixed in r250823), but that did not trigger the ICE.
>
>
> III.
>
> I've written this patch to check for the missing probability more
> consistently. I'm not certain if we can require that the probability
> should always be set, so I'm just requiring that if it is set on one
> outgoing edge, it needs to be set on all outgoing edges.
>
> Sofar I've build a c-only x86_64 non-bootstrap compiler and ran dg.exp.
> The only problem I ran into was in attr-simd{,-2,-4}.c. I've written a
> tentative patch for that, and will submit it as follow-up.
>
> Is this check a good idea?
I think the additional checking is a good idea. Ideally we'd verify
that all edges have a probability. Until then I think you need some
kind of rationale in a comment for why the checking is limited.
>
> OK for trunk if bootstrap and reg-test on x86_64 succeeds?
Yea, but I'd like to see ongoing work towards full checking.
Jeff