diff mbox

[gimple-classes,committed,16/44] tree-object-size.c: Use gassign

Message ID 1415284340-14186-17-git-send-email-dmalcolm@redhat.com
State New
Headers show

Commit Message

David Malcolm Nov. 6, 2014, 2:31 p.m. UTC
gcc/ChangeLog.gimple-classes:
	* tree-object-size.c (plus_stmt_object_size): Strengthen param
	"stmt" from gimple to gassign *.
	(cond_expr_object_size): Likewise.
	(collect_object_sizes_for): Within case GIMPLE_ASSIGN, introduce
	local gassign * "assign_stmt" and use in place of "stmt" for
	typesafety.
	(check_for_plus_in_loops_1): Likewise.
	(check_for_plus_in_loops): Replace is_gimple_assign with a
	dyn_cast, strengthening local "stmt" from gimple to gassign *.
---
 gcc/ChangeLog.gimple-classes | 12 ++++++++++++
 gcc/tree-object-size.c       | 45 +++++++++++++++++++++++---------------------
 2 files changed, 36 insertions(+), 21 deletions(-)
diff mbox

Patch

diff --git a/gcc/ChangeLog.gimple-classes b/gcc/ChangeLog.gimple-classes
index 5133c46..b4adc82 100644
--- a/gcc/ChangeLog.gimple-classes
+++ b/gcc/ChangeLog.gimple-classes
@@ -1,5 +1,17 @@ 
 2014-11-03  David Malcolm  <dmalcolm@redhat.com>
 
+	* tree-object-size.c (plus_stmt_object_size): Strengthen param
+	"stmt" from gimple to gassign *.
+	(cond_expr_object_size): Likewise.
+	(collect_object_sizes_for): Within case GIMPLE_ASSIGN, introduce
+	local gassign * "assign_stmt" and use in place of "stmt" for
+	typesafety.
+	(check_for_plus_in_loops_1): Likewise.
+	(check_for_plus_in_loops): Replace is_gimple_assign with a
+	dyn_cast, strengthening local "stmt" from gimple to gassign *.
+
+2014-11-03  David Malcolm  <dmalcolm@redhat.com>
+
 	* graphite-sese-to-poly.c (rewrite_cross_bb_scalar_deps): Add
 	checked cast.
 	(is_reduction_operation_p): Strengthen param from gimple to
diff --git a/gcc/tree-object-size.c b/gcc/tree-object-size.c
index 20b9956..fb599a1 100644
--- a/gcc/tree-object-size.c
+++ b/gcc/tree-object-size.c
@@ -75,8 +75,8 @@  static void collect_object_sizes_for (struct object_size_info *, tree);
 static void expr_object_size (struct object_size_info *, tree, tree);
 static bool merge_object_sizes (struct object_size_info *, tree, tree,
 				unsigned HOST_WIDE_INT);
