CL 421821 adds basic shaping to unified IR: all type arguments are shaped to their underlying type.
It should be possible to shape further. In particular, Go 1.18 and Go 1.19 shaped pointer types together. E.g., F[*int] and F[*byte] could use the same F[go.shape.ptr] if the code didn't rely on the pointed-to type.
Beyond that, I expect we can shape structs by ignoring their field names and tags; and shape all composite types by recursively shaping their element types.
CL 421821 adds basic shaping to unified IR: all type arguments are shaped to their underlying type.
It should be possible to shape further. In particular, Go 1.18 and Go 1.19 shaped pointer types together. E.g.,
F[*int]andF[*byte]could use the sameF[go.shape.ptr]if the code didn't rely on the pointed-to type.Beyond that, I expect we can shape structs by ignoring their field names and tags; and shape all composite types by recursively shaping their element types.