diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2018-07-16 11:01:48 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2018-07-16 11:01:48 +0000 |
commit | a453afd16de79f7c6e96246c698e402ec34f932f (patch) | |
tree | 645fc58fecfd6cc3aaf0dcd1f98807105c26719a | |
parent | eeabef8911c309c917e8ed3a34e65800ae367022 (diff) |
2018-07-16 Richard Biener <rguenther@suse.de>
Backport from mainline
2018-07-13 Richard Biener <rguenther@suse.de>
PR middle-end/85974
* match.pd (addr1 - addr2): Allow either of the operand to
have a conversion.
* gcc.c-torture/compile/930326-1.c: Adjust to cover widening.
2018-06-15 Richard Biener <rguenther@suse.de>
PR middle-end/86076
* tree-cfg.c (move_stmt_op): unshare invariant addresses
before adjusting their block.
* gcc.dg/pr86076.c: New testcase.
2018-06-06 Richard Biener <rguenther@suse.de>
PR tree-optimization/85935
* graphite-scop-detection.c (find_params_in_bb): Analyze
condition operands with respect to the correct loop. Assert
the analysis doesn't fail.
* gcc.dg/graphite/pr85935.c: New testcase.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-8-branch@262690 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 22 | ||||
-rw-r--r-- | gcc/graphite-scop-detection.c | 4 | ||||
-rw-r--r-- | gcc/match.pd | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 18 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/930326-1.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/graphite/pr85935.c | 25 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr86076.c | 26 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 11 |
8 files changed, 107 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fa404552ffe2..51a78594966f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,25 @@ +2018-07-16 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2018-07-13 Richard Biener <rguenther@suse.de> + + PR middle-end/85974 + * match.pd (addr1 - addr2): Allow either of the operand to + have a conversion. + + 2018-06-15 Richard Biener <rguenther@suse.de> + + PR middle-end/86076 + * tree-cfg.c (move_stmt_op): unshare invariant addresses + before adjusting their block. + + 2018-06-06 Richard Biener <rguenther@suse.de> + + PR tree-optimization/85935 + * graphite-scop-detection.c (find_params_in_bb): Analyze + condition operands with respect to the correct loop. Assert + the analysis doesn't fail. + 2018-07-16 Eric Botcazou <ebotcazou@adacore.com> PR tree-optimization/86514 diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c index 48e40142e59f..0dafc3995216 100644 --- a/gcc/graphite-scop-detection.c +++ b/gcc/graphite-scop-detection.c @@ -1176,13 +1176,15 @@ find_params_in_bb (sese_info_p region, gimple_poly_bb_p gbb) /* Find parameters in conditional statements. */ gimple *stmt; - loop_p loop = GBB_BB (gbb)->loop_father; FOR_EACH_VEC_ELT (GBB_CONDITIONS (gbb), i, stmt) { + loop_p loop = gimple_bb (stmt)->loop_father; tree lhs = scalar_evolution_in_region (region->region, loop, gimple_cond_lhs (stmt)); tree rhs = scalar_evolution_in_region (region->region, loop, gimple_cond_rhs (stmt)); + gcc_assert (!chrec_contains_undetermined (lhs) + && !chrec_contains_undetermined (rhs)); scan_tree_for_params (region, lhs); scan_tree_for_params (region, rhs); diff --git a/gcc/match.pd b/gcc/match.pd index cb7317d0fcab..2425e8307e3a 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -1590,14 +1590,14 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (if (ptr_difference_const (@0, @1, &diff)) { build_int_cst_type (type, diff); })))) (simplify - (pointer_diff (convert?@2 ADDR_EXPR@0) (convert?@3 @1)) + (pointer_diff (convert?@2 ADDR_EXPR@0) (convert1?@3 @1)) (if (tree_nop_conversion_p (TREE_TYPE(@2), TREE_TYPE (@0)) && tree_nop_conversion_p (TREE_TYPE(@3), TREE_TYPE (@1))) (with { poly_int64 diff; } (if (ptr_difference_const (@0, @1, &diff)) { build_int_cst_type (type, diff); })))) (simplify - (pointer_diff (convert?@2 @0) (convert?@3 ADDR_EXPR@1)) + (pointer_diff (convert?@2 @0) (convert1?@3 ADDR_EXPR@1)) (if (tree_nop_conversion_p (TREE_TYPE(@2), TREE_TYPE (@0)) && tree_nop_conversion_p (TREE_TYPE(@3), TREE_TYPE (@1))) (with { poly_int64 diff; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dbae1004d001..5fcbc58b6662 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,21 @@ +2018-07-16 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2018-07-13 Richard Biener <rguenther@suse.de> + + PR middle-end/85974 + * gcc.c-torture/compile/930326-1.c: Adjust to cover widening. + + 2018-06-15 Richard Biener <rguenther@suse.de> + + PR middle-end/86076 + * gcc.dg/pr86076.c: New testcase. + + 2018-06-06 Richard Biener <rguenther@suse.de> + + PR tree-optimization/85935 + * gcc.dg/graphite/pr85935.c: New testcase. + 2018-07-16 Eric Botcazou <ebotcazou@adacore.com> * gnat.dg/opt73.adb: New test. diff --git a/gcc/testsuite/gcc.c-torture/compile/930326-1.c b/gcc/testsuite/gcc.c-torture/compile/930326-1.c index 97313d86aa97..74f4ef636375 100644 --- a/gcc/testsuite/gcc.c-torture/compile/930326-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/930326-1.c @@ -4,3 +4,4 @@ struct } s; long i = s.f-&s.b; +long long j = s.f-&s.b; diff --git a/gcc/testsuite/gcc.dg/graphite/pr85935.c b/gcc/testsuite/gcc.dg/graphite/pr85935.c new file mode 100644 index 000000000000..8c63ea93770c --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/pr85935.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-options "-O -floop-parallelize-all -fno-tree-loop-im --param scev-max-expr-size=3" } */ + +typedef int dq; + +int gb; + +void +qq (dq ww, int kk) +{ + dq *up = &ww; + + (void) *up; + + while (kk < 1) + { + ++ww; + + if (ww == 0) + for (gb = 0; gb < 2; ++gb) + ; + + ++kk; + } +} diff --git a/gcc/testsuite/gcc.dg/pr86076.c b/gcc/testsuite/gcc.dg/pr86076.c new file mode 100644 index 000000000000..390ca47ba124 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr86076.c @@ -0,0 +1,26 @@ +/* { dg-do compile { target pthread } } */ +/* { dg-options "-O2 -ftree-parallelize-loops=2 -fno-tree-dce -fno-tree-pre -fno-tree-vrp --param max-loop-header-insns=1" } */ + +int __attribute__ ((noinline)) +lv (int tm) +{ + (void) tm; + + return 0; +} + +void +o7 (int uu) +{ + while (uu < 1) + while (uu != 0) + { + short int ca; + + ca = lv (0); + (void) ca; + ++uu; + } + + lv (lv (0)); +} diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 9485f73f341e..6e8fbac56a0b 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -6925,7 +6925,16 @@ move_stmt_op (tree *tp, int *walk_subtrees, void *data) ; else if (block == p->orig_block || p->orig_block == NULL_TREE) - TREE_SET_BLOCK (t, p->new_block); + { + /* tree_node_can_be_shared says we can share invariant + addresses but unshare_expr copies them anyways. Make sure + to unshare before adjusting the block in place - we do not + always see a copy here. */ + if (TREE_CODE (t) == ADDR_EXPR + && is_gimple_min_invariant (t)) + *tp = t = unshare_expr (t); + TREE_SET_BLOCK (t, p->new_block); + } else if (flag_checking) { while (block && TREE_CODE (block) == BLOCK && block != p->orig_block) |