Hi,
* Worked on peeling problem in eon (#831094). Wrote a patch that checks if the number of vector iterations is going to be more than 2, and disables peeling otherwise. With this patch I see about 1.5% regression with vectorization (and about 7% without it).
* I am thinking to extend the patch for unknown number of iterations by creating a run-time check. The threshold could be set by param. Another option, could be doing it through the cost model, but it's hard to evaluate costs when misalignments are unknown (and, I think, the cost model handles known misalignment properly).
* Disabling peeling for low loop bounds also helps with one of EEMBC benchmarks, for which vectorization with double-words is more beneficial than with quad-words. It turns out that we are able to force the alignment for double-words (and, therefore, avoid peeling), because we check that the required alignment (64 in this case) is less or equal to BIGGEST_ALIGNMENT, where arm.h:#define BIGGEST_ALIGNMENT (ARM_DOUBLEWORD_ALIGN ? DOUBLEWORD_ALIGNMENT : 32) and arm.h:#define DOUBLEWORD_ALIGNMENT 64 So, we can never force alignment for 128 bits on ARM. I wonder if that's a real limitation.
* Proposed three SLP patches to gcc-linaro, and merged two of them.
Ira