diff --git a/llvm/lib/CodeGen/Analysis.cpp b/llvm/lib/CodeGen/Analysis.cpp --- a/llvm/lib/CodeGen/Analysis.cpp +++ b/llvm/lib/CodeGen/Analysis.cpp @@ -144,7 +144,10 @@ if (FixedOffsets) { ComputeValueVTs(TLI, DL, Ty, ValueVTs, &Offsets, Offset); for (TypeSize Offset : Offsets) { - FixedOffsets->push_back(Offset.isZero() ? Offset.getKnownMinValue() : Offset.getFixedValue()); + // Treat scalable zero as if it is fixed. Otherwise use getFixedValued + // to get an assert for scalable offsets. + FixedOffsets->push_back(Offset.isZero() ? Offset.getKnownMinValue() + : Offset.getFixedValue()); } } else { ComputeValueVTs(TLI, DL, Ty, ValueVTs, nullptr, Offset); @@ -170,7 +173,10 @@ if (FixedOffsets) { ComputeValueVTs(TLI, DL, Ty, ValueVTs, MemVTs, &Offsets, Offset); for (TypeSize Offset : Offsets) { - FixedOffsets->push_back(Offset.isZero() ? Offset.getKnownMinValue() : Offset.getFixedValue()); + // Treat scalable zero as if it is fixed. Otherwise use getFixedValued + // to get an assert for scalable offsets. + FixedOffsets->push_back(Offset.isZero() ? Offset.getKnownMinValue() + : Offset.getFixedValue()); } } else { ComputeValueVTs(TLI, DL, Ty, ValueVTs, MemVTs, nullptr, Offset);