Some dialects have semantics which does is not well represented by
common SSA structures with dominance constraints. This patch allows
operations to declare the 'kind' of their contained regions.
Currently, two kinds are allowed: "SSACFG" and "GRAPH". The only
difference between them at the moment is that SSACFG regions are
checked for dominance, while GRAPH regions are not verified for
dominance. The intention is that this Interface would be generated by
ODS for existing operations, although this has not yet been implemented.
The new behavior is mostly identical to the previous behavior, since
registered operations without a RegionKindInterface are assumed to
contain SSACFG regions. However, the behavior has changed for
unregistered operations. Previously, these were checked for
dominance, however the new behavior allows dominance violations, in
order to allow the processing of unregistered dialects with GRAPH
I've also updated some of the generic documentation to remove
assertions about "sequential execution", "SSA Values", and
"Dominance". Instead, the core IR is simply "ordered" (i.e. totally
ordered) and consists of "Values". I've also clarified some things
about how control flow passes between blocks in an SSACFG
region. Control Flow must enter a region at the entry block and follow
terminator operation successorsor be returned to the containing op.
see discussion here: