This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH PR62631]Return shiftadd cost only when it's smaller than normal one
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Bin Cheng <bin dot cheng at arm dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>, Rainer Orth <ro at cebitec dot uni-bielefeld dot de>
- Date: Thu, 4 Sep 2014 15:16:54 +0200
- Subject: Re: [PATCH PR62631]Return shiftadd cost only when it's smaller than normal one
- Authentication-results: sourceware.org; auth=none
- References: <000c01cfc81e$87780e80$96682b80$ at arm dot com>
On Thu, Sep 4, 2014 at 10:59 AM, Bin Cheng <bin.cheng@arm.com> wrote:
> Hi,
> As reported by pr62631, case ivopts-lt-2.c is failed on sparc64. The root
> cause is shiftadd_cost calculated on sparc64 is huge which prevents gcc from
> choosing the wanted candidate. The problem with IVOPT is it always assumes
> that shiftadd_cost is smaller than the normal cost, while it's not true in
> this extreme case. This patch checks if the shiftadd_cost is smaller before
> returning it. The patch also cleans code indent in context.
>
> One question is left here.
> Why >100 cost is calculated for shiftadd on sparc64? In final assembly
> code, the computation is implemented by separated shift and add
> instructions. Probably sparc64 should return cost no larger than
> cost(shift)+cost(add) in the first place?.
>
> Bootstrap and tested on x86_64/cortex-m3, the case is fixed on sparc64 now.
> Is it OK?
So is the IVOPTs code just checking if the target returned
sth > cost(shift) + cost(add)? Then I think we should fix the target
instead.
Richard.
> Thanks,
> bin
>
>
> 2014-09-04 Bin Cheng <bin.cheng@arm.com>
>
> * tree-ssa-loop-ivopts.c (force_expr_to_var_cost): Return cost
> calculated by get_shiftadd_cost only when it is smaller. Fix
> code indent.