-static bool plus_stmt_object_size (struct object_size_info *, tree, gimple);
-static bool cond_expr_object_size (struct object_size_info *, tree, gimple);
+static bool plus_stmt_object_size (struct object_size_info *, tree, gassign *);
+static bool cond_expr_object_size (struct object_size_info *, tree, gassign *);
 static void init_offset_limit (void);
 static void check_for_plus_in_loops (struct object_size_info *, tree);
 static void check_for_plus_in_loops_1 (struct object_size_info *, tree,
@@ -786,7 +786,7 @@  merge_object_sizes (struct object_size_info *osi, tree dest, tree orig,
    need reexamination  later.  */
 
 static bool
-plus_stmt_object_size (struct object_size_info *osi, tree var, gimple stmt)
+plus_stmt_object_size (struct object_size_info *osi, tree var, gassign *stmt)
 {
   int object_size_type = osi->object_size_type;
   unsigned int varno = SSA_NAME_VERSION (var);
@@ -858,7 +858,7 @@  plus_stmt_object_size (struct object_size_info *osi, tree var, gimple stmt)
    later.  */
 
 static bool
-cond_expr_object_size (struct object_size_info *osi, tree var, gimple stmt)
+cond_expr_object_size (struct object_size_info *osi, tree var, gassign *stmt)
 {
   tree then_, else_;
   int object_size_type = osi->object_size_type;
@@ -953,15 +953,16 @@  collect_object_sizes_for (struct object_size_info *osi, tree var)
     {
     case GIMPLE_ASSIGN:
       {
-	tree rhs = gimple_assign_rhs1 (stmt);
-        if (gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR
-	    || (gimple_assign_rhs_code (stmt) == ADDR_EXPR
+	gassign *assign_stmt = as_a <gassign *> (stmt);
+	tree rhs = gimple_assign_rhs1 (assign_stmt);
+        if (gimple_assign_rhs_code (assign_stmt) == POINTER_PLUS_EXPR
+	    || (gimple_assign_rhs_code (assign_stmt) == ADDR_EXPR
 		&& TREE_CODE (TREE_OPERAND (rhs, 0)) == MEM_REF))
-          reexamine = plus_stmt_object_size (osi, var, stmt);
-	else if (gimple_assign_rhs_code (stmt) == COND_EXPR)
-	  reexamine = cond_expr_object_size (osi, var, stmt);
-        else if (gimple_assign_single_p (stmt)
-                 || gimple_assign_unary_nop_p (stmt))
+          reexamine = plus_stmt_object_size (osi, var, assign_stmt);
+	else if (gimple_assign_rhs_code (assign_stmt) == COND_EXPR)
+	  reexamine = cond_expr_object_size (osi, var, assign_stmt);
+        else if (gimple_assign_single_p (assign_stmt)
+                 || gimple_assign_unary_nop_p (assign_stmt))
           {
             if (TREE_CODE (rhs) == SSA_NAME
                 && POINTER_TYPE_P (TREE_TYPE (rhs)))
@@ -1088,18 +1089,19 @@  check_for_plus_in_loops_1 (struct object_size_info *osi, tree var,
 
     case GIMPLE_ASSIGN:
       {
-        if ((gimple_assign_single_p (stmt)
-             || gimple_assign_unary_nop_p (stmt))
-            && TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME)
+	gassign *assign_stmt = as_a <gassign *> (stmt);
+        if ((gimple_assign_single_p (assign_stmt)
+             || gimple_assign_unary_nop_p (assign_stmt))
+            && TREE_CODE (gimple_assign_rhs1 (assign_stmt)) == SSA_NAME)
           {
-            tree rhs = gimple_assign_rhs1 (stmt);
+            tree rhs = gimple_assign_rhs1 (assign_stmt);
 
             check_for_plus_in_loops_1 (osi, rhs, depth);
           }
-        else if (gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR)
+        else if (gimple_assign_rhs_code (assign_stmt) == POINTER_PLUS_EXPR)
           {
-            tree basevar = gimple_assign_rhs1 (stmt);
-            tree cst = gimple_assign_rhs2 (stmt);
+            tree basevar = gimple_assign_rhs1 (assign_stmt);
+            tree cst = gimple_assign_rhs2 (assign_stmt);
 
             gcc_assert (TREE_CODE (cst) == INTEGER_CST);
 
@@ -1155,14 +1157,15 @@  check_for_plus_in_loops_1 (struct object_size_info *osi, tree var,
 static void
 check_for_plus_in_loops (struct object_size_info *osi, tree var)
 {
-  gimple stmt = SSA_NAME_DEF_STMT (var);
+  gassign *stmt;
 
   /* NOTE: In the pre-tuples code, we handled a CALL_EXPR here,
      and looked for a POINTER_PLUS_EXPR in the pass-through
      argument, if any.  In GIMPLE, however, such an expression
      is not a valid call operand.  */
+  stmt = dyn_cast <gassign *> (SSA_NAME_DEF_STMT (var));
 
-  if (is_gimple_assign (stmt)
+  if (stmt
       && gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR)
     {
       tree basevar = gimple_assign_rhs1 (stmt);