LoopVectorize: Implement partial loop unrolling when vectorization is not profitable.
authorNadav Rotem <nrotem@apple.com>
Mon, 26 Aug 2013 22:33:26 +0000 (22:33 +0000)
committerNadav Rotem <nrotem@apple.com>
Mon, 26 Aug 2013 22:33:26 +0000 (22:33 +0000)
commit4bf6326d0871961a7402c797a0399a2bdaf53574
treeab31e87a17bcdc7dfaf8359ce931dfa0c88d5c41
parent03be5e5b6e2d604313df5b7758bffcf5b0bb0ef0
LoopVectorize: Implement partial loop unrolling when vectorization is not profitable.
This patch enables unrolling of loops when vectorization is legal but not profitable.
We add a new class InnerLoopUnroller, that extends InnerLoopVectorizer and replaces some of the vector-specific logic with scalars.

This patch does not introduce any runtime regressions and improves the following workloads:

SingleSource/Benchmarks/Shootout/matrix -22.64%
SingleSource/Benchmarks/Shootout-C++/matrix -13.06%
External/SPEC/CINT2006/464_h264ref/464_h264ref  -3.99%
SingleSource/Benchmarks/Adobe-C++/simple_types_constant_folding -1.95%

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189281 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Vectorize/LoopVectorize.cpp
test/Transforms/LoopVectorize/unroll_novec.ll [new file with mode: 0644]