This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[tree-ssa] PATCH to support TRUTH_NOT_EXPR for optimization/12661
- From: Jason Merrill <jason at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 21 Oct 2003 10:49:14 -0400
- Subject: [tree-ssa] PATCH to support TRUTH_NOT_EXPR for optimization/12661
TRUTH_NOT_EXPR has not been valid GIMPLE, but it can be produced by
fold. The simplest fix is to allow it.
Tested athlon-pc-linux-gnu, applied to tree-ssa.
2003-10-21 Jason Merrill <jason@redhat.com>
PR optimization/12661
* tree-dfa.c (get_expr_operands): Handle TRUTH_NOT_EXPR.
* tree-simple.c (is_gimple_rhs): Allow TRUTH_NOT_EXPR.
* gimplify.c (gimplify_expr) <TRUTH_NOT_EXPR>: Don't rewrite to an
EQ_EXPR.
*** gimplify.c.~1~ 2003-10-20 14:58:26.000000000 -0400
--- gimplify.c 2003-10-20 23:09:08.000000000 -0400
*************** gimplify_expr (tree *expr_p, tree *pre_p
*** 427,435 ****
break;
case TRUTH_NOT_EXPR:
! tmp = gimple_boolify (TREE_OPERAND (*expr_p, 0));
! *expr_p = build (EQ_EXPR, TREE_TYPE (*expr_p), tmp,
! boolean_false_node);
recalculate_side_effects (*expr_p);
break;
--- 427,436 ----
break;
case TRUTH_NOT_EXPR:
! TREE_OPERAND (*expr_p, 0)
! = gimple_boolify (TREE_OPERAND (*expr_p, 0));
! gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, post_p,
! is_gimple_val, fb_rvalue);
recalculate_side_effects (*expr_p);
break;
*** tree-dfa.c.~1~ 2003-10-20 14:50:40.000000000 -0400
--- tree-dfa.c 2003-10-20 23:09:08.000000000 -0400
*************** get_expr_operands (tree stmt, tree *expr
*** 513,518 ****
--- 513,519 ----
/* Unary expressions. */
if (class == '1'
+ || code == TRUTH_NOT_EXPR
|| code == BIT_FIELD_REF
|| code == CONSTRUCTOR)
{
*** tree-simple.c.~1~ 2003-10-13 16:42:49.000000000 -0400
--- tree-simple.c 2003-10-20 23:17:00.000000000 -0400
*************** is_gimple_rhs (tree t)
*** 195,200 ****
--- 195,201 ----
switch (code)
{
+ case TRUTH_NOT_EXPR:
case TRUTH_AND_EXPR:
case TRUTH_OR_EXPR:
case TRUTH_XOR_EXPR: