diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/autopar/pr86097.c | 31 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-manip.c | 3 |
4 files changed, 44 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 86db35f..d43118c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-06-20 Tom de Vries <tdevries@suse.de> + + PR tree-optimization/86097 + * tree-ssa-loop-manip.c (canonicalize_loop_ivs): Also convert *nit to + iv type if signedness of iv type is not the same as that of *nit. + 2018-06-20 Jakub Jelinek <jakub@redhat.com> * cfgrtl.c (rtl_verify_edges): Formatting fix. If bb->preds has any diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 25a7caa..ad3b600 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-06-20 Tom de Vries <tdevries@suse.de> + + PR tree-optimization/86097 + * gcc.dg/autopar/pr86097.c: New test. + 2018-06-20 Nathan Sidwell <nathan@acm.org> PR c++/85634 diff --git a/gcc/testsuite/gcc.dg/autopar/pr86097.c b/gcc/testsuite/gcc.dg/autopar/pr86097.c new file mode 100644 index 0000000..b48e87b --- /dev/null +++ b/gcc/testsuite/gcc.dg/autopar/pr86097.c @@ -0,0 +1,31 @@ +/* { dg-options "-O2 -ftree-parallelize-loops=2 -fno-tree-dce -Wno-aggressive-loop-optimizations" } */ +int rp, vd; + +void +p5 (int cd) +{ + while (cd != 0) + { + for (rp = 0; rp < 4; ++rp) + for (vd = 0; vd < 1; ++vd) + { + g0: + ; + } + + ++rp; + } + + while (rp < 2) + { + for (cd = 0; cd < 1; ++cd) + for (rp = 1; rp != 0; ++rp) + { + } + + ++rp; + } + + if (cd != 0) + goto g0; +} diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c index bf425af..5acee6c 100644 --- a/gcc/tree-ssa-loop-manip.c +++ b/gcc/tree-ssa-loop-manip.c @@ -1542,7 +1542,8 @@ canonicalize_loop_ivs (struct loop *loop, tree *nit, bool bump_in_latch) precision = GET_MODE_PRECISION (mode); type = build_nonstandard_integer_type (precision, unsigned_p); - if (original_precision != precision) + if (original_precision != precision + || TYPE_UNSIGNED (TREE_TYPE (*nit)) != unsigned_p) { *nit = fold_convert (type, *nit); *nit = force_gimple_operand (*nit, &stmts, true, NULL_TREE); |