I have a large number of instruction patterns that involves a lot of replication in TableGen.
To reduce this replication I want to use ‘foreach’, but in this case the action is operating on ‘multiclass’ and ‘defm’. Basically I want to make the following work:
foreach item = { “ReplA”, “ReplB”, … , “ReplZ” } in {
defm PRE_#item#POST : BASE#item#_SUFF<…>;
}
Unfortunately TableGen doesn’t handle this for ‘multiclass’ and ‘defm’, so I have made adaptations to ‘lib/TableGen/TGParser.*’ that would allow this to happen. In this code I have a variable ‘idFragment’ that represents the iteration variable name for the ‘foreach’ loop. Next I want to perform the substation, but I can see how I get the current value to perform the replacement. My code is:
for (ForeachLoop var: Loops) {
if (var.IterVar->getName() == idFragment) {
but having identified where to perform the replacement, I can’t find how to get the current value to replace ‘item’ with {e.g. is it ‘ReplF’?}
Any hints on how I can do this? The normal replacement code I find very hard to follow.
Thanks,
MartinO