Cmm types don't account for registers which can be used for several purposes
As noted in #22296 (closed), SIMD registers can be used to hold different kinds of values, for example xmm1
can hold a DoubleX2#
, a FloatX4#
, a Word32X4#
, an Int16x8#
, etc.
Currently, in Cmm Lint, we expect to be able to compute the type of a register, but we consider a 128-bit wide floating-point register distinct from a 128-bit wide integer register. This means that Cmm Lint fails when one tries to use xmm1
except for the one "blessed" purpose (which currently is a vector register for 4 32-bit integers (signed or unsigned)).
We should instead have a different notion which allows registers to serve multiple different purposes.