Hi Andrew,
On 2023/10/31 14:48, Andrew Pinski wrote:
+inline
+gimple_match_op::gimple_match_op (const gimple_match_cond &cond_in,
+ code_helper code_in, tree type_in,
+ tree op0, tree op1, tree op2, tree op3,
+ tree op4, tree op5)
+ : cond (cond_in), code (code_in), type (type_in), reverse (false),
+ num_ops (6)
+{
+ ops[0] = op0;
+ ops[1] = op1;
+ ops[2] = op2;
+ ops[3] = op3;
+ ops[4] = op4;
+ ops[5] = op5;
+}
Hmm, does it make sense to start to use variadic templates for these
constructors instead of writing them out?
And we can even add a static_assert to make sure the number of
arguments is <= MAX_NUM_OPS to make sure they are correct. And use
std::is_same to make sure we are only passing tree types.
You mean something like this?:
template<typename... op_types>
inline
gimple_match_op::gimple_match_op (const gimple_match_cond &cond_in,
code_helper code_in, tree type_in,
op_types... ops)
: cond (cond_in), code (code_in), type (type_in), reverse (false),
num_ops (sizeof...(ops))
{
static_assert (sizeof...(ops) <= MAX_NUM_OPS);
auto op_list[] = {ops...};
for (int i = 0; i < sizeof...(ops); i++)
this->ops[i] = op_list[i];
}
--
Best,
Lehua (RiVAI)
lehua.d...@rivai.ai