[RISCV] Lower fixed length interleaved accesses via vssegN/vlsegN
authorLuke Lau <luke@igalia.com>
Wed, 1 Mar 2023 18:25:48 +0000 (18:25 +0000)
committerLuke Lau <luke@igalia.com>
Sun, 2 Apr 2023 15:47:44 +0000 (16:47 +0100)
commitec26c9cdc002bdbf247eac0b2563f44f5e90e840
tree37bf855cbe0aa28eba02c6ef1a234a0082f81d8f
parentceff9524f92445b3110fb79f0d6239713b5df153
[RISCV] Lower fixed length interleaved accesses via vssegN/vlsegN

This enables the interleaved access pass on O1 and above, and causes
interleaving/deinterleaving shuffles of fixed length vectors with
stores/loads to be lowered into vssegN/vlsegN.

We need to be careful and make sure that we only lower vsseg/vlseg
whenever we know the fixed vector type will fit within the minimum vlen,
and that the interleaving factor is supported for the given LMUL.

Reviewed By: craig.topper

Differential Revision: https://reviews.llvm.org/D145085
llvm/lib/Target/RISCV/RISCVISelLowering.cpp
llvm/lib/Target/RISCV/RISCVISelLowering.h
llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
llvm/test/CodeGen/RISCV/O3-pipeline.ll
llvm/test/CodeGen/RISCV/rvv/fixed-vectors-interleaved-access-zve32x.ll [new file with mode: 0644]
llvm/test/CodeGen/RISCV/rvv/fixed-vectors-interleaved-access.ll [new file with mode: 0644]
llvm/test/CodeGen/RISCV/rvv/fixed-vectors-shufflevector-vnsrl.ll
llvm/test/Transforms/InterleavedAccess/RISCV/interleaved-accesses.ll [new file with mode: 0644]
llvm/test/Transforms/InterleavedAccess/RISCV/lit.local.cfg [new file with mode: 0644]
llvm/test/Transforms/InterleavedAccess/RISCV/zve32x.ll [new file with mode: 0644]
llvm/test/Transforms/InterleavedAccess/RISCV/zvl32b.ll [new file with mode: 0644]