This adds a combine for adds of reductions, distributing them so that they occur sequentially to enable better use of accumulating VADDVA instructions. It combines:
add(X, add(vecreduce(Y), vecreduce(Z))) -> add(add(X, vecreduce(Y)), vecreduce(Z))
and
add(add(A, reduce(B)), add(C, reduce(D))) -> add(add(add(A, C), reduce(B)), reduce(D))
These together distribute the add's so that more reductions can be selected to VADDVA.
If this IsVecReduce returns true, then the second will run needlessly. I'd prefer if the second invocation was conditional on the first failing.