This patch allows the vectorizer to identify and vectorize recurrences such as (v = v + c) which are used in the loop. These differ from reductions because they are not used outside the loop.
The recurrences are treated just like reductions by the vectorizer. An epilogue is generated for each recurrence, like reduction, so its value can be picked up in the scalar-remainder loop.
There is a bug in 'Combine redundant instructions' that prevents vectorization of mul and div loops when the step is constant. So in the tests the step is an argument. I'll file a bug for that.
s/Phi nodes/Phi node/