From 8be5dcae3e7191676b4092acbcc40d178936bbbe Mon Sep 17 00:00:00 2001 From: Bill Schmidt Date: Mon, 17 Oct 2016 14:24:21 +0000 Subject: [PATCH] backport: re PR tree-optimization/77937 (ICE: in replace_one_candidate, at gimple-ssa-strength-reduction.c:3370) [gcc] 2016-10-17 Bill Schmidt Backport from mainline 2016-10-12 Bill Schmidt PR tree-optimization/77937 * gimple-ssa-strength-reduction.c (analyze_increments): Use POINTER_TYPE_P on the candidate type to determine whether candidates in this chain require pointer arithmetic. 2016-10-13 Bill Schmidt 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. [gcc/testsuite] 2016-10-17 Bill Schmidt Backport from mainline 2016-10-13 Bill Schmidt PR tree-optimization/77937 * gcc.dg/torture/pr77937-1.c: New. * gcc.dg/torture/pr77937-2.c: New. From-SVN: r241244 --- gcc/ChangeLog | 16 ++++++++++++++++ gcc/gimple-ssa-strength-reduction.c | 8 ++++++-- gcc/testsuite/ChangeLog | 9 +++++++++ gcc/testsuite/gcc.dg/torture/pr77937-1.c | 15 +++++++++++++++ gcc/testsuite/gcc.dg/torture/pr77937-2.c | 18 ++++++++++++++++++ 5 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr77937-1.c create mode 100644 gcc/testsuite/gcc.dg/torture/pr77937-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fd9138d1c6e8..bf813f27e8f8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2016-10-17 Bill Schmidt + + Backport from mainline + 2016-10-12 Bill Schmidt + + PR tree-optimization/77937 + * gimple-ssa-strength-reduction.c (analyze_increments): Use + POINTER_TYPE_P on the candidate type to determine whether + candidates in this chain require pointer arithmetic. + + 2016-10-13 Bill Schmidt + + 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. + 2016-10-17 Martin Liska Backported from mainline diff --git a/gcc/gimple-ssa-strength-reduction.c b/gcc/gimple-ssa-strength-reduction.c index fef5905033aa..cc56a6e86e7d 100644 --- a/gcc/gimple-ssa-strength-reduction.c +++ b/gcc/gimple-ssa-strength-reduction.c @@ -2854,9 +2854,13 @@ analyze_increments (slsr_cand_t first_dep, machine_mode mode, bool speed) else if (incr == 0 || incr == 1 || (incr == -1 - && (gimple_assign_rhs_code (first_dep->cand_stmt) - != POINTER_PLUS_EXPR))) + && !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. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f4f957203edf..1cdacfeef67a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2016-10-17 Bill Schmidt + + Backport from mainline + 2016-10-13 Bill Schmidt + + PR tree-optimization/77937 + * gcc.dg/torture/pr77937-1.c: New. + * gcc.dg/torture/pr77937-2.c: New. + 2016-10-17 Martin Liska Backported from mainline diff --git a/gcc/testsuite/gcc.dg/torture/pr77937-1.c b/gcc/testsuite/gcc.dg/torture/pr77937-1.c new file mode 100644 index 000000000000..8661d24ec28c --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr77937-1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +/* { dg-additional-options "-march=amdfam10" { target i?86-*-* x86_64-*-* } } */ + +int *a; +int b, c, d; +void fn1(char *p1, int p2) { + int x; + while (1) { + x = 0; + for (; x < 8; x++) + p1[0] = -a[0] * d + p1[0] * c + 1 >> b >> 1; + p1 += p2; + } +} diff --git a/gcc/testsuite/gcc.dg/torture/pr77937-2.c b/gcc/testsuite/gcc.dg/torture/pr77937-2.c new file mode 100644 index 000000000000..37b4fd671eba --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr77937-2.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +/* { dg-additional-options "-march=amdfam10" { target i?86-*-* x86_64-*-* } } */ + +extern int fn2(int); +extern int fn3(int); +int a, b, c; +void fn1(long p1) { + char *d; + for (;; d += p1) { + d[0] = fn2(1 >> a); + fn3(0); + fn3(c >> a); + d[1] = fn3(d[1] * b + c >> a); + d[4] = fn3(d[4] * b + c >> a); + d[5] = fn3(d[5] * b + c >> a); + } +} -- 2.47.2