I think we'll need a Julia-focused tutorial on SIMD, because the dos/don'ts are specific to the capabilities of LLVM's current vectorizer.  For the most part, ```if```, ```&&```, ```||```, ```?:``` rule out vectorization by LLVM, but I can construct counter-examples that do vectorize.  Alas the formal meaning of "straight-line" code in this context is ```single basic block when it reaches the LoopVectorize pass in LLVM```.  I should take up writing a tutorial blog on the subject for beginners that delineates the highly profitable patterns,  unlikely profitable patterns, and illegal patterns. 

For contrast, the latest Intel compiler version of the OpenMP ````#pragma omp simd``` can handle loop bodies with ```if```, ```switch```, ```goto```.