Exploiting Vector Instructions with Generalized Stream Fusion [pdf]
microsoft.com
microsoft.com
That said, I am saddened by the state of vectorization in GHC. AFAICT it seems all but abandoned [1]. I think there is some hope on this front in the recent progress that has been made on the LLVM backend (producing good input code for LLVM, and choosing the most fruitful LLVM optimization passes) [2].
[0]: https://hackage.haskell.org/package/vector
[1]: https://www.reddit.com/r/haskell/comments/51gvxl/whatever_happened_to_automatic_vectorization_in/
[2]: https://ghc.haskell.org/trac/ghc/wiki/ImprovedLLVMBackendIt also says 2013 in the paper. And papers from 2013 cite this paper according to Google scholar. And I'm relatively sure I read this paper years ago.
Big, if it holds up.
Given how similar the code produced is from both compilers (literally just movapd-mulpd-addpd), the only relevant difference seems to be usage of prefetching, which C compilers don't do much because the common wisdom is that it hurts in most scenarios.