[RISCV] Add support loads, stores, and splats of vXi1 fixed vectors.
authorCraig Topper <craig.topper@sifive.com>
Thu, 11 Feb 2021 17:13:15 +0000 (09:13 -0800)
committerCraig Topper <craig.topper@sifive.com>
Thu, 11 Feb 2021 17:13:16 +0000 (09:13 -0800)
commit033b1bd185d2ecc27bafbff6e6d95ee80f1701ac
tree9d2aa3f862bffb4f231f5664286f560a3a11040c
parent5beebf9c58be2e4e3db1dacec1d76ee909a138b8
[RISCV] Add support loads, stores, and splats of vXi1 fixed vectors.

This refines how we determine which masks types are legal and adds
support for loads, stores, and all ones/zeros splats.

I left a fixme in store handling where I think we need to zero
extra bits if the type isn't a multiple of a byte. If I remember
right from X86 there was some case we could have a store of a
1, 2, or 4 bit mask and have a scalar zextload that then expected the
bits to be 0. Its tricky to zero the bits with RVV. We need to do
something like round VL up, zero a register, lower the VL back down,
then do a tail undisturbed move into the zero register. Another
option might be to generate a mask of 1/2/4 bits set with a VL of 8
and use that to mask off the bits.

Reviewed By: frasercrmck

Differential Revision: https://reviews.llvm.org/D96468
llvm/lib/Target/RISCV/RISCVISelLowering.cpp
llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td
llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td
llvm/lib/Target/RISCV/RISCVSubtarget.cpp
llvm/test/CodeGen/RISCV/rvv/fixed-vectors-mask-load-store.ll [new file with mode: 0644]
llvm/test/CodeGen/RISCV/rvv/fixed-vectors-mask-splat.ll [new file with mode: 0644]