[SandboxVec][LoadStoreVec] Support constant vectors of mixed types (#224890)
`createConstantVector()` previously packed the constant store operands
as-is, which only worked when every store had the same element type.
This patch adds support for mixed type constant vectorization via the
following changes:
- `VecUtils::getCombinedVectorTypeFor()`: Compute the GCD of the
bitwidths of the chain elements. Return the type `<N x iM>` where M is
the GCD. This guarantees that all chain elements will be splittable into
equi-sized slices.
- Introduce `Constant *LoadStoreVec::getEquivalentConstantWithType` to
emit a chain of casts.
- Reinterpret each constant's bits as the combined vector type. Bail out
when a constant cannot be reinterpreted, such as a non-integral pointer
or a relocatable address that needs splitting.
Assisted by Cursor.