gcc/ChangeLog.gimple-classes:
        * gimple-low.c (lower_builtin_setjmp): Strengthen local "stmt"
        from gimple to gcall *, via a checked cast.
        (lower_builtin_posix_memalign): Likewise for local "call".
        Strengthen local "cond" from gimple to gcond *.
        Split local gimple "stmt" into new locals "assign_stmt1",
        "call_stmt", and "assign_stmt2", of appropriate types.
---
 gcc/ChangeLog.gimple-classes |  9 +++++++++
 gcc/gimple-low.c             | 36 ++++++++++++++++++++----------------
 2 files changed, 29 insertions(+), 16 deletions(-)

diff --git a/gcc/ChangeLog.gimple-classes b/gcc/ChangeLog.gimple-classes
index a47c471..5b408e3 100644
--- a/gcc/ChangeLog.gimple-classes
+++ b/gcc/ChangeLog.gimple-classes
@@ -1,3 +1,12 @@
+2014-10-31  David Malcolm  <dmalc...@redhat.com>
+
+       * gimple-low.c (lower_builtin_setjmp): Strengthen local "stmt"
+       from gimple to gcall *, via a checked cast.
+       (lower_builtin_posix_memalign): Likewise for local "call".
+       Strengthen local "cond" from gimple to gcond *.
+       Split local gimple "stmt" into new locals "assign_stmt1",
+       "call_stmt", and "assign_stmt2", of appropriate types.
+
 2014-10-30  David Malcolm  <dmalc...@redhat.com>
 
        * gimple-fold.c (replace_call_with_call_and_fold): Strengthen
diff --git a/gcc/gimple-low.c b/gcc/gimple-low.c
index a30fae5..f817e25 100644
--- a/gcc/gimple-low.c
+++ b/gcc/gimple-low.c
@@ -738,7 +738,7 @@ lower_gimple_return (gimple_stmt_iterator *gsi, struct 
lower_data *data)
 static void
 lower_builtin_setjmp (gimple_stmt_iterator *gsi)
 {
-  gimple stmt = gsi_stmt (*gsi);
+  gcall *stmt = as_a <gcall *> (gsi_stmt (*gsi));
   location_t loc = gimple_location (stmt);
   tree cont_label = create_artificial_label (loc);
   tree next_label = create_artificial_label (loc);
@@ -823,7 +823,8 @@ lower_builtin_setjmp (gimple_stmt_iterator *gsi)
 static void
 lower_builtin_posix_memalign (gimple_stmt_iterator *gsi)
 {
-  gimple stmt, call = gsi_stmt (*gsi);
+  gassign *assign_stmt1;
+  gcall *call = as_a <gcall *> (gsi_stmt (*gsi));
   tree pptr = gimple_call_arg (call, 0);
   tree align = gimple_call_arg (call, 1);
   tree res = gimple_call_lhs (call);
@@ -833,12 +834,13 @@ lower_builtin_posix_memalign (gimple_stmt_iterator *gsi)
       tree tem = create_tmp_var (ptr_type_node, NULL);
       TREE_ADDRESSABLE (tem) = 1;
       gimple_call_set_arg (call, 0, build_fold_addr_expr (tem));
-      stmt = gimple_build_assign (ptr, tem);
+      assign_stmt1 = gimple_build_assign (ptr, tem);
     }
   else
-    stmt = gimple_build_assign (ptr,
-                               fold_build2 (MEM_REF, ptr_type_node, pptr,
-                                            build_int_cst (ptr_type_node, 0)));
+    assign_stmt1 =
+      gimple_build_assign (ptr,
+                          fold_build2 (MEM_REF, ptr_type_node, pptr,
+                                       build_int_cst (ptr_type_node, 0)));
   if (res == NULL_TREE)
     {
       res = create_tmp_reg (integer_type_node, NULL);
@@ -846,19 +848,21 @@ lower_builtin_posix_memalign (gimple_stmt_iterator *gsi)
     }
   tree align_label = create_artificial_label (UNKNOWN_LOCATION);
   tree noalign_label = create_artificial_label (UNKNOWN_LOCATION);
-  gimple cond = gimple_build_cond (EQ_EXPR, res, integer_zero_node,
+  gcond *cond = gimple_build_cond (EQ_EXPR, res, integer_zero_node,
                                   align_label, noalign_label);
   gsi_insert_after (gsi, cond, GSI_NEW_STMT);
   gsi_insert_after (gsi, gimple_build_label (align_label), GSI_NEW_STMT);
-  gsi_insert_after (gsi, stmt, GSI_NEW_STMT);
-  stmt = gimple_build_call (builtin_decl_implicit (BUILT_IN_ASSUME_ALIGNED),
-                           2, ptr, align);
-  gimple_call_set_lhs (stmt, ptr);
-  gsi_insert_after (gsi, stmt, GSI_NEW_STMT);
-  stmt = gimple_build_assign (fold_build2 (MEM_REF, ptr_type_node, pptr,
-                                          build_int_cst (ptr_type_node, 0)),
-                             ptr);
-  gsi_insert_after (gsi, stmt, GSI_NEW_STMT);
+  gsi_insert_after (gsi, assign_stmt1, GSI_NEW_STMT);
+  gcall *call_stmt =
+    gimple_build_call (builtin_decl_implicit (BUILT_IN_ASSUME_ALIGNED),
+                      2, ptr, align);
+  gimple_call_set_lhs (call_stmt, ptr);
+  gsi_insert_after (gsi, call_stmt, GSI_NEW_STMT);
+  gassign *assign_stmt2 =
+    gimple_build_assign (fold_build2 (MEM_REF, ptr_type_node, pptr,
+                                     build_int_cst (ptr_type_node, 0)),
+                        ptr);
+  gsi_insert_after (gsi, assign_stmt2, GSI_NEW_STMT);
   gsi_insert_after (gsi, gimple_build_label (noalign_label), GSI_NEW_STMT);
 }
 
-- 
1.7.11.7

Reply via email to