As suggested by Ayal in D59995, we can mark instructions with
loop invariant arguments as uniform. They will always produce
the same result.
Now that we can have more uniform instructions, there were some
assertions that needed relaxing a bit.
Also, there still seems to be an issue with constant folding in LV not
being able to simplify some uniform values compared to their replicated
equivalents. I still have to look into that, but I wanted to make sure
the overall approach aligns well.
The overall impact of the change is probably quite low, but at least in
the test-suite, there are around 4 benchmarks were we ended up
vectorizing a few more loops.
Currently we still miss some uniform instructions, that only have
uniform operands, but that can be addressed as follow-up.