Interleave multiple vectors

This pull request replaces the "Deinterleave powers of 2" request. I have added the ability to interleave an arbitrary number of vectors. We can deinterleave ramp indices that use / or % with constant values up to 4. Additionally, we can detect multiple strided stores in a block and determine if they can be replaced by a single interleaved store. CodeGen_ARM was updated to call the builtin vst instructions for interleaved stores from 1 to 4 vectors. A general purpose interleave_vectors function was added to CodeGen that generates decent llvm code in the general case. 
That would work, but again that reordering is illegal if the letstmt values
contain loads from the buffer being stored to.


On Mon, Aug 18, 2014 at 11:23 AM, Kree Cole-McLaughlin <
notifications@github.com> wrote:

> In src/Deinterleave.cpp:
>
> >      }
> >
> > +    void visit(const Block *op) {
>
> Ah, yes I see. Maybe we need to collect all the LetStmts along with the
> Stores, and then write out the LetStmts before the first Store.
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/halide/Halide/pull/426/files#r16372064>.
>