☔️ Lower GraphIR to LLVM IR
A general lowering algorithm from Schedule GraphIR is given in Thorin. This issues serves as an umbrella for our version of this lowering algorithm.
We're going to need a runtime to facilitate our dynamic type metadata system. We'll need to implement something similar to Swift's runtime boxes, with copy, move, and destroy operations that we can use to lower copy_value, destroy_value, and function parameter passing.
We'll need to investigate ways to represent type metadata at runtime. Preferably in a way such that type metadata is lazily instantiated only for types we happen to use.
We'll also need a story for runtime instantiation of type metadata. Namely, how? We'll need to be able to track metadata instantiation in GIR as managed values as well.