In particular, when an op defines one or more optional attributes, we should
be able to write pattern rewrites that omit those attributes.
Could you please update the documentation and description of the change?
Seems like you are assuming some C++ like default call behavior from the patterns, or how do you plan to generalize this?
And some tests for error cases would be good.
I've added some documentation that hopefully highlights the intent behind the change. The way that we generate rewrite implementations for ops (i.e. the build() call that we use) means that we can omit some of the attributes if they're marked optional and everything should "just work". The tests that were added will hopefully catch this if anything fails in the future. PTAL (and let me know if I'm missing something egregious here!)