[gimple-classes, committed 33/44] Use gassign within gimple_expr_type

David Malcolm dmalcolm@redhat.com
Thu Nov 6 14:37:00 GMT 2014


gcc/ChangeLog.gimple-classes:
	* gimple.h (gimple_expr_type): Split out if clause handling
	GIMPLE_ASSIGN and GIMPLE_CALL with an inner if GIMPLE_CALL
	into a pair of if clauses, first for GIMPLE_CALL, then for
	GIMPLE_ASSIGN.  Replace them with dyn_casts, introducing local
	"assign_stmt", using it in place of "stmt" for typesafety.
	Eliminate local "type" in favor of directly returning.
---
 gcc/ChangeLog.gimple-classes |  9 +++++++++
 gcc/gimple.h                 | 46 +++++++++++++++++++-------------------------
 2 files changed, 29 insertions(+), 26 deletions(-)

diff --git a/gcc/ChangeLog.gimple-classes b/gcc/ChangeLog.gimple-classes
index 776073d..d207213 100644
--- a/gcc/ChangeLog.gimple-classes
+++ b/gcc/ChangeLog.gimple-classes
@@ -1,5 +1,14 @@
 2014-11-04  David Malcolm  <dmalcolm@redhat.com>
 
+	* gimple.h (gimple_expr_type): Split out if clause handling
+	GIMPLE_ASSIGN and GIMPLE_CALL with an inner if GIMPLE_CALL
+	into a pair of if clauses, first for GIMPLE_CALL, then for
+	GIMPLE_ASSIGN.  Replace them with dyn_casts, introducing local
+	"assign_stmt", using it in place of "stmt" for typesafety.
+	Eliminate local "type" in favor of directly returning.
+
+2014-11-04  David Malcolm  <dmalcolm@redhat.com>
+
 	* asan.c (get_mem_ref_of_assignment): Weaken param "assignment"
 	from const gassign * to gassign *.
 	* gimple.h (gimple_assign_single_p): Eliminate const_gimple variant,
diff --git a/gcc/gimple.h b/gcc/gimple.h
index b4782e8..a42ec11 100644
--- a/gcc/gimple.h
+++ b/gcc/gimple.h
@@ -5521,35 +5521,29 @@ gimple_expr_type (const_gimple stmt)
 {
   enum gimple_code code = gimple_code (stmt);
 
-  if (code == GIMPLE_ASSIGN || code == GIMPLE_CALL)
+  /* In general we want to pass out a type that can be substituted
+     for both the RHS and the LHS types if there is a possibly
+     useless conversion involved.  That means returning the
+     original RHS type as far as we can reconstruct it.  */
+  if (const gcall *call_stmt = dyn_cast <const gcall *> (stmt))
     {
-      tree type;
-      /* In general we want to pass out a type that can be substituted
-         for both the RHS and the LHS types if there is a possibly
-	 useless conversion involved.  That means returning the
-	 original RHS type as far as we can reconstruct it.  */
-      if (code == GIMPLE_CALL)
+      if (gimple_call_internal_p (call_stmt)
+	  && gimple_call_internal_fn (call_stmt) == IFN_MASK_STORE)
+	return TREE_TYPE (gimple_call_arg (call_stmt, 3));
+      else
+	return gimple_call_return_type (call_stmt);
+    }
+  else if (const gassign *assign_stmt = dyn_cast <const gassign *> (stmt))
+    {
+      switch (gimple_assign_rhs_code (assign_stmt))
 	{
-	  const gcall *call_stmt = as_a <const gcall *> (stmt);
-	  if (gimple_call_internal_p (call_stmt)
-	      && gimple_call_internal_fn (call_stmt) == IFN_MASK_STORE)
-	    type = TREE_TYPE (gimple_call_arg (call_stmt, 3));
-	  else
-	    type = gimple_call_return_type (call_stmt);
+	case POINTER_PLUS_EXPR:
+	  return TREE_TYPE (gimple_assign_rhs1 (assign_stmt));
+
+	default:
+	  /* As fallback use the type of the LHS.  */
+	  return TREE_TYPE (gimple_get_lhs (assign_stmt));
 	}
-      else
-	switch (gimple_assign_rhs_code (stmt))
-	  {
-	  case POINTER_PLUS_EXPR:
-	    type = TREE_TYPE (gimple_assign_rhs1 (stmt));
-	    break;
-
-	  default:
-	    /* As fallback use the type of the LHS.  */
-	    type = TREE_TYPE (gimple_get_lhs (stmt));
-	    break;
-	  }
-      return type;
     }
   else if (code == GIMPLE_COND)
     return boolean_type_node;
-- 
1.7.11.7



More information about the Gcc-patches mailing list