This replaces the three, gimple_stmt_iterator, bool (before/after)
and iterator update arguments by a ginsert_iterator argument
throughout the gimple_build API.

        * gimple-fold.h (..):...
        * gimple-fold.cc (...):...
---
 gcc/gimple-fold.cc | 122 ++++++++++++++-----------------------------
 gcc/gimple-fold.h  | 126 +++++++++++++++++----------------------------
 2 files changed, 86 insertions(+), 162 deletions(-)

diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc
index fdb9b419766..cf2486a37a7 100644
--- a/gcc/gimple-fold.cc
+++ b/gcc/gimple-fold.cc
@@ -1504,12 +1504,13 @@ gimple_fold_builtin_memset (gimple_stmt_iterator *gsi, 
tree c, tree len)
       if (TYPE_VOLATILE (ptype))
        etype = build_qualified_type (etype, TYPE_QUAL_VOLATILE);
 
+      auto gii = ginsert_iterator::before (*gsi);
       location_t loc = gimple_location (stmt);
       tree cval_tree;
       if (TREE_CODE (c) == INTEGER_CST)
        cval_tree = fold_convert (etype, c);
       else
-       cval_tree = gimple_convert (gsi, true, GSI_SAME_STMT, loc, etype, c);
+       cval_tree = gimple_convert (&gii, loc, etype, c);
 
       /* Build accesses at offset zero with a ref-all character type.  */
       tree off0
@@ -1528,11 +1529,10 @@ gimple_fold_builtin_memset (gimple_stmt_iterator *gsi, 
tree c, tree len)
          return true;
        }
 
-      gsi_insert_before (gsi, store, GSI_SAME_STMT);
+      gii.insert (store);
       tree ret = dest;
       if (!useless_type_conversion_p (TREE_TYPE (lhs), TREE_TYPE (dest)))
-       ret = gimple_convert (gsi, true, GSI_SAME_STMT, loc,
-                             TREE_TYPE (lhs), dest);
+       ret = gimple_convert (&gii, loc, TREE_TYPE (lhs), dest);
       gimple *asgn = gimple_build_assign (lhs, ret);
       gsi_replace (gsi, asgn, false);
 
@@ -11110,28 +11110,6 @@ gimple_build_valueize (tree op)
   return NULL_TREE;
 }
 
-/* Helper for gimple_build to perform the final insertion of stmts on SEQ.  */
-
-static inline void
-gimple_build_insert_seq (gimple_stmt_iterator *gsi,
-                        bool before, gsi_iterator_update update,
-                        gimple_seq seq)
-{
-  if (before)
-    {
-      if (gsi->bb)
-       gsi_insert_seq_before (gsi, seq, update);
-      else
-       gsi_insert_seq_before_without_update (gsi, seq, update);
-    }
-  else
-    {
-      if (gsi->bb)
-       gsi_insert_seq_after (gsi, seq, update);
-      else
-       gsi_insert_seq_after_without_update (gsi, seq, update);
-    }
-}
 
 /* Build the expression CODE OP0 of type TYPE with location LOC,
    simplifying it first if possible.  Returns the built
@@ -11144,8 +11122,7 @@ gimple_build_insert_seq (gimple_stmt_iterator *gsi,
    indicating they belong to the currently building sequence.  */
 
 tree
