This can be seen as a two parter:
- Figure out the best architecture to actually pass around all the different attributed matrix types
- Update generation to support that method
The first point has a number of open questions/ideas. One potentially nice idea is if the type generation could be handled in a singular lower function in HLOperationLower and all the builtins just operate over a generic notion of a handle with attached attributes. They key concern being to ensure that the handles attributes are never dropped/added/changed