diff options
author | Richard Guenther <rguenther@suse.de> | 2010-11-02 15:45:26 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-11-02 15:45:26 +0000 |
commit | 1bbd3bdee61544ce2824befa54c9a309ecac3905 (patch) | |
tree | d6c665084032f37ed12dc25745961e9a79b83546 /gcc/tree-loop-distribution.c | |
parent | 4c2030661e0a9bce68786f72e4d0da1be5caf3a5 (diff) | |
download | gcc-1bbd3bdee61544ce2824befa54c9a309ecac3905.zip gcc-1bbd3bdee61544ce2824befa54c9a309ecac3905.tar.gz gcc-1bbd3bdee61544ce2824befa54c9a309ecac3905.tar.bz2 |
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
Diffstat (limited to 'gcc/tree-loop-distribution.c')
-rw-r--r-- | gcc/tree-loop-distribution.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c index 63f7178..bc3f54d 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); } |