Created originally on Bitbucket by plan_rich (Richard Plangger)
I think I got this branch to a state where it can be merged into default. I have re evaluate the speedup, but it gives some on a pypy lldebug build.
It is still default off, so it should not introduce any problems when run without '--jit vec=1' or '--jit vec_all=1'. The first parameter only turns on the optimization for numpypy related jitdrivers, the latter is not yet complete and occasionally crashes with arbitrary traces.
I have several ideas how to improve the optimization even further:
- Aligned memory (Undo the state modifying operations in the preamble and tweak the index of the peeled loop, a guard protects the pointers to memory)
- Combine floating point operations. There might be chances that (without unrolling) we could combine floating point operations. If there are many float operations in sequence we could put together two operations into one
- AVX
- Python Interp. Loop Signals only checked once
Objections?