Currently, LLVM supports vectorization of horizontal reduction
instructions with initial value set to 0. Patch supports vectorization
of reduction with non-zero initial values. Also, it supports a
vectorization of instructions with some extra arguments, like:
float f(float x[], int a, int b) { float p = a % b; p += x[0] + 3; for (int i = 1; i < 32; i++) p += x[i]; return p; }
Patch allows vectorization of this kind of horizontal reductions.
Please also change the documentation of ExternalUses to explain that a nullptr "User" is legal, and what it means (Line 589).