diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-11-14 01:02:35 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-11-14 01:02:35 +0100 |
commit | 66146c90f61f644970f9037f89f56cfcad7bce8c (patch) | |
tree | c32a467cad3d745d91235c17569cf0bd098b6375 | |
parent | b76a1b3604f8e645402a68c3352e1bc360a5b8f9 (diff) | |
download | gcc-66146c90f61f644970f9037f89f56cfcad7bce8c.zip gcc-66146c90f61f644970f9037f89f56cfcad7bce8c.tar.gz gcc-66146c90f61f644970f9037f89f56cfcad7bce8c.tar.bz2 |
re PR tree-optimization/87898 (ICE in separate_decls_in_region_debug, at tree-parloops.c:961)
PR tree-optimization/87898
* omp-simd-clone.c (ipa_simd_modify_stmt_ops): Formatting fix.
(ipa_simd_modify_function_body): Remove debug stmts where the first
argument was changed into a non-decl.
* gcc.dg/gomp/pr87898.c: New test.
From-SVN: r266093
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/omp-simd-clone.c | 22 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/gomp/pr87898.c | 10 |
4 files changed, 39 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index da5a538..fa13fdd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-11-13 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/87898 + * omp-simd-clone.c (ipa_simd_modify_stmt_ops): Formatting fix. + (ipa_simd_modify_function_body): Remove debug stmts where the first + argument was changed into a non-decl. + 2018-11-13 Peter Bergner <bergner@linux.ibm.com> PR rtl-optimization/87899 diff --git a/gcc/omp-simd-clone.c b/gcc/omp-simd-clone.c index 7bafe39..7aa362a 100644 --- a/gcc/omp-simd-clone.c +++ b/gcc/omp-simd-clone.c @@ -834,11 +834,8 @@ ipa_simd_modify_stmt_ops (tree *tp, int *walk_subtrees, void *data) struct ipa_parm_adjustment *cand = NULL; if (TREE_CODE (*tp) == PARM_DECL) cand = ipa_get_adjustment_candidate (&tp, NULL, info->adjustments, true); - else - { - if (TYPE_P (*tp)) - *walk_subtrees = 0; - } + else if (TYPE_P (*tp)) + *walk_subtrees = 0; tree repl = NULL_TREE; if (cand) @@ -1014,6 +1011,21 @@ ipa_simd_modify_function_body (struct cgraph_node *node, if (info.modified) { update_stmt (stmt); + /* If the above changed the var of a debug bind into something + different, remove the debug stmt. We could also for all the + replaced parameters add VAR_DECLs for debug info purposes, + add debug stmts for those to be the simd array accesses and + replace debug stmt var operand with that var. Debugging of + vectorized loops doesn't work too well, so don't bother for + now. */ + if ((gimple_debug_bind_p (stmt) + && !DECL_P (gimple_debug_bind_get_var (stmt))) + || (gimple_debug_source_bind_p (stmt) + && !DECL_P (gimple_debug_source_bind_get_var (stmt)))) + { + gsi_remove (&gsi, true); + continue; + } if (maybe_clean_eh_stmt (stmt)) gimple_purge_dead_eh_edges (gimple_bb (stmt)); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9a9cd82..be7cf28 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-11-13 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/87898 + * gcc.dg/gomp/pr87898.c: New test. + 2018-11-13 David Malcolm <dmalcolm@redhat.com> * g++.dg/plugin/comment_plugin.c: Replace "source_location" with diff --git a/gcc/testsuite/gcc.dg/gomp/pr87898.c b/gcc/testsuite/gcc.dg/gomp/pr87898.c new file mode 100644 index 0000000..ba42c64a --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/pr87898.c @@ -0,0 +1,10 @@ +/* PR tree-optimization/87898 */ +/* { dg-do compile { target fgraphite } } */ +/* { dg-options "-O1 -floop-parallelize-all -fopenmp -ftree-parallelize-loops=2 -g" } */ + +#pragma omp declare simd +void +foo (int x) +{ + x = 0; +} |