Modified interleave_vectors to support 2, 3, or 4 arguments. Changed deinterleave to detect interleavings of 2, 3, or 4 lanes and call the appropriate interleave_vectors command.
Modified deinterleave to detect if multiple stores to the same buffer with strided ramp indices are actually interleaved. In this case we replace multiple stores with a single interleave store.
Modified ARM codegen to use interleaved vector store instructions for interleaved stores of up to 4 vectors.
Minor fix to ARM codegen. Missed an error in the last commit.
Created an interleave_vectors method in the codegen class that implements the interleave_vectors intrinsic call in halide. This was necessary so that I could use a recursive approach to define interleave_vectors for any number of arguments. For calls to interleave_vectors with 1 to 4 args specialized llvm code is generated. When more args are present we recursively interleave the even args as well as the odd args, and then interleave the results of these.
Added a test to check correctness of interleaving 5 vectors. Fixed some bugs exposed by the test.
Added a bailout from the store collect in Deinterleave.cpp in case we find a Load node that references the same buffer we are storing to.
Added a bailout from the store collect in Deinterleave.cpp in case we find a Load node that references the same buffer we are storing to.
Fixed some issues with the interleave store detector. Handles LetStmts and Loads (hopefully correctly) now.
Simplified some of the boolean tests in the StoreCollector.
Merge branch 'interleave_multiple_vectors' of https://github.com/kree-colemcalughlin/Halide into interleave_multiple_vectors
Addressed comments from the pull request. Mostly minor issues.
Added more interleave tests. We now test interleaving up to 5 vectors at a time.
Modified rgb_interleaved performance test to test speed of planar -> interleaved conversions as well as interleaved -> planar. Produced two schedules for planar -> interleaved that allow us to compare timing results with and without the new features added to Deinterleave.cpp
Merge branch 'interleave_multiple_vectors' of https://github.com/kree-colemcalughlin/Halide into interleave_multiple_vectors
Merge branch 'master' into interleave_multiple_vectors

Conflicts:
	src/CodeGen_ARM.cpp
Added some more interleave tests
Don't try to deinterleave f(x) = g(x/n) for n > 4

Previously it just used the n==4 case