Skip to content

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.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information