Some code is moved to let LIR support structs and hand unrolled loops in the future.
isConsecutiveAccess() is moved from SLP vectorizer to valuetracking so that lir can use in the future
processLoopStoreOfLoopLoad() is hoisted under processLoopBlock()
Many checks are moved to isLegalStore()
Why is the PatternValue logic being hoisted out into the body of processLoopStore? Why not sink it back to avoid passing a nullptr when optimizing series of memset instructions (MSI)?
I guess the bigger question is why isn't the PatternValue used in the context of optimizing MSIs? Can you not combine two memset_pattern16 memsets?