diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-11-28 20:48:19 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2007-11-28 20:48:19 +0100 |
commit | 93d15c33318942014feda60caa687a96ecea2499 (patch) | |
tree | bc3381be110ff36127771fa97b896f92ce969b52 /gcc/tree-if-conv.c | |
parent | eae645b69a75b68ff2e4ccc1ad64bcbca23e3073 (diff) | |
download | gcc-93d15c33318942014feda60caa687a96ecea2499.zip gcc-93d15c33318942014feda60caa687a96ecea2499.tar.gz gcc-93d15c33318942014feda60caa687a96ecea2499.tar.bz2 |
re PR tree-optimization/34140 (ICE in is_hidden_global_store, at tree-ssa-sink.c:207)
PR tree-optimization/34140
* tree-if-conv.c (if_convertible_phi_p): Fail if BB other than
loop->header has virtual phi nodes.
* gcc.c-torture/compile/20071128-1.c: New test.
From-SVN: r130494
Diffstat (limited to 'gcc/tree-if-conv.c')
-rw-r--r-- | gcc/tree-if-conv.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index 324fc93..ec34929 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -302,7 +302,8 @@ tree_if_convert_cond_expr (struct loop *loop, tree stmt, tree cond, and it belongs to basic block BB. PHI is not if-convertible - if it has more than 2 arguments. - - Virtual PHI is immediately used in another PHI node. */ + - Virtual PHI is immediately used in another PHI node. + - Virtual PHI on BB other than header. */ static bool if_convertible_phi_p (struct loop *loop, basic_block bb, tree phi) @@ -324,6 +325,13 @@ if_convertible_phi_p (struct loop *loop, basic_block bb, tree phi) { imm_use_iterator imm_iter; use_operand_p use_p; + + if (bb != loop->header) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "Virtual phi not on loop header.\n"); + return false; + } FOR_EACH_IMM_USE_FAST (use_p, imm_iter, PHI_RESULT (phi)) { if (TREE_CODE (USE_STMT (use_p)) == PHI_NODE) |