instructions inside the block are executed in order and terminator operations
implement control flow branches between basic blocks.
-A region with a single block may not include a
-[terminator operation](#terminator-operations). The enclosing op can opt-out of
-this requirement with the `NoTerminator` trait. The top-level `ModuleOp` is an
-example of such operation which defined this trait and whose block body does not
-have a terminator.
+The last operation in a block must be a
+[terminator operation](#control-flow-and-ssacfg-regions). A region with a single
+block may opt out of this requirement by attaching the `NoTerminator` on the
+enclosing op. The top-level `ModuleOp` is an example of such an operation which
+defines this trait and whose block body does not have a terminator.
Blocks in MLIR take a list of block arguments, notated in a function-like way.
Block arguments are bound to values specified by the semantics of individual