Index: llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp =================================================================== --- llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp @@ -3833,7 +3833,13 @@ for (int64_t Offset : Worklist) { Offset -= Step; - GenerateOffset(G, Offset); + Formula F = Base; + F.BaseOffset = (uint64_t)Base.BaseOffset - Offset; + // Check that the offset will result in a legal formula and addressing + // mode. + if (isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy, + F)) + GenerateOffset(G, Offset); } } }