summaryrefslogtreecommitdiff
path: root/gcc/gimple-fold.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/gimple-fold.h')
-rw-r--r--gcc/gimple-fold.h34
1 files changed, 23 insertions, 11 deletions
diff --git a/gcc/gimple-fold.h b/gcc/gimple-fold.h
index 850f917bbc1..520fde861e3 100644
--- a/gcc/gimple-fold.h
+++ b/gcc/gimple-fold.h
@@ -38,12 +38,8 @@ extern tree maybe_fold_and_comparisons (tree, enum tree_code, tree, tree,
extern tree maybe_fold_or_comparisons (tree, enum tree_code, tree, tree,
enum tree_code, tree, tree,
basic_block = nullptr);
-extern bool clear_padding_type_may_have_padding_p (tree);
-extern void clear_type_padding_in_mask (tree, unsigned char *);
extern bool optimize_atomic_compare_exchange_p (gimple *);
extern void fold_builtin_atomic_compare_exchange (gimple_stmt_iterator *);
-extern bool arith_overflowed_p (enum tree_code, const_tree, const_tree,
- const_tree);
extern tree no_follow_ssa_edges (tree);
extern tree follow_single_use_edges (tree);
extern tree follow_all_ssa_edges (tree);
@@ -71,19 +67,35 @@ extern tree tree_vec_extract (gimple_stmt_iterator *, tree, tree, tree, tree);
/* 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_seq *, location_t,
- enum tree_code, tree, tree);
-extern tree gimple_build (gimple_seq *, location_t,
- enum tree_code, tree, tree, tree);
-extern tree gimple_build (gimple_seq *, location_t,
- enum tree_code, tree, tree, tree, tree);
+extern tree gimple_build (gimple_stmt_iterator *, bool,
+ enum gsi_iterator_update,
+ location_t, enum tree_code, tree, tree);
+extern tree gimple_build (gimple_stmt_iterator *, bool,
+ enum gsi_iterator_update,
+ location_t, enum tree_code, tree, tree, tree);
+extern tree gimple_build (gimple_stmt_iterator *, bool,
+ enum gsi_iterator_update,
+ location_t, enum tree_code, tree, tree, tree, tree);
+template<class ...Args>
+inline tree
+gimple_build (gimple_seq *seq, location_t loc,
+ 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,
+ loc, code, type, ops...);
+}
template<class ...Args>
inline tree
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");
- return gimple_build (seq, UNKNOWN_LOCATION, code, type, ops...);
+ gimple_stmt_iterator gsi = gsi_last (*seq);
+ return gimple_build (&gsi, false, GSI_CONTINUE_LINKING,
+ UNKNOWN_LOCATION, code, type, ops...);
}
extern tree gimple_build (gimple_seq *, location_t, combined_fn, tree);