Outlining
- Implement outlining routine. Handles all valid cases, including multiple entry / exit points. Currently uses Undefs and accepts / returns all possible data items. Accepts / returns a control indicator to communicate control flow. TODO: use summation types instead.
- Dumby outlining pass to outline all of each function. This is so the original entry function can get lowered by the Rust backend, and the new non-entry function can get lowered using a new CPU backend.
A cool demo: cargo run --bin hercules_driver hercules_samples/matmul/src/matmul.hir "Xdot(false) Outline Xdot(false) Inline DeleteUncalled SROA DCE Xdot(false)"
.