diff options
author | Richard Biener <rguenther@suse.de> | 2014-04-14 08:11:08 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-04-14 08:11:08 +0000 |
commit | a3c77ce941aeee074370680b38de3704d59983c6 (patch) | |
tree | a7ec7184c5a24df3b6de3634e77670edfa9eb0ba /gcc | |
parent | 033aa406ca81760098f7a8b9a193d6fd2391ace6 (diff) | |
download | gcc-a3c77ce941aeee074370680b38de3704d59983c6.zip gcc-a3c77ce941aeee074370680b38de3704d59983c6.tar.gz gcc-a3c77ce941aeee074370680b38de3704d59983c6.tar.bz2 |
re PR tree-optimization/55022 (air.f90 is miscompliled with -m64 -O2 -fgraphite-identity after revision 190619)
2014-04-14 Richard Biener <rguenther@suse.de>
PR middle-end/55022
* fold-const.c (negate_expr_p): Don't negate directional rounding
division.
(fold_negate_expr): Likewise.
* gcc.dg/graphite/pr55022.c: New testcase.
From-SVN: r209356
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fold-const.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/graphite/pr55022.c | 27 |
4 files changed, 39 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a80c21f..3991750 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2014-04-14 Richard Biener <rguenther@suse.de> + PR middle-end/55022 + * fold-const.c (negate_expr_p): Don't negate directional rounding + division. + (fold_negate_expr): Likewise. + +2014-04-14 Richard Biener <rguenther@suse.de> + PR tree-optimization/59817 PR tree-optimization/60453 * graphite-scop-detection.c (graphite_can_represent_scev): Complete diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 891c0d5..5c2bf25 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -484,8 +484,6 @@ negate_expr_p (tree t) case TRUNC_DIV_EXPR: case ROUND_DIV_EXPR: - case FLOOR_DIV_EXPR: - case CEIL_DIV_EXPR: case EXACT_DIV_EXPR: /* In general we can't negate A / B, because if A is INT_MIN and B is 1, we may turn this into INT_MIN / -1 which is undefined @@ -682,8 +680,6 @@ fold_negate_expr (location_t loc, tree t) case TRUNC_DIV_EXPR: case ROUND_DIV_EXPR: - case FLOOR_DIV_EXPR: - case CEIL_DIV_EXPR: case EXACT_DIV_EXPR: /* In general we can't negate A / B, because if A is INT_MIN and B is 1, we may turn this into INT_MIN / -1 which is undefined diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e09c499..6992ad6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2014-04-14 Richard Biener <rguenther@suse.de> + PR middle-end/55022 + * gcc.dg/graphite/pr55022.c: New testcase. + +2014-04-14 Richard Biener <rguenther@suse.de> + PR tree-optimization/59817 PR tree-optimization/60453 * gfortran.dg/graphite/pr59817.f: New testcase. diff --git a/gcc/testsuite/gcc.dg/graphite/pr55022.c b/gcc/testsuite/gcc.dg/graphite/pr55022.c new file mode 100644 index 0000000..c631c0e --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/pr55022.c @@ -0,0 +1,27 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -fgraphite-identity" } */ + +extern void abort (void); + +void __attribute__((noinline,noclone)) +f(int *limit, int minLen, int maxLen) +{ + int i; + + for (i = minLen; i <= maxLen; i++) { + limit[i] = i; + } +} + +int main() +{ + int limit[256], i; + f (limit, 0, 255); + for (i = 0; i < 256; ++i) + { + if (limit[i] != i) + abort (); + __asm__ volatile ("" : : : "memory"); + } + return 0; +} |