From: Richard Guenther Date: Tue, 5 Sep 2006 08:39:42 +0000 (+0000) Subject: re PR tree-optimization/28900 (ICE verify_stmts failed (invalid operand to unary... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=575643d56cd35107e7352060f420e93eda8282d5;p=gcc.git re PR tree-optimization/28900 (ICE verify_stmts failed (invalid operand to unary operator)) 2006-09-05 Richard Guenther PR tree-optimization/28900 * tree-if-conv.c (find_phi_replacement_condition): Gimplify compound conditional before creating COND_EXPR condition. * gcc.dg/torture/pr28900.c: New testcase From-SVN: r116697 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 30a49bb379f..ba5a9e0d2d0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-09-05 Richard Guenther + + PR tree-optimization/28900 + * tree-if-conv.c (find_phi_replacement_condition): Gimplify + compound conditional before creating COND_EXPR condition. + 2006-09-05 Richard Guenther PR tree-optimization/28905 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a1946dddf41..ac55cac729d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-09-05 Richard Guenther + + PR tree-optimization/28900 + * gcc.dg/torture/pr28900.c: New testcase + 2006-09-05 Richard Guenther PR tree-optimization/28905 diff --git a/gcc/testsuite/gcc.dg/torture/pr28900.c b/gcc/testsuite/gcc.dg/torture/pr28900.c new file mode 100644 index 00000000000..75555f46ec0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr28900.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-ftree-vectorize" } */ + +int synths_ ( float * rc) +{ + float r1, r2; + int i; + for (i = 0; i < 128; ++i) + { + r2 = rc[i]; + r1 = ((r2) <= (.99f) ? (r2) : (.99f)); + rc[i] = ((r1) >= (-.99f) ? (r1) : (-.99f)); + } +} + diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index ecd1368cd27..6e16a40a9c3 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -666,7 +666,7 @@ find_phi_replacement_condition (struct loop *loop, { basic_block first_bb = NULL; basic_block second_bb = NULL; - tree tmp_cond; + tree tmp_cond, new_stmts; gcc_assert (EDGE_COUNT (bb->preds) == 2); first_bb = (EDGE_PRED (bb, 0))->src; @@ -732,6 +732,9 @@ find_phi_replacement_condition (struct loop *loop, value as condition. Various targets use different means to communicate condition in vector compare operation. Using gimple value allows compiler to emit vector compare and select RTL without exposing compare's result. */ + *cond = force_gimple_operand (*cond, &new_stmts, false, NULL_TREE); + if (new_stmts) + bsi_insert_before (bsi, new_stmts, BSI_SAME_STMT); if (!is_gimple_reg (*cond) && !is_gimple_condexpr (*cond)) { tree new_stmt;