This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix PR77937
- From: Bill Schmidt <wschmidt at linux dot vnet dot ibm dot com>
- To: Richard Biener <richard dot guenther at gmail dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Fri, 14 Oct 2016 08:51:18 -0500
- Subject: Re: [PATCH] Fix PR77937
- Authentication-results: sourceware.org; auth=none
- References: <1476373127.5711.3.camel@oc8801110288.ibm.com> <CAFiYyc3sFgi9=39UZQz5Y6PJEwF8sNrL+OdoLzuVYQc2qyH6sg@mail.gmail.com>
Hi Richard,
> On Oct 14, 2016, at 4:19 AM, Richard Biener <richard.guenther@gmail.com> wrote:
>
> On Thu, Oct 13, 2016 at 5:38 PM, Bill Schmidt
> <wschmidt@linux.vnet.ibm.com> wrote:
>> The previous patch for
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77937 is necessary, but not
>> sufficient in all cases. It allows -1 to be used with a pointer
>> increment, which we really do not want given that this is generally not
>> profitable. Disable this case for now. We can add logic later to
>> estimate the cost for the rare case where it can be useful.
>>
>> Bootstrapped and tested on powerpc64le-unknown-linux-gnu with no
>> regressions, committed.
>
> Huh, I wonder what is special about -1 here. Do we handle -2?
We do, subject to a little more stringent cost modeling later on, because it
requires introducing a multiply by the increment. We have some special
case code for -1 that introduces a MINUS_EXPR, but that breaks for
pointer arithmetic.
I am working on a better fix for this as part of the work for PR77916, which
exposes a related problem elsewhere in the code. The current fix is a
stopgap until I can get that work completed. For -1 we prefer a negate
over a multiply when we have pointer types and can't use minus, and need
to properly model that in the cost calculation.
Bill
>
> Richard.
>
>> Thanks,
>> Bill
>>
>>
>> 2016-10-13 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
>>
>> PR tree-optimization/77937
>> * gimple-ssa-strength-reduction.c (analyze_increments): Set cost
>> to infinite when we have a pointer with an increment of -1.
>>
>>
>> Index: gcc/gimple-ssa-strength-reduction.c
>> ===================================================================
>> --- gcc/gimple-ssa-strength-reduction.c (revision 241120)
>> +++ gcc/gimple-ssa-strength-reduction.c (working copy)
>> @@ -2818,6 +2818,11 @@ analyze_increments (slsr_cand_t first_dep, machine
>> || (incr == -1
>> && !POINTER_TYPE_P (first_dep->cand_type)))
>> incr_vec[i].cost = COST_NEUTRAL;
>> +
>> + /* FIXME: We don't handle pointers with a -1 increment yet.
>> + They are usually unprofitable anyway. */
>> + else if (incr == -1 && POINTER_TYPE_P (first_dep->cand_type))
>> + incr_vec[i].cost = COST_INFINITE;
>>
>> /* FORNOW: If we need to add an initializer, give up if a cast from
>> the candidate's type to its stride's type can lose precision.
>>
>>
>