This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Add missing edge probability in simd_clone_adjust
- From: Tom de Vries <Tom_deVries at mentor dot com>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 2 Aug 2017 18:15:31 +0200
- Subject: [PATCH] Add missing edge probability in simd_clone_adjust
- Authentication-results: sourceware.org; auth=none
- References: <61e0af9b-205c-644a-b1ee-42e035d61cc1@mentor.com>
[ Re: [PATCH] Verify edge probability consistency in verify_flow_info ]
On 08/02/2017 06:07 PM, Tom de Vries wrote:
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.
Jakub,
this patch adds a missing edge probability in simd_clone_adjust.
OK for trunk if bootstrap and reg-test on x86_64 succeeds?
Thanks,
- Tom
Add missing edge probability in simd_clone_adjust
Currently we generate an if with probability set on only one of the two edges:
<bb 5> [0.00%] [count: INV]:
_5 = mask.3[iter.6_3];
if (_5 == 0)
goto <bb 6>; [INV] [count: INV]
else
goto <bb 2>; [100.00%] [count: INV]
Add the missing edge probability:
goto <bb 6>; [0.00%] [count: INV]
2017-08-02 Tom de Vries <tom@codesourcery.com>
* omp-simd-clone.c (simd_clone_adjust): Add missing edge probability.
---
gcc/omp-simd-clone.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
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;
}