This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH 2/3][POPCOUNT] Check if zero check is done before entering the loop
- From: Kugan Vivekanandarajah <kugan dot vivekanandarajah at linaro dot org>
- To: Richard Biener <richard dot guenther at gmail dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 27 Jun 2018 15:01:13 +1000
- Subject: Re: [PATCH 2/3][POPCOUNT] Check if zero check is done before entering the loop
- References: <CAELXzTNzN5nWz_ng548x13DEfXDCouD5gb7CW16c=G51CuruMg@mail.gmail.com> <CAFiYyc3jY5BFzR4WuQfJ-uWeOGHkfg02tSt1FgbrmNOVJ=MY_A@mail.gmail.com>
Hi Richard,
Thanks for the review.
On 25 June 2018 at 20:02, Richard Biener <richard.guenther@gmail.com> wrote:
> On Fri, Jun 22, 2018 at 11:14 AM Kugan Vivekanandarajah
> <kugan.vivekanandarajah@linaro.org> wrote:
>>
>> gcc/ChangeLog:
>
> The canonical way is calling simplify_using_initial_conditions on the
> may_be_zero condition.
>
> Richard.
>
>> 2018-06-22 Kugan Vivekanandarajah <kuganv@linaro.org>
>>
>> * tree-ssa-loop-niter.c (number_of_iterations_popcount): If popcount
>> argument is checked for zero before entering loop, avoid checking again.
Do you like the attached patch which does this.
Thanks,
Kugan
From 78cb0ea3d058f1d1db73f259825b8bb07eb1ca30 Mon Sep 17 00:00:00 2001
From: Kugan Vivekanandarajah <kugan.vivekanandarajah@linaro.org>
Date: Fri, 22 Jun 2018 14:11:28 +1000
Subject: [PATCH 2/3] in niter dont check for zero when it is alrealy checked
Change-Id: Ie94a35a1a3c2d8bdffd3dc54a94684c032efc7e0
---
gcc/tree-ssa-loop-niter.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index f5ffc0f..be0cff5 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -2596,10 +2596,15 @@ number_of_iterations_popcount (loop_p loop, edge exit,
niter->niter = iter;
niter->assumptions = boolean_true_node;
+
if (adjust)
- niter->may_be_zero = fold_build2 (EQ_EXPR, boolean_type_node, src,
+ {
+ tree may_be_zero = fold_build2 (EQ_EXPR, boolean_type_node, src,
build_zero_cst
(TREE_TYPE (src)));
+ niter->may_be_zero =
+ simplify_using_initial_conditions (loop, may_be_zero);
+ }
else
niter->may_be_zero = boolean_false_node;
--
2.7.4