llvm-project/llvm/test/Transforms/LoopVectorize/X86
Hal Finkel 2eed29f3c8 Implement X86TTI::getUnrollingPreferences
This provides an initial implementation of getUnrollingPreferences for x86.
getUnrollingPreferences is used by the generic (concatenation) unroller, which
is distinct from the unrolling done by the loop vectorizer. Many modern x86
cores have some kind of uop cache and loop-stream detector (LSD) used to
efficiently dispatch small loops, and taking full advantage of this requires
unrolling small loops (small here means 10s of uops).

These caches also have limits on the number of taken branches in the loop, and
so we also cap the loop unrolling factor based on the maximum "depth" of the
loop. This is currently calculated with a partial DFS traversal (partial
because it will stop early if the path length grows too much). This is still an
approximation, and one that is both conservative (because it does not account
for branches eliminated via block placement) and optimistic (because it is only
recording the maximum depth over minimum paths). Nevertheless, because the
loops that fit in these uop caches are so small, it is not clear how much the
details matter.

The original set of patches posted for review produced the following test-suite
performance results (from the TSVC benchmark) at that time:
  ControlLoops-dbl - 13% speedup
  ControlLoops-flt - 15% speedup
  Reductions-dbl - 7.5% speedup

llvm-svn: 205348
2014-04-01 18:50:34 +00:00
..
already-vectorized.ll Move partial/runtime unrolling late in the pipeline 2014-03-31 23:23:51 +00:00
avx1.ll Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality change. 2013-07-14 01:42:54 +00:00
constant-vector-operand.ll LoopVectorizer: Bail out if we don't have datalayout we need it 2013-04-24 16:15:58 +00:00
conversion-cost.ll Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality change. 2013-07-14 01:42:54 +00:00
cost-model.ll Fix missing CHECK-LABELs 2013-10-02 20:29:00 +00:00
fp32_to_uint32-cost-model.ll [X86] Adjust cost of FP_TO_UINT v8f32->v8i32 2014-03-30 18:07:13 +00:00
fp64_to_uint32-cost-model.ll [X86] Adjust cost of FP_TO_UINT v4f64->v4i32 as well 2014-03-31 21:54:48 +00:00
fp_to_sint8-cost-model.ll add 'requires asserts' to test that needs it 2014-03-27 00:20:42 +00:00
gather-cost.ll X86 cost model: Add cost for vectorized gather/scather 2013-07-12 19:16:07 +00:00
gcc-examples.ll Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality change. 2013-07-14 01:42:54 +00:00
illegal-parallel-loop-uniform-write.ll Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality change. 2013-07-14 01:42:54 +00:00
lit.local.cfg [tests] Cleanup initialization of test suffixes. 2013-08-16 00:37:11 +00:00
metadata-enable.ll Implement X86TTI::getUnrollingPreferences 2014-04-01 18:50:34 +00:00
min-trip-count-switch.ll TBAA: remove !tbaa from testing cases if not used. 2013-04-30 17:52:57 +00:00
no-vector.ll Make TargetLowering::getTypeConversion more resilient against odd illegal MVTs. 2012-12-19 14:34:28 +00:00
parallel-loops-after-reg2mem.ll Add support for llvm.vectorizer metadata 2013-05-28 20:00:34 +00:00
parallel-loops.ll Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality change. 2013-07-14 01:42:54 +00:00
rauw-bug.ll SLPVectorizer: Fix stale for Value pointer array 2013-11-19 22:20:20 +00:00
reduction-crash.ll Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality change. 2013-07-14 01:42:54 +00:00
small-size.ll [vectorizer] Completely disable the block frequency guidance of the loop 2014-01-28 09:10:41 +00:00
struct-store.ll Fix typo "Makre" -> "Make". 2012-12-24 19:55:47 +00:00
tripcount.ll LoopVectorizer: Truncate i64 trip counts of i32 phis if necessary 2013-11-26 22:11:23 +00:00
uint64_to_fp64-cost-model.ll [X86][Vectorizer Cost Model] Correct vectorization cost model for v2i64->v2f64 2014-03-27 00:52:16 +00:00
unroll-pm.ll Disable unrolling in the loop vectorizer when disabled in the pass manager 2013-08-28 18:33:10 +00:00
unroll-small-loops.ll [vectorizer] Tweak the way we do small loop runtime unrolling in the 2014-01-31 10:51:08 +00:00
unroll_selection.ll LoopVectorizer: Implement a new heuristics for selecting the unroll factor. 2013-01-20 05:24:29 +00:00
vector-scalar-select-cost.ll LoopVectorizer: Insert some white space to make test case more readable 2013-03-14 21:31:09 +00:00
vector_ptr_load_store.ll Formatting. 2013-02-05 15:32:16 +00:00
x86_fp80-vector-store.ll Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality change. 2013-07-14 01:42:54 +00:00