recog: Use parameter packs for operator()
authorRichard Sandiford <richard.sandiford@arm.com>
Fri, 12 Jun 2020 07:16:48 +0000 (08:16 +0100)
committerRichard Sandiford <richard.sandiford@arm.com>
Fri, 12 Jun 2020 07:16:48 +0000 (08:16 +0100)
commit3a179232a743b2b1987b21034cd5bb3bc660ee85
treebd8b841004cabe1bc8d2fd5e2bfac407fb1fd7c4
parent3dcea658c9e2ac84f0726e679fd7d3b14f9106f0
recog: Use parameter packs for operator()

This patch uses parameter packs to define insn_gen_fn::operator().
I guess in some ways it's C++-ification for its own sake, but it does
make things simpler and removes the current artificial limit of 16
arguments.

Note that the call is still strongly typed: all arguments have to have
implicit conversions to rtx.  Error messages for bad arguments look
reasonable.

I'm sure there are more elegant ways of getting the function type,
but this version at least fits on one line, so I didn't try too
hard to find an alternative.

2020-06-12  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* recog.h (insn_gen_fn::f0, insn_gen_fn::f1, insn_gen_fn::f2)
(insn_gen_fn::f3, insn_gen_fn::f4, insn_gen_fn::f5, insn_gen_fn::f6)
(insn_gen_fn::f7, insn_gen_fn::f8, insn_gen_fn::f9, insn_gen_fn::f10)
(insn_gen_fn::f11, insn_gen_fn::f12, insn_gen_fn::f13)
(insn_gen_fn::f14, insn_gen_fn::f15, insn_gen_fn::f16): Delete.
(insn_gen_fn::operator()): Replace overloaded definitions with
a parameter-pack version.
gcc/recog.h