This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]