diff options
author | Philip Reames <preames@rivosinc.com> | 2024-11-05 16:15:20 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-05 16:15:20 -0800 |
commit | a905203b9ea5ff1b68ca5ab760d6101f64ff3362 (patch) | |
tree | 03948d5000c8f1dc410236c3cd574f63df2670cf /llvm/lib/Analysis/ModuleSummaryAnalysis.cpp | |
parent | 332fda86fb20c6c2cdc58976a8739c6a13110734 (diff) | |
download | llvm-a905203b9ea5ff1b68ca5ab760d6101f64ff3362.zip llvm-a905203b9ea5ff1b68ca5ab760d6101f64ff3362.tar.gz llvm-a905203b9ea5ff1b68ca5ab760d6101f64ff3362.tar.bz2 |
[RISCV] Prefer strided load for interleave load with only one lane active (#115069)
If only one of the elements is actually used, then we can legally use a
strided load in place of the segment load. Doing so reduces vector
register pressure, so if both segment and strided are believed to be
element/segment at a time, then prefer the strided load variant.
Note that I've seen the vectorizer emitting wide interleave loads to
represent a strided load, so this does happen in practice. It doesn't
matter much for small LMUL*NF, but at large NF can start causing
problems in register allocation.
Note that this patch only covers the fixed vector formation cases. In
theory, we should do the same patch for scalable, but we can currently
only represent NF2 in scalable IR, and NF2 is assumed to be optimized to
better than segment-at-a-time by default, so there's currently nothing
to do.
Diffstat (limited to 'llvm/lib/Analysis/ModuleSummaryAnalysis.cpp')
0 files changed, 0 insertions, 0 deletions