Conversation
|
I'm not sure we should remove this, I often do trial and error on which variable should be vectorized vs. unrolled, and we had test coverage for this? How did those tests work? I do think we should make sure |
|
The tests worked by hitting exactly the case that wasn't broken. In general most uses of this were probably broken. Fortunately it rarely triggered. I looked into what checks would be necessary to make it correct, and it was much more involved than the existing code, so I just nuked the feature. |
|
To be clear, the way this usually triggers is: becomes That's probably what you were hitting with trial and error, and that case is unchanged in this PR. |
|
The OSX failure is unrelated (will be fixed by #5841), should be good to land |
The deinterleave stores pass has some logic that generated loads from garbage addresses. It tries to recognize this:
and turn it into a single interleaving store. However not enough checking of the base of the ramps is done. The left-hand-side index just gets moved to the right hand side. So it triggers on something like:
and then moves "foo" over into the loads. This is totally wrong and was causing crashes for me.
I just deleted this feature. That schedule can be better expressed by switching which vars are unrolled vs vectorized. It's amazing it took us 7 years to find this bug (the age of the logic in question).