-gimple_build (gimple_stmt_iterator *gsi,
-             bool before, gsi_iterator_update update,
+gimple_build (ginsert_iterator *gsi,
              location_t loc, enum tree_code code, tree type, tree op0)
 {
   gimple_seq seq = NULL;
@@ -11165,7 +11142,7 @@ gimple_build (gimple_stmt_iterator *gsi,
       gimple_set_location (stmt, loc);
       gimple_seq_add_stmt_without_update (&seq, stmt);
     }
-  gimple_build_insert_seq (gsi, before, update, seq);
+  gsi->insert_seq (seq);
   return res;
 }
 
@@ -11175,8 +11152,7 @@ gimple_build (gimple_stmt_iterator *gsi,
    and UPDATE.  */
 
 tree
-gimple_build (gimple_stmt_iterator *gsi,
-             bool before, gsi_iterator_update update,
+gimple_build (ginsert_iterator *gsi,
              location_t loc, enum tree_code code, tree type,
              tree op0, tree op1)
 {
@@ -11191,7 +11167,7 @@ gimple_build (gimple_stmt_iterator *gsi,
       gimple_set_location (stmt, loc);
       gimple_seq_add_stmt_without_update (&seq, stmt);
     }
-  gimple_build_insert_seq (gsi, before, update, seq);
+  gsi->insert_seq (seq);
   return res;
 }
 
@@ -11201,8 +11177,7 @@ gimple_build (gimple_stmt_iterator *gsi,
    and UPDATE.  */
 
 tree
-gimple_build (gimple_stmt_iterator *gsi,
-             bool before, gsi_iterator_update update,
+gimple_build (ginsert_iterator *gsi,
              location_t loc, enum tree_code code, tree type,
              tree op0, tree op1, tree op2)
 {
@@ -11223,7 +11198,7 @@ gimple_build (gimple_stmt_iterator *gsi,
       gimple_set_location (stmt, loc);
       gimple_seq_add_stmt_without_update (&seq, stmt);
     }
-  gimple_build_insert_seq (gsi, before, update, seq);
+  gsi->insert_seq (seq);
   return res;
 }
 
@@ -11233,8 +11208,7 @@ gimple_build (gimple_stmt_iterator *gsi,
    and UPDATE.  */
 
 tree
-gimple_build (gimple_stmt_iterator *gsi,
-             bool before, gsi_iterator_update update,
+gimple_build (ginsert_iterator *gsi,
              location_t loc, combined_fn fn, tree type)
 {
   tree res = NULL_TREE;
@@ -11254,7 +11228,7 @@ gimple_build (gimple_stmt_iterator *gsi,
     }
   gimple_set_location (stmt, loc);
   gimple_seq_add_stmt_without_update (&seq, stmt);
-  gimple_build_insert_seq (gsi, before, update, seq);
+  gsi->insert_seq (seq);
   return res;
 }
 
@@ -11265,8 +11239,7 @@ gimple_build (gimple_stmt_iterator *gsi,
    statements at GSI honoring BEFORE and UPDATE.  */
 
 tree
-gimple_build (gimple_stmt_iterator *gsi,
-             bool before, gsi_iterator_update update,
+gimple_build (ginsert_iterator *gsi,
              location_t loc, combined_fn fn,
              tree type, tree arg0)
 {
@@ -11290,7 +11263,7 @@ gimple_build (gimple_stmt_iterator *gsi,
       gimple_set_location (stmt, loc);
       gimple_seq_add_stmt_without_update (&seq, stmt);
     }
-  gimple_build_insert_seq  (gsi, before, update, seq);
+  gsi->insert_seq (seq);
   return res;
 }
 
@@ -11301,8 +11274,7 @@ gimple_build (gimple_stmt_iterator *gsi,
    statements at GSI honoring BEFORE and UPDATE.  */
 
 tree
-gimple_build (gimple_stmt_iterator *gsi,
-             bool before, gsi_iterator_update update,
+gimple_build (ginsert_iterator *gsi,
              location_t loc, combined_fn fn,
              tree type, tree arg0, tree arg1)
 {
@@ -11327,7 +11299,7 @@ gimple_build (gimple_stmt_iterator *gsi,
       gimple_set_location (stmt, loc);
       gimple_seq_add_stmt_without_update (&seq, stmt);
     }
-  gimple_build_insert_seq (gsi, before, update, seq);
+  gsi->insert_seq (seq);
   return res;
 }
 
@@ -11338,8 +11310,7 @@ gimple_build (gimple_stmt_iterator *gsi,
    statements at GSI honoring BEFORE and UPDATE.  */
 
 tree
-gimple_build (gimple_stmt_iterator *gsi,
-             bool before, gsi_iterator_update update,
+gimple_build (ginsert_iterator *gsi,
              location_t loc, combined_fn fn,
              tree type, tree arg0, tree arg1, tree arg2)
 {
@@ -11365,7 +11336,7 @@ gimple_build (gimple_stmt_iterator *gsi,
       gimple_set_location (stmt, loc);
       gimple_seq_add_stmt_without_update (&seq, stmt);
     }
-  gimple_build_insert_seq (gsi, before, update, seq);
+  gsi->insert (seq);
   return res;
 }
 
@@ -11375,13 +11346,12 @@ gimple_build (gimple_stmt_iterator *gsi,
    statements at GSI honoring BEFORE and UPDATE.  */
 
 tree
-gimple_build (gimple_stmt_iterator *gsi,
-             bool before, gsi_iterator_update update,
+gimple_build (ginsert_iterator *gsi,
              location_t loc, code_helper code, tree type, tree op0)
 {
   if (code.is_tree_code ())
-    return gimple_build (gsi, before, update, loc, tree_code (code), type, 
op0);
-  return gimple_build (gsi, before, update, loc, combined_fn (code), type, 
op0);
+    return gimple_build (gsi, loc, tree_code (code), type, op0);
+  return gimple_build (gsi, loc, combined_fn (code), type, op0);
 }
 
 /* Build CODE (OP0, OP1) with a result of type TYPE (or no result if TYPE is
@@ -11390,15 +11360,12 @@ gimple_build (gimple_stmt_iterator *gsi,
    statements at GSI honoring BEFORE and UPDATE.  */
 
 tree
-gimple_build (gimple_stmt_iterator *gsi,
-             bool before, gsi_iterator_update update,
+gimple_build (ginsert_iterator *gsi,
              location_t loc, code_helper code, tree type, tree op0, tree op1)
 {
   if (code.is_tree_code ())
-    return gimple_build (gsi, before, update,
-                        loc, tree_code (code), type, op0, op1);
-  return gimple_build (gsi, before, update,
-                      loc, combined_fn (code), type, op0, op1);
+    return gimple_build (gsi, loc, tree_code (code), type, op0, op1);
+  return gimple_build (gsi, loc, combined_fn (code), type, op0, op1);
 }
 
 /* Build CODE (OP0, OP1, OP2) with a result of type TYPE (or no result if TYPE
@@ -11407,16 +11374,13 @@ gimple_build (gimple_stmt_iterator *gsi,
    statements at GSI honoring BEFORE and UPDATE.  */
 
 tree
-gimple_build (gimple_stmt_iterator *gsi,
-             bool before, gsi_iterator_update update,
+gimple_build (ginsert_iterator *gsi,
              location_t loc, code_helper code,
              tree type, tree op0, tree op1, tree op2)
 {
   if (code.is_tree_code ())
-    return gimple_build (gsi, before, update,
-                        loc, tree_code (code), type, op0, op1, op2);
-  return gimple_build (gsi, before, update,
-                      loc, combined_fn (code), type, op0, op1, op2);
+    return gimple_build (gsi, loc, tree_code (code), type, op0, op1, op2);
+  return gimple_build (gsi, loc, combined_fn (code), type, op0, op1, op2);
 }
 
 /* Build the conversion (TYPE) OP with a result of type TYPE
@@ -11426,13 +11390,12 @@ gimple_build (gimple_stmt_iterator *gsi,
    at GSI honoring BEFORE and UPDATE.  */
 
 tree
-gimple_convert (gimple_stmt_iterator *gsi,
-               bool before, gsi_iterator_update update,
+gimple_convert (ginsert_iterator *gsi,
                location_t loc, tree type, tree op)
 {
   if (useless_type_conversion_p (type, TREE_TYPE (op)))
     return op;
-  return gimple_build (gsi, before, update, loc, NOP_EXPR, type, op);
+  return gimple_build (gsi, loc, NOP_EXPR, type, op);
 }
 
 /* Build the conversion (ptrofftype) OP with a result of a type
@@ -11442,13 +11405,12 @@ gimple_convert (gimple_stmt_iterator *gsi,
    at GSI honoring BEFORE and UPDATE.  */
 
 tree
-gimple_convert_to_ptrofftype (gimple_stmt_iterator *gsi,
-                             bool before, gsi_iterator_update update,
+gimple_convert_to_ptrofftype (ginsert_iterator *gsi,
                              location_t loc, tree op)
 {
   if (ptrofftype_p (TREE_TYPE (op)))
     return op;
-  return gimple_convert (gsi, before, update, loc, sizetype, op);
+  return gimple_convert (gsi, loc, sizetype, op);
 }
 
 /* Build a vector of type TYPE in which each element has the value OP.
@@ -11456,14 +11418,12 @@ gimple_convert_to_ptrofftype (gimple_stmt_iterator 
*gsi,
    at GSI honoring BEFORE and UPDATE.  */
 
 tree
-gimple_build_vector_from_val (gimple_stmt_iterator *gsi,
-                             bool before, gsi_iterator_update update,
+gimple_build_vector_from_val (ginsert_iterator *gsi,
                              location_t loc, tree type, tree op)
 {
   if (!TYPE_VECTOR_SUBPARTS (type).is_constant ()
       && !CONSTANT_CLASS_P (op))
-    return gimple_build (gsi, before, update,
-                        loc, VEC_DUPLICATE_EXPR, type, op);
+    return gimple_build (gsi, loc, VEC_DUPLICATE_EXPR, type, op);
 
   tree res, vec = build_vector_from_val (type, op);
   if (is_gimple_val (vec))
@@ -11476,7 +11436,7 @@ gimple_build_vector_from_val (gimple_stmt_iterator *gsi,
   gimple *stmt = gimple_build_assign (res, vec);
   gimple_set_location (stmt, loc);
   gimple_seq_add_stmt_without_update (&seq, stmt);
-  gimple_build_insert_seq (gsi, before, update, seq);
+  gsi->insert_seq (seq);
   return res;
 }
 
@@ -11490,8 +11450,7 @@ gimple_build_vector_from_val (gimple_stmt_iterator *gsi,
    is known to be constant should use BUILDER->build () directly.  */
 
 tree
-gimple_build_vector (gimple_stmt_iterator *gsi,
-                    bool before, gsi_iterator_update update,
+gimple_build_vector (ginsert_iterator *gsi,
                     location_t loc, tree_vector_builder *builder)
 {
   gcc_assert (builder->nelts_per_pattern () <= 2);
@@ -11515,7 +11474,7 @@ gimple_build_vector (gimple_stmt_iterator *gsi,
        gimple *stmt = gimple_build_assign (res, build_constructor (type, v));
        gimple_set_location (stmt, loc);
        gimple_seq_add_stmt_without_update (&seq, stmt);
-       gimple_build_insert_seq (gsi, before, update, seq);
+       gsi->insert_seq (seq);
        return res;
       }
   return builder->build ();
@@ -11527,8 +11486,7 @@ gimple_build_vector (gimple_stmt_iterator *gsi,
    Return the tree node representing this size, it is of TREE_TYPE TYPE.  */
 
 tree
-gimple_build_round_up (gimple_stmt_iterator *gsi,
-                      bool before, gsi_iterator_update update,
+gimple_build_round_up (ginsert_iterator *gsi,
                       location_t loc, tree type,
                       tree old_size, unsigned HOST_WIDE_INT align)
 {
@@ -11536,12 +11494,10 @@ gimple_build_round_up (gimple_stmt_iterator *gsi,
   /* tree new_size = (old_size + tg_mask) & ~tg_mask;  */
   gcc_assert (INTEGRAL_TYPE_P (type));
   tree tree_mask = build_int_cst (type, tg_mask);
-  tree oversize = gimple_build (gsi, before, update,
-                               loc, PLUS_EXPR, type, old_size, tree_mask);
+  tree oversize = gimple_build (gsi, loc, PLUS_EXPR, type, old_size, 
tree_mask);
 
   tree mask = build_int_cst (type, -align);
-  return gimple_build (gsi, before, update,
-                      loc, BIT_AND_EXPR, type, oversize, mask);
+  return gimple_build (gsi, loc, BIT_AND_EXPR, type, oversize, mask);
 }
 
 /* Return true if the result of assignment STMT is known to be non-negative.
diff --git a/gcc/gimple-fold.h b/gcc/gimple-fold.h
index f1853560779..f4feef3cb16 100644
--- a/gcc/gimple-fold.h
+++ b/gcc/gimple-fold.h
@@ -71,14 +71,11 @@ extern void gsi_replace_with_seq_vops (gimple_stmt_iterator 
*, gimple_seq);
 /* gimple_build, functionally matching fold_buildN, outputs stmts
    int the provided sequence, matching and simplifying them on-the-fly.
    Supposed to replace force_gimple_operand (fold_buildN (...), ...).  */
-extern tree gimple_build (gimple_stmt_iterator *, bool,
-                         enum gsi_iterator_update,
+extern tree gimple_build (ginsert_iterator *,
                          location_t, enum tree_code, tree, tree);
-extern tree gimple_build (gimple_stmt_iterator *, bool,
-                         enum gsi_iterator_update,
+extern tree gimple_build (ginsert_iterator *,
                          location_t, enum tree_code, tree, tree, tree);
-extern tree gimple_build (gimple_stmt_iterator *, bool,
-                         enum gsi_iterator_update,
+extern tree gimple_build (ginsert_iterator *,
                          location_t, enum tree_code, tree, tree, tree, tree);
 template<class ...Args>
 inline tree
@@ -87,9 +84,8 @@ gimple_build (gimple_seq *seq, location_t loc,
 {
   static_assert (sizeof...(ops) > 0 && sizeof...(ops) <= 3,
                 "Number of operands must be from one to three");
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_build (&gsi, false, GSI_CONTINUE_LINKING,
-                      loc, code, type, ops...);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_build (&gsi, loc, code, type, ops...);
 }
 template<class ...Args>
 inline tree
@@ -97,22 +93,17 @@ gimple_build (gimple_seq *seq, enum tree_code code, tree 
type, Args ...ops)
 {
   static_assert (sizeof...(ops) > 0 && sizeof...(ops) <= 3,
                 "Number of operands must be from one to three");
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_build (&gsi, false, GSI_CONTINUE_LINKING,
-                      UNKNOWN_LOCATION, code, type, ops...);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_build (&gsi, UNKNOWN_LOCATION, code, type, ops...);
 }
 
-extern tree gimple_build (gimple_stmt_iterator *, bool,
-                         enum gsi_iterator_update,
+extern tree gimple_build (ginsert_iterator *,
                          location_t, combined_fn, tree);
-extern tree gimple_build (gimple_stmt_iterator *, bool,
-                         enum gsi_iterator_update,
+extern tree gimple_build (ginsert_iterator *
                          location_t, combined_fn, tree, tree);
-extern tree gimple_build (gimple_stmt_iterator *, bool,
-                         enum gsi_iterator_update,
+extern tree gimple_build (ginsert_iterator *,
                          location_t, combined_fn, tree, tree, tree);
-extern tree gimple_build (gimple_stmt_iterator *, bool,
-                         enum gsi_iterator_update,
+extern tree gimple_build (ginsert_iterator *,
                          location_t, combined_fn, tree, tree, tree, tree);
 template<class ...Args>
 inline tree
@@ -121,9 +112,8 @@ gimple_build (gimple_seq *seq, location_t loc,
 {
   static_assert (sizeof...(args) < 4,
                 "Number of arguments must be less than four");
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_build (&gsi, false, GSI_CONTINUE_LINKING,
-                      loc, fn, type, args...);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_build (&gsi, loc, fn, type, args...);
 }
 template<class ...Args>
 inline tree
@@ -131,19 +121,15 @@ gimple_build (gimple_seq *seq, combined_fn fn, tree type, 
Args ...args)
 {
   static_assert (sizeof...(args) < 4,
                 "Number of arguments must be less than four");
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_build (&gsi, false, GSI_CONTINUE_LINKING,
-                      UNKNOWN_LOCATION, fn, type, args...);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_build (&gsi, UNKNOWN_LOCATION, fn, type, args...);
 }
 
-extern tree gimple_build (gimple_stmt_iterator *, bool,
-                         enum gsi_iterator_update,
+extern tree gimple_build (ginsert_iterator *,
                          location_t, code_helper, tree, tree);
-extern tree gimple_build (gimple_stmt_iterator *, bool,
-                         enum gsi_iterator_update,
+extern tree gimple_build (ginsert_iterator *,
                          location_t, code_helper, tree, tree, tree);
-extern tree gimple_build (gimple_stmt_iterator *, bool,
-                         enum gsi_iterator_update,
+extern tree gimple_build (ginsert_iterator *,
                          location_t, code_helper, tree, tree, tree, tree);
 
 template<class ...Args>
@@ -153,9 +139,8 @@ gimple_build (gimple_seq *seq, location_t loc,
 {
   static_assert (sizeof...(ops) < 4,
                 "Number of operands must be less than four");
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_build (&gsi, false, GSI_CONTINUE_LINKING,
-                      loc, code, type, ops...);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_build (&gsi, loc, code, type, ops...);
 }
 template<class ...Args>
 inline tree
@@ -164,104 +149,87 @@ gimple_build (gimple_seq *seq,
 {
   static_assert (sizeof...(ops) < 4,
                 "Number of operands must be less than four");
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_build (&gsi, false, GSI_CONTINUE_LINKING,
-                      UNKNOWN_LOCATION, code, type, ops...);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_build (&gsi, UNKNOWN_LOCATION, code, type, ops...);
 }
 
-extern tree gimple_convert (gimple_stmt_iterator *, bool,
-                           enum gsi_iterator_update,
-                           location_t, tree, tree);
+extern tree gimple_convert (ginsert_iterator *, location_t, tree, tree);
 inline tree
 gimple_convert (gimple_seq *seq, location_t loc, tree type, tree op)
 {
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_convert (&gsi, false, GSI_CONTINUE_LINKING, loc, type, op);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_convert (&gsi, loc, type, op);
 }
 inline tree
 gimple_convert (gimple_seq *seq, tree type, tree op)
 {
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_convert (&gsi, false, GSI_CONTINUE_LINKING,
-                        UNKNOWN_LOCATION, type, op);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_convert (&gsi, UNKNOWN_LOCATION, type, op);
 }
 
-extern tree gimple_convert_to_ptrofftype (gimple_stmt_iterator *, bool,
-                                         enum gsi_iterator_update,
-                                         location_t, tree);
+extern tree gimple_convert_to_ptrofftype (ginsert_iterator *, location_t, 
tree);
 inline tree
 gimple_convert_to_ptrofftype (gimple_seq *seq, location_t loc, tree op)
 {
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_convert_to_ptrofftype (&gsi, false, GSI_CONTINUE_LINKING,
-                                      loc, op);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_convert_to_ptrofftype (&gsi, loc, op);
 }
 inline tree
 gimple_convert_to_ptrofftype (gimple_seq *seq, tree op)
 {
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_convert_to_ptrofftype (&gsi, false, GSI_CONTINUE_LINKING,
-                                      UNKNOWN_LOCATION, op);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_convert_to_ptrofftype (&gsi, UNKNOWN_LOCATION, op);
 }
 
-extern tree gimple_build_vector_from_val (gimple_stmt_iterator *, bool,
-                                         enum gsi_iterator_update,
+extern tree gimple_build_vector_from_val (ginsert_iterator *,
                                          location_t, tree, tree);
 inline tree
 gimple_build_vector_from_val (gimple_seq *seq, location_t loc,
                              tree type, tree op)
 {
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_build_vector_from_val (&gsi, false, GSI_CONTINUE_LINKING,
-                                      loc, type, op);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_build_vector_from_val (&gsi, loc, type, op);
 }
 inline tree
 gimple_build_vector_from_val (gimple_seq *seq, tree type, tree op)
 {
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_build_vector_from_val (&gsi, false, GSI_CONTINUE_LINKING,
-                                      UNKNOWN_LOCATION, type, op);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_build_vector_from_val (&gsi, UNKNOWN_LOCATION, type, op);
 }
 
 class tree_vector_builder;
-extern tree gimple_build_vector (gimple_stmt_iterator *, bool,
-                                enum gsi_iterator_update,
+extern tree gimple_build_vector (ginsert_iterator *,
                                 location_t, tree_vector_builder *);
 inline tree
 gimple_build_vector (gimple_seq *seq, location_t loc,
                     tree_vector_builder *builder)
 {
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_build_vector (&gsi, false, GSI_CONTINUE_LINKING,
-                             loc, builder);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_build_vector (&gsi, loc, builder);
 }
 inline tree
 gimple_build_vector (gimple_seq *seq, tree_vector_builder *builder)
 {
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_build_vector (&gsi, false, GSI_CONTINUE_LINKING,
-                             UNKNOWN_LOCATION, builder);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_build_vector (&gsi, UNKNOWN_LOCATION, builder);
 }
 
-extern tree gimple_build_round_up (gimple_stmt_iterator *, bool,
-                                  enum gsi_iterator_update,
+extern tree gimple_build_round_up (ginsert_iterator *,
                                   location_t, tree, tree,
                                   unsigned HOST_WIDE_INT);
 inline tree
 gimple_build_round_up (gimple_seq *seq, location_t loc,
                       tree type, tree old_size, unsigned HOST_WIDE_INT align)
 {
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_build_round_up (&gsi, false, GSI_CONTINUE_LINKING,
-                               loc, type, old_size, align);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_build_round_up (&gsi, loc, type, old_size, align);
 }
 inline tree
 gimple_build_round_up (gimple_seq *seq, tree type, tree old_size,
                       unsigned HOST_WIDE_INT align)
 {
-  gimple_stmt_iterator gsi = gsi_last (*seq);
-  return gimple_build_round_up (&gsi, false, GSI_CONTINUE_LINKING,
-                               UNKNOWN_LOCATION, type, old_size, align);
+  auto gsi = ginsert_iterator::append (*seq);
+  return gimple_build_round_up (&gsi, UNKNOWN_LOCATION, type, old_size, align);
 }
 
 extern bool gimple_stmt_nonnegative_p (gimple *, int = 0);
-- 
2.51.0

Reply via email to