This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Add missing edge probability in simd_clone_adjust
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Tom de Vries <Tom_deVries at mentor dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 2 Aug 2017 18:29:36 +0200
- Subject: Re: [PATCH] Add missing edge probability in simd_clone_adjust
- Authentication-results: sourceware.org; auth=none
- Authentication-results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com
- Authentication-results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=jakub at redhat dot com
- Dmarc-filter: OpenDMARC Filter v1.3.2 mx1.redhat.com E927EC04B32E
- References: <61e0af9b-205c-644a-b1ee-42e035d61cc1@mentor.com> <4639e236-9c4a-ef5c-ade5-b955011e772b@mentor.com>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Wed, Aug 02, 2017 at 06:15:31PM +0200, Tom de Vries wrote:
> 2017-08-02 Tom de Vries <tom@codesourcery.com>
>
> * omp-simd-clone.c (simd_clone_adjust): Add missing edge probability.
I think that is not the right probability, when using masked simd, the point
is that it is called from conditional code where usually not all the bits in
the mask are set. So I think it is better to use say likely () probability
for the EDGE_FALSE_VALUE edge (that mask != 0) and unlikely () probability
for the EDGE_TRUE_VALUE edge.
Hopefully that conditional goes away later when vectorized, but if it
doesn't, we shouldn't say it is that unlikely it will be masked off.
> diff --git a/gcc/omp-simd-clone.c b/gcc/omp-simd-clone.c
> index a1a563e..5b5d199 100644
> --- a/gcc/omp-simd-clone.c
> +++ b/gcc/omp-simd-clone.c
> @@ -1240,7 +1240,8 @@ simd_clone_adjust (struct cgraph_node *node)
> g = gimple_build_cond (EQ_EXPR, mask, build_zero_cst (TREE_TYPE (mask)),
> NULL, NULL);
> gsi_insert_after (&gsi, g, GSI_CONTINUE_LINKING);
> - make_edge (loop->header, incr_bb, EDGE_TRUE_VALUE);
> + edge e = make_edge (loop->header, incr_bb, EDGE_TRUE_VALUE);
> + e->probability = profile_probability::guessed_never ();
> FALLTHRU_EDGE (loop->header)->flags = EDGE_FALSE_VALUE;
> }
>
Jakub