From 1bbd3bdee61544ce2824befa54c9a309ecac3905 Mon Sep 17 00:00:00 2001 From: Richard Guenther <rguenther@suse.de> Date: Tue, 2 Nov 2010 15:45:26 +0000 Subject: [PATCH] re PR tree-optimization/46177 (ICE: in prop_phis, at tree-loop-distribution.c:327 with -fno-tree-copy-prop -ftree-loop-distribution) 2010-11-02 Richard Guenther <rguenther@suse.de> PR tree-optimization/46177 * tree-loop-distribution.c (prop_phis): Use mark_virtual_phi_result_for_renaming. * gcc.dg/pr46177.c: New testcase. From-SVN: r166193 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr46177.c | 18 ++++++++++++++++++ gcc/tree-loop-distribution.c | 21 +++++++-------------- 4 files changed, 36 insertions(+), 14 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr46177.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a347b05182c7..e1a18afbc496 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-11-02 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/46177 + * tree-loop-distribution.c (prop_phis): Use + mark_virtual_phi_result_for_renaming. + 2010-11-02 Martin Jambor <mjambor@suse.cz> PR middle-end/46120 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 471b009da583..4f4e4863a41a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-11-02 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/46177 + * gcc.dg/pr46177.c: New testcase. + 2010-11-02 Martin Jambor <mjambor@suse.cz> PR middle-end/46120 diff --git a/gcc/testsuite/gcc.dg/pr46177.c b/gcc/testsuite/gcc.dg/pr46177.c new file mode 100644 index 000000000000..397e31634002 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr46177.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fno-tree-copy-prop -ftree-loop-distribution" } */ + +extern int A[]; +extern int B[]; + +void +foo (int j, int c) +{ + int i; + + if (c) + for (i = 0; i < j; i++) + A[i] = B[i] = 0; + + for (i = 0; i < j; i++) + A[i] = B[i]; +} diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c index 63f717807d48..bc3f54d97d46 100644 --- a/gcc/tree-loop-distribution.c +++ b/gcc/tree-loop-distribution.c @@ -317,27 +317,20 @@ static void prop_phis (basic_block b) { gimple_stmt_iterator psi; - gimple_seq phis = phi_nodes (b); - for (psi = gsi_start (phis); !gsi_end_p (psi); ) + for (psi = gsi_start_phis (b); !gsi_end_p (psi); ) { gimple phi = gsi_stmt (psi); - tree def = gimple_phi_result (phi), use = gimple_phi_arg_def (phi, 0); - - gcc_assert (gimple_phi_num_args (phi) == 1); + tree def = gimple_phi_result (phi); if (!is_gimple_reg (def)) + mark_virtual_phi_result_for_renaming (phi); + else { - imm_use_iterator iter; - use_operand_p use_p; - gimple stmt; - - FOR_EACH_IMM_USE_STMT (stmt, iter, def) - FOR_EACH_IMM_USE_ON_STMT (use_p, iter) - SET_USE (use_p, use); + tree use = gimple_phi_arg_def (phi, 0); + gcc_assert (gimple_phi_num_args (phi) == 1); + replace_uses_by (def, use); } - else - replace_uses_by (def, use); remove_phi_node (&psi, true); } -- GitLab