Adapting TableGen

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.