- vm constraint is used for masking operand, which always v0.
- Update testcase, only masking operand should use vm, vector mask operations should just use vr for any vector register.
- Revise the description of vm constraint.
- This patch also fix issue on RISCVRegisterInfo.td and RISCVISelLowering.cpp.
RISCVRegisterInfo.td:- The first VT in the list must be the largest total size since the SelectionDAGBuilder uses the first register in the list as the canonical type for the register.
RISCVISelLowering.cpp: - Fix RISCVTargetLowering::splitValueIntoRegisterParts and RISCVTargetLowering::joinRegisterPartsIntoValue for handling vectors with different total size, that will happened on fractional LMUL since fractional LMUL is always occupy one vector register.
- The first VT in the list must be the largest total size since the SelectionDAGBuilder uses the first register in the list as the canonical type for the register.
The name LargerEltTypeVT, to me anyway, implies it's a vector type with a larger element type when in fact it's a vector with the same element type. Maybe something like WideValueVT?
EDIT: Though that said, in joinRegisterPartsIntoValue you're keeping the name SameEltTypeVT. I'd prefer consistency in whatever we pick.