A typed three-address assembly-like intermediate language