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
This commit is contained in:
parent
8c427b58d1
commit
8ea9d0c7c9
|
@ -1,3 +1,13 @@
|
|||
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.
|
||||
|
||||
2005-01-04 Ira Rosen <irar@il.ibm.com>
|
||||
|
||||
* tree-vectorizer.c (vect_analyze_offset_expr): Test for
|
||||
|
|
37
gcc/dojump.c
37
gcc/dojump.c
|
@ -1,6 +1,6 @@
|
|||
/* Convert tree expression to rtl instructions, for GNU compiler.
|
||||
Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
|
@ -164,6 +164,7 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label)
|
|||
int i;
|
||||
tree type;
|
||||
enum machine_mode mode;
|
||||
rtx drop_through_label = 0;
|
||||
|
||||
switch (code)
|
||||
{
|
||||
|
@ -293,10 +294,29 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label)
|
|||
do_jump (TREE_OPERAND (exp, 0), if_true_label, if_false_label);
|
||||
break;
|
||||
|
||||
case COND_EXPR:
|
||||
{
|
||||
rtx label1 = gen_label_rtx ();
|
||||
if (!if_true_label || !if_false_label)
|
||||
{
|
||||
drop_through_label = gen_label_rtx ();
|
||||
if (!if_true_label)
|
||||
if_true_label = drop_through_label;
|
||||
if (!if_false_label)
|
||||
if_false_label = drop_through_label;
|
||||
}
|
||||
|
||||
do_pending_stack_adjust ();
|
||||
do_jump (TREE_OPERAND (exp, 0), label1, NULL_RTX);
|
||||
do_jump (TREE_OPERAND (exp, 1), if_false_label, if_true_label);
|
||||
emit_label (label1);
|
||||
do_jump (TREE_OPERAND (exp, 2), if_false_label, if_true_label);
|
||||
break;
|
||||
}
|
||||
|
||||
case TRUTH_ANDIF_EXPR:
|
||||
case TRUTH_ORIF_EXPR:
|
||||
case COMPOUND_EXPR:
|
||||
case COND_EXPR:
|
||||
/* Lowered by gimplify.c. */
|
||||
gcc_unreachable ();
|
||||
|
||||
|
@ -478,7 +498,6 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label)
|
|||
tree op0 = save_expr (TREE_OPERAND (exp, 0));
|
||||
tree op1 = save_expr (TREE_OPERAND (exp, 1));
|
||||
tree cmp0, cmp1;
|
||||
rtx drop_through_label = 0;
|
||||
|
||||
/* If the target doesn't support combined unordered
|
||||
compares, decompose into two comparisons. */
|
||||
|
@ -489,12 +508,6 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label)
|
|||
cmp1 = fold (build2 (tcode2, TREE_TYPE (exp), op0, op1));
|
||||
do_jump (cmp0, 0, if_true_label);
|
||||
do_jump (cmp1, if_false_label, if_true_label);
|
||||
|
||||
if (drop_through_label)
|
||||
{
|
||||
do_pending_stack_adjust ();
|
||||
emit_label (drop_through_label);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -568,6 +581,12 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label)
|
|||
if_false_label, if_true_label);
|
||||
}
|
||||
}
|
||||
|
||||
if (drop_through_label)
|
||||
{
|
||||
do_pending_stack_adjust ();
|
||||
emit_label (drop_through_label);
|
||||
}
|
||||
}
|
||||
|
||||
/* Given a comparison expression EXP for values too wide to be compared
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2005-01-04 Paolo Bonzini <bonzini@gnu.org>
|
||||
|
||||
PR tree-optimization/18308
|
||||
* gcc.dg/vect/pr18308.c: New testcase.
|
||||
|
||||
2005-01-04 Andreas Jaeger <aj@suse.de>
|
||||
|
||||
* gcc.target/i386/amd64-abi-1.c: Only run as 64-bit tests.
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O -ftree-vectorize -funroll-loops" } */
|
||||
void foo();
|
||||
|
||||
void bar(int j)
|
||||
{
|
||||
int i, k=0;
|
||||
for (i = 0; i < 2; ++i)
|
||||
if (j) k = 2;
|
||||
|
||||
if (k) foo();
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue