Lowers the llvm.masked.scatter intrinsics (scalar plus vector addressing mode only)
Changes included in this patch:
- Adds the IsTruncatingStore flag to MaskedScatterSDNode, set by getMaskedScatter()
- Added refineIndexType() to DAGCombine which folds a sext/zext of the index into the index type. Also added refineUniformBase() which gets the base pointer and index from an add + splat_vector.
- Custom lowering for MSCATTER, which chooses the appropriate scatter store opcode to use. Floating-point scatters are cast to integer, with patterns added to match FP reinterpret_casts.
- Print details of MaskedScatterSDNodes (is truncating, signed or scaled) in SelectionDAGDumper
- Tests with 32 & 64-bit scaled & unscaled offsets
This seems specific to AArch64 which has 64bit pointers. But I'd think this check is not needed to begin with, because the MaskedGS BasePtr must be a scalar pointer, or a vector of pointers, so the splat value would always be a pointer type (which I assume this code is checking).