diff options
author | Paolo Bonzini <bonzini@gnu.org> | 2005-01-04 14:37:23 +0000 |
---|---|---|
committer | Paolo Bonzini <bonzini@gcc.gnu.org> | 2005-01-04 14:37:23 +0000 |
commit | 8ea9d0c7c932328745976c01943afafaa8c729ee (patch) | |
tree | a919dee0dec5ee35dd918a7ace0394d63a37c89c /gcc/tree-if-conv.c | |
parent | 8c427b58d167a17c88895d8cd6ed2999d493165f (diff) | |
download | gcc-8ea9d0c7c932328745976c01943afafaa8c729ee.zip gcc-8ea9d0c7c932328745976c01943afafaa8c729ee.tar.gz gcc-8ea9d0c7c932328745976c01943afafaa8c729ee.tar.bz2 |
re PR tree-optimization/18308 (ICE in do_jump, at dojump.c:274)
gcc:
2005-01-04 Paolo Bonzini <bonzini@gnu.org>
Devang Patel <dpatel@apple.com>
PR tree-optimization/18308
* tree-if-conv.c (add_to_dst_predicate_list): Gimplify
the operands before creating a new expression.
* dojump.c (do_jump): Make drop_through_label available
for all cases. Add expansion of COND_EXPR.
gcc/testsuite:
2005-01-04 Paolo Bonzini <bonzini@gnu.org>
* gcc.dg/vect/pr18308.c: New testcase.
Co-Authored-By: Devang Patel <dpatel@apple.com>
From-SVN: r92895
Diffstat (limited to 'gcc/tree-if-conv.c')
-rw-r--r-- | gcc/tree-if-conv.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index 36e9c75..4085922 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -1,5 +1,5 @@ /* If-conversion for vectorizer. - Copyright (C) 2004 Free Software Foundation, Inc. + Copyright (C) 2004, 2005 Free Software Foundation, Inc. Contributed by Devang Patel <dpatel@apple.com> This file is part of GCC. @@ -639,10 +639,23 @@ add_to_dst_predicate_list (struct loop * loop, basic_block bb, new_cond = unshare_expr (cond); else { - tree tmp_stmt; + tree tmp; + tree tmp_stmt = NULL_TREE; + tree tmp_stmts1 = NULL_TREE; + tree tmp_stmts2 = NULL_TREE; + prev_cond = force_gimple_operand (unshare_expr (prev_cond), + &tmp_stmts1, true, NULL); + if (tmp_stmts1) + bsi_insert_before (bsi, tmp_stmts1, BSI_SAME_STMT); + + cond = force_gimple_operand (unshare_expr (cond), + &tmp_stmts2, true, NULL); + if (tmp_stmts2) + bsi_insert_before (bsi, tmp_stmts2, BSI_SAME_STMT); + /* new_cond == prev_cond AND cond */ - tree tmp = build (TRUTH_AND_EXPR, boolean_type_node, - unshare_expr (prev_cond), cond); + tmp = build (TRUTH_AND_EXPR, boolean_type_node, + unshare_expr (prev_cond), cond); tmp_stmt = ifc_temp_var (boolean_type_node, tmp); bsi_insert_before (bsi, tmp_stmt, BSI_SAME_STMT); new_cond = TREE_OPERAND (tmp_stmt, 0); |