diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr83580.c | 16 | ||||
-rw-r--r-- | gcc/tree-data-ref.c | 8 |
4 files changed, 29 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5de2348..1d7796a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2018-01-08 Richard Biener <rguenther@suse.de> + PR middle-end/83580 + * tree-data-ref.c (split_constant_offset): Remove STRIP_NOPS. + +2018-01-08 Richard Biener <rguenther@suse.de> + PR middle-end/83517 * match.pd ((t * 2) / 2) -> t): Add missing :c. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9ec2e81..de94003 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2018-01-08 Richard Biener <rguenther@suse.de> + PR middle-end/83580 + * gcc.dg/torture/pr83580.c: New testcase. + +2018-01-08 Richard Biener <rguenther@suse.de> + PR middle-end/83517 * gcc.dg/pr83517.c: New testcase. diff --git a/gcc/testsuite/gcc.dg/torture/pr83580.c b/gcc/testsuite/gcc.dg/torture/pr83580.c new file mode 100644 index 0000000..e8030b4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr83580.c @@ -0,0 +1,16 @@ +/* { dg-do run } */ + +int a[2] = { 0, 1 }; +int x = 129; + +int +main () +{ + volatile int v = 0; + int t = x, i; + for (i = 0; i < 1 + v + v + v + v + v + v + v + v + a[a[0]]; i++) + t = a[(signed char) (130 - x)]; + if (t != 1) + __builtin_abort (); + return 0; +} diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index fc503c7..3b15b5d 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -723,23 +723,21 @@ split_constant_offset_1 (tree type, tree op0, enum tree_code code, tree op1, void split_constant_offset (tree exp, tree *var, tree *off) { - tree type = TREE_TYPE (exp), otype, op0, op1, e, o; + tree type = TREE_TYPE (exp), op0, op1, e, o; enum tree_code code; *var = exp; *off = ssize_int (0); - STRIP_NOPS (exp); if (tree_is_chrec (exp) || get_gimple_rhs_class (TREE_CODE (exp)) == GIMPLE_TERNARY_RHS) return; - otype = TREE_TYPE (exp); code = TREE_CODE (exp); extract_ops_from_tree (exp, &code, &op0, &op1); - if (split_constant_offset_1 (otype, op0, code, op1, &e, &o)) + if (split_constant_offset_1 (type, op0, code, op1, &e, &o)) { - *var = fold_convert (type, e); + *var = e; *off = o; } } |