aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-fold.h
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2022-05-11 14:53:37 +0200
committerRichard Biener <rguenther@suse.de>2022-05-11 15:44:31 +0200
commit684c97dd084b7a535deb400ab8b26b914d011c5c (patch)
tree8223bdcb6e8b0c9c63ac6dbf76e428903f377d7e /gcc/gimple-fold.h
parent546c6210eb08f583ee4f53a0fd7886b6c958c7fa (diff)
downloadgcc-684c97dd084b7a535deb400ab8b26b914d011c5c.zip
gcc-684c97dd084b7a535deb400ab8b26b914d011c5c.tar.gz
gcc-684c97dd084b7a535deb400ab8b26b914d011c5c.tar.bz2
Use variadic template functions for the gimple_build forwarders
The following consolidates the forwarders to gimple_build with UNKNOWN_LOCATION by using two variadic template functions. This makes the code visually less disturbing and is in preparation of adding more forwarders with different stmt insertion schemes. 2022-05-11 Richard Biener <rguenther@suse.de> * gimple-fold.h (gimple_build): Use variadic template functions for the gimple_build API forwarders without location_t argument.
Diffstat (limited to 'gcc/gimple-fold.h')
-rw-r--r--gcc/gimple-fold.h45
1 files changed, 11 insertions, 34 deletions
diff --git a/gcc/gimple-fold.h b/gcc/gimple-fold.h
index 3a0ef54..850f917 100644
--- a/gcc/gimple-fold.h
+++ b/gcc/gimple-fold.h
@@ -73,55 +73,32 @@ extern tree tree_vec_extract (gimple_stmt_iterator *, tree, tree, tree, tree);
Supposed to replace force_gimple_operand (fold_buildN (...), ...). */
extern tree gimple_build (gimple_seq *, location_t,
enum tree_code, tree, tree);
-inline tree
-gimple_build (gimple_seq *seq,
- enum tree_code code, tree type, tree op0)
-{
- return gimple_build (seq, UNKNOWN_LOCATION, code, type, op0);
-}
extern tree gimple_build (gimple_seq *, location_t,
enum tree_code, tree, tree, tree);
-inline tree
-gimple_build (gimple_seq *seq,
- enum tree_code code, tree type, tree op0, tree op1)
-{
- return gimple_build (seq, UNKNOWN_LOCATION, code, type, op0, op1);
-}
extern tree gimple_build (gimple_seq *, location_t,
enum tree_code, tree, tree, tree, tree);
+template<class ...Args>
inline tree
-gimple_build (gimple_seq *seq,
- enum tree_code code, tree type, tree op0, tree op1, tree op2)
+gimple_build (gimple_seq *seq, enum tree_code code, tree type, Args ...ops)
{
- return gimple_build (seq, UNKNOWN_LOCATION, code, type, op0, op1, op2);
+ 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...);
}
+
extern tree gimple_build (gimple_seq *, location_t, combined_fn, tree);
-inline tree
-gimple_build (gimple_seq *seq, combined_fn fn, tree type)
-{
- return gimple_build (seq, UNKNOWN_LOCATION, fn, type);
-}
extern tree gimple_build (gimple_seq *, location_t, combined_fn, tree, tree);
-inline tree
-gimple_build (gimple_seq *seq, combined_fn fn, tree type, tree arg0)
-{
- return gimple_build (seq, UNKNOWN_LOCATION, fn, type, arg0);
-}
extern tree gimple_build (gimple_seq *, location_t, combined_fn,
tree, tree, tree);
-inline tree
-gimple_build (gimple_seq *seq, combined_fn fn,
- tree type, tree arg0, tree arg1)
-{
- return gimple_build (seq, UNKNOWN_LOCATION, fn, type, arg0, arg1);
-}
extern tree gimple_build (gimple_seq *, location_t, combined_fn,
tree, tree, tree, tree);
+template<class ...Args>
inline tree
-gimple_build (gimple_seq *seq, combined_fn fn,
- tree type, tree arg0, tree arg1, tree arg2)
+gimple_build (gimple_seq *seq, combined_fn fn, tree type, Args ...args)
{
- return gimple_build (seq, UNKNOWN_LOCATION, fn, type, arg0, arg1, arg2);
+ static_assert (sizeof...(args) < 4,
+ "Number of arguments must be less than four");
+ return gimple_build (seq, UNKNOWN_LOCATION, fn, type, args...);
}
extern tree gimple_convert (gimple_seq *, location_t, tree, tree);