This patch adds support for reverse loop vectorization.
It is possible to vectorize the following loop:
for (int i = n-1; i >= 0; --i) a[i] = b[i] + 1.0;
with fixed or scalable vector.
The loop-vectorizer will use 'reverse' on the loads/stores to make
sure the lanes themselves are also handled in the right order.
This patch adds support for scalable vector on IRBuilder interface to
create a reverse vector. The IR function
CreateVectorReverse lowers to experimental.vector.reverse for scalable vector
and keedp the original behavior for fixed vector using shuffle reverse.
Depends on D94883
Depends on D95603
Depends on D95139
nit: This function looks a bit too complex to live in a header - maybe better defined in the .cpp file?