[llvm-dev] TableGen: Named template arguments

Paul C. Anagnostopoulos via llvm-dev llvm-dev at lists.llvm.org
Mon Nov 2 11:09:35 PST 2020

Here is a TableGen feature that I think would be useful, but I'd like some feedback.

TableGen would allow the template arguments in a class or multiclass invocation to be named (in the venerable tradition of macro arguments). For example:

class InstSubst<string Asm, dag Result, bit EmitPriority = 0>
  : InstAlias<Asm, Result, EmitPriority>, Requires<[UseNegativeImmediates]>;

This class could be invoked as follows:

  def : InstSubst<Result: (!cast<Instruction>(NAME # "Wri") GPR32sp:$Rd,
                                       GPR32:$Rn, logical_imm32_not:$imm),
                         Asm: Alias # "\t$Rd, $Rn, $imm",
                         EmitPriority: 0>;

Note that each template argument is named, so that they do not have to be in order. An argument list could start with positional arguments and then switch to named arguments, but not vice versa.

More information about the llvm-dev mailing list