[llvm] [LSR] Recognize vscale-relative immediates (PR #88124)
Graham Hunter via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 14 09:07:49 PDT 2024
================
@@ -3887,15 +4027,26 @@ void LSRInstance::GenerateSymbolicOffsets(LSRUse &LU, unsigned LUIdx,
/// Helper function for LSRInstance::GenerateConstantOffsets.
void LSRInstance::GenerateConstantOffsetsImpl(
LSRUse &LU, unsigned LUIdx, const Formula &Base,
- const SmallVectorImpl<int64_t> &Worklist, size_t Idx, bool IsScaledReg) {
+ const SmallVectorImpl<Immediate> &Worklist, size_t Idx, bool IsScaledReg) {
- auto GenerateOffset = [&](const SCEV *G, int64_t Offset) {
+ auto GenerateOffset = [&](const SCEV *G, Immediate Offset) {
Formula F = Base;
- F.BaseOffset = (uint64_t)Base.BaseOffset - Offset;
+ if (Base.BaseOffset.isScalable() != Offset.isScalable() &&
+ Base.BaseOffset.isNonZero() && Offset.isNonZero())
----------------
huntergr-arm wrote:
Yeah, I treat them that way as well. But this is checking for scalability being equal _if_ both are nonzero. I guess an 'isCompatible()' helper might be better (subject to bikeshedding over the name).
https://github.com/llvm/llvm-project/pull/88124
More information about the llvm-commits
mailing list