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]

[PATCH][16/n] Merge from match-and-simplify, simplify_mult pattern


Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2014-11-10  Richard Biener  <rguenther@suse.de>

	* match.pd: Implement pattern from simplify_mult.
	* tree-ssa-forwprop.c (simplify_mult): Remove.
	(pass_forwprop::execute): Do not call simplify_mult.

Index: trunk/gcc/match.pd
===================================================================
*** trunk.orig/gcc/match.pd	2014-11-10 12:12:11.603244811 +0100
--- trunk/gcc/match.pd	2014-11-10 12:13:09.013242299 +0100
*************** along with GCC; see the file COPYING3.
*** 443,445 ****
--- 443,453 ----
         && operand_equal_p (@1, build_low_bits_mask (TREE_TYPE (@1),
  						    TYPE_PRECISION (type)), 0))
     (convert @0)))
+ 
+ 
+ /* (X /[ex] A) * A -> X.  */
+ (simplify
+   (mult (convert? (exact_div @0 @1)) @1)
+   /* Look through a sign-changing conversion.  */
+   (if (TYPE_PRECISION (TREE_TYPE (@0)) == TYPE_PRECISION (type))
+    (convert @0)))
Index: trunk/gcc/tree-ssa-forwprop.c
===================================================================
*** trunk.orig/gcc/tree-ssa-forwprop.c	2014-11-10 12:12:11.636244810 +0100
--- trunk/gcc/tree-ssa-forwprop.c	2014-11-10 12:14:33.640238595 +0100
*************** simplify_vector_constructor (gimple_stmt
*** 2588,2641 ****
    return true;
  }
  
- /* Simplify multiplications.
-    Return true if a transformation applied, otherwise return false.  */
- 
- static bool
- simplify_mult (gimple_stmt_iterator *gsi)
- {
-   gimple stmt = gsi_stmt (*gsi);
-   tree arg1 = gimple_assign_rhs1 (stmt);
-   tree arg2 = gimple_assign_rhs2 (stmt);
- 
-   if (TREE_CODE (arg1) != SSA_NAME)
-     return false;
- 
-   gimple def_stmt = SSA_NAME_DEF_STMT (arg1);
-   if (!is_gimple_assign (def_stmt))
-     return false;
- 
-   /* Look through a sign-changing conversion.  */
-   if (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (def_stmt)))
-     {
-       if (TYPE_PRECISION (TREE_TYPE (gimple_assign_lhs (def_stmt)))
- 	  != TYPE_PRECISION (TREE_TYPE (gimple_assign_rhs1 (def_stmt)))
- 	  || TREE_CODE (gimple_assign_rhs1 (def_stmt)) != SSA_NAME)
- 	return false;
-       def_stmt = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (def_stmt));
-       if (!is_gimple_assign (def_stmt))
- 	return false;
-     }
- 
-   if (gimple_assign_rhs_code (def_stmt) == EXACT_DIV_EXPR)
-     {
-       if (operand_equal_p (gimple_assign_rhs2 (def_stmt), arg2, 0))
- 	{
- 	  tree res = gimple_assign_rhs1 (def_stmt);
- 	  if (useless_type_conversion_p (TREE_TYPE (arg1), TREE_TYPE (res)))
- 	    gimple_assign_set_rhs_with_ops (gsi, TREE_CODE (res), res,
- 					    NULL_TREE);
- 	  else
- 	    gimple_assign_set_rhs_with_ops (gsi, NOP_EXPR, res, NULL_TREE);
- 	  gcc_assert (gsi_stmt (*gsi) == stmt);
- 	  update_stmt (stmt);
- 	  return true;
- 	}
-     }
- 
-   return false;
- }
- 
  
  /* Primitive "lattice" function for gimple_simplify.  */
  
--- 2588,2593 ----
*************** pass_forwprop::execute (function *fun)
*** 2853,2865 ****
  			  || code == BIT_XOR_EXPR)
  			 && simplify_rotate (&gsi))
  		  changed = true;
- 		else if (code == MULT_EXPR)
- 		  {
- 		    changed = simplify_mult (&gsi);
- 		    if (changed
- 			&& maybe_clean_or_replace_eh_stmt (stmt, stmt))
- 		      bitmap_set_bit (to_purge, bb->index);
- 		  }
  		else if (code == PLUS_EXPR
  			 || code == MINUS_EXPR)
  		  {
--- 2805,2810 ----


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