Lowering takes the SemIR and produces LLVM IR. At present, this is done in a single pass, although it's possible we may need to do a second pass so that we can first generate type information for function arguments.
Lowering is done per SemIR::InstBlock. This minimizes changes to the
IRBuilder insertion point, something that is both expensive and potentially
fragile.