diff options
author | Richard Biener <rguenth@gcc.gnu.org> | 2017-10-24 07:02:48 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-10-24 07:02:48 +0000 |
commit | d32bc875d2297f2f2240e8aad2082be4d1f851d8 (patch) | |
tree | 17bd6804bb91862e208f10a563382c2db21b95b3 /gcc | |
parent | 57f6a200e324c605ed19fef107e528d0b902770a (diff) | |
download | gcc-d32bc875d2297f2f2240e8aad2082be4d1f851d8.zip gcc-d32bc875d2297f2f2240e8aad2082be4d1f851d8.tar.gz gcc-d32bc875d2297f2f2240e8aad2082be4d1f851d8.tar.bz2 |
re PR tree-optimization/82672 ([GRAPHITE] ICE in verify_gimple_in_cfg)
2017-10-23 Richard Biener <rguenther@suse.de>
PR tree-optimization/82672
* graphite-isl-ast-to-gimple.c (graphite_copy_stmts_from_block):
Fold the stmt if we propagated into it.
* gfortran.dg/graphite/pr82672.f90: New testcase.
From-SVN: r254036
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/graphite-isl-ast-to-gimple.c | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/gcc/graphite-isl-ast-to-gimple.c b/gcc/graphite-isl-ast-to-gimple.c index b39ac54..16570e1 100644 --- a/gcc/graphite-isl-ast-to-gimple.c +++ b/gcc/graphite-isl-ast-to-gimple.c @@ -1175,22 +1175,28 @@ graphite_copy_stmts_from_block (basic_block bb, basic_block new_bb, ssa_op_iter iter; use_operand_p use_p; if (!is_gimple_debug (copy)) - FOR_EACH_SSA_USE_OPERAND (use_p, copy, iter, SSA_OP_USE) - { - tree old_name = USE_FROM_PTR (use_p); - - if (TREE_CODE (old_name) != SSA_NAME - || SSA_NAME_IS_DEFAULT_DEF (old_name) - || ! scev_analyzable_p (old_name, region->region)) - continue; - - gimple_seq stmts = NULL; - tree new_name = get_rename_from_scev (old_name, &stmts, - bb->loop_father, iv_map); - if (! codegen_error_p ()) - gsi_insert_earliest (stmts); - replace_exp (use_p, new_name); - } + { + bool changed = false; + FOR_EACH_SSA_USE_OPERAND (use_p, copy, iter, SSA_OP_USE) + { + tree old_name = USE_FROM_PTR (use_p); + + if (TREE_CODE (old_name) != SSA_NAME + || SSA_NAME_IS_DEFAULT_DEF (old_name) + || ! scev_analyzable_p (old_name, region->region)) + continue; + + gimple_seq stmts = NULL; + tree new_name = get_rename_from_scev (old_name, &stmts, + bb->loop_father, iv_map); + if (! codegen_error_p ()) + gsi_insert_earliest (stmts); + replace_exp (use_p, new_name); + changed = true; + } + if (changed) + fold_stmt_inplace (&gsi_tgt); + } update_stmt (copy); } |