aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
diff options
context:
space:
mode:
authorPhilip Reames <preames@rivosinc.com>2024-11-05 16:15:20 -0800
committerGitHub <noreply@github.com>2024-11-05 16:15:20 -0800
commita905203b9ea5ff1b68ca5ab760d6101f64ff3362 (patch)
tree03948d5000c8f1dc410236c3cd574f63df2670cf /llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
parent332fda86fb20c6c2cdc58976a8739c6a13110734 (diff)
downloadllvm-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