aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-04-29 14:12:54 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-04-29 14:12:54 +0000
commit0c2b20400cbe35ee7ffd3688b921dfc92fe263ed (patch)
tree86c9f1c852b4ea96236a5e6c7f1d18cad40679b9
parent3f12f6e9145ea69e9da7e9e180100e5ce7ca3ee9 (diff)
downloadgcc-0c2b20400cbe35ee7ffd3688b921dfc92fe263ed.zip
gcc-0c2b20400cbe35ee7ffd3688b921dfc92fe263ed.tar.gz
gcc-0c2b20400cbe35ee7ffd3688b921dfc92fe263ed.tar.bz2
re PR middle-end/57103 (ICE: verify_gimple failed: location references block not in block tree with -ftree-parallelize-loops=4)
2013-04-29 Richard Biener <rguenther@suse.de> PR middle-end/57103 * tree-cfg.c (move_stmt_op): Fix condition under which to update TREE_BLOCK. (move_stmt_r): Remove redundant checking. * gcc.dg/autopar/pr57103.c: New testcase. From-SVN: r198418
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/autopar/pr57103.c19
-rw-r--r--gcc/tree-cfg.c35
4 files changed, 45 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1529dd3..b84161b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2013-04-29 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/57103
+ * tree-cfg.c (move_stmt_op): Fix condition under which to update
+ TREE_BLOCK.
+ (move_stmt_r): Remove redundant checking.
+
2013-04-29 Teresa Johnson <tejohnson@google.com>
PR bootstrap/57077
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ea304a0..166d4e0 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-04-29 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/57103
+ * gcc.dg/autopar/pr57103.c: New testcase.
+
2013-04-29 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
* gcc.dg/c1x-align-3.c: Add test for negative power of 2.
diff --git a/gcc/testsuite/gcc.dg/autopar/pr57103.c b/gcc/testsuite/gcc.dg/autopar/pr57103.c
new file mode 100644
index 0000000..fa70676
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/autopar/pr57103.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-O -ftree-parallelize-loops=4" } */
+
+int d[1024];
+
+static inline int foo (void)
+{
+ int s = 0;
+ int i = 0;
+ for (; i < 1024; i++)
+ s += d[i];
+ return s;
+}
+
+void bar (void)
+{
+ if (foo ())
+ __builtin_abort ();
+}
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index a8e9f5c..9b00248 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -6153,10 +6153,19 @@ move_stmt_op (tree *tp, int *walk_subtrees, void *data)
if (EXPR_P (t))
{
- if (TREE_BLOCK (t) == p->orig_block
+ tree block = TREE_BLOCK (t);
+ if (block == p->orig_block
|| (p->orig_block == NULL_TREE
- && TREE_BLOCK (t) == NULL_TREE))
+ && block != NULL_TREE))
TREE_SET_BLOCK (t, p->new_block);
+#ifdef ENABLE_CHECKING
+ else if (block != NULL_TREE)
+ {
+ while (block && TREE_CODE (block) == BLOCK && block != p->orig_block)
+ block = BLOCK_SUPERCONTEXT (block);
+ gcc_assert (block == p->orig_block);
+ }
+#endif
}
else if (DECL_P (t) || TREE_CODE (t) == SSA_NAME)
{
@@ -6241,18 +6250,10 @@ move_stmt_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p,
gimple stmt = gsi_stmt (*gsi_p);
tree block = gimple_block (stmt);
- if (p->orig_block == NULL_TREE
- || block == p->orig_block
- || block == NULL_TREE)
+ if (block == p->orig_block
+ || (p->orig_block == NULL_TREE
+ && block != NULL_TREE))
gimple_set_block (stmt, p->new_block);
-#ifdef ENABLE_CHECKING
- else if (block != p->new_block)
- {
- while (block && block != p->orig_block)
- block = BLOCK_SUPERCONTEXT (block);
- gcc_assert (block);
- }
-#endif
switch (gimple_code (stmt))
{
@@ -6486,14 +6487,6 @@ move_block_to_fn (struct function *dest_cfun, basic_block bb,
e->goto_locus = d->new_block ?
COMBINE_LOCATION_DATA (line_table, e->goto_locus, d->new_block) :
LOCATION_LOCUS (e->goto_locus);
-#ifdef ENABLE_CHECKING
- else if (block != d->new_block)
- {
- while (block && block != d->orig_block)
- block = BLOCK_SUPERCONTEXT (block);
- gcc_assert (block);
- }
-#endif
}
}