In my opinion, one of the problems with MLIR's freedom of operation semantics is that we have no idea what the Region attached to an Operation actually means.
Hence, it's impossible to automatically extend well-known SSA constructs such as GVN, CSE, ... into Regions, simply because
we have no idea about the dominance relationship between the parent region containing the operation, and the child
regions of the operation.
Here's a proposal on how we fix this. We add two three instructions into the base IR:
run: args * Region -> value
callcc: label * args * Region -> ()