Hello everyone. While I was trying to experiment with the custom assembly formats of operations with a number of operands where some specific subsets of the whole operand set share a type among its elements, I found out it could be quite comfortable to be able to specify each subset’s common type only once without the need of repeating again and again for each operand of the chosen subset.
Specifically, here is a glimpse of a custom assembly format for a simple multiplexer and operands for it:
let arguments = (ins
Stream:$control,
Stream:$first,
Stream:$second,
Variadic<Stream>:$others);
let assemblyFormat = "`(` $control `,` $first `,` $second (`,` $others^ )? `)` attr-dict";
let results = (outs Stream:$res);
Each Stream-type has to be parametrized, so we need to specify the types ourselves, but the $control
-stream type might be different from the type of all the other streams, thus we cannot use SameOperandsAndResultType
-traits and such.
So what I would like to do is to discard the most evident way to describe such an assembly format
let assemblyFormat = "`(` $control `:` type($control) `,` $first `:` type($first) `,` $second `:` type($second) (`,` $others^ `:` type($others) )? `)` attr-dict `:` type($res)";
and use something more convenient like
let assemblyFormat = "`(` $control `:` type($control) `,` $first `,` $second (`,` $others^ )? `)` attr-dict `:` type($first, $second, $others, $res)";
Is it possible in any way to use a notation like that without the need to use some specialized Traits?
P.S. By the way, I would like to ask if there are any up-to-date reference pages for the usage of Traits, as to my knowledge, the main Traits-page does not even cover the abovementioned SameOperandsAndResultType
-trait and some others.