summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2018-07-16 11:01:48 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2018-07-16 11:01:48 +0000
commita453afd16de79f7c6e96246c698e402ec34f932f (patch)
tree645fc58fecfd6cc3aaf0dcd1f98807105c26719a
parenteeabef8911c309c917e8ed3a34e65800ae367022 (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/ChangeLog22
-rw-r--r--gcc/graphite-scop-detection.c4
-rw-r--r--gcc/match.pd4
-rw-r--r--gcc/testsuite/ChangeLog18
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/930326-1.c1
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr85935.c25
-rw-r--r--gcc/testsuite/gcc.dg/pr86076.c26
-rw-r--r--gcc/tree-cfg.c11
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)