Verify profile data confirms large loop trip counts.
authorMircea Trofin <mtrofin@google.com>
Wed, 7 Feb 2018 23:29:52 +0000 (23:29 +0000)
committerMircea Trofin <mtrofin@google.com>
Wed, 7 Feb 2018 23:29:52 +0000 (23:29 +0000)
commit06ac8cfbd103b2a024d6c1c01ae8912ebce523a0
tree3eb50f8e1067ec2f2c10261508820f598a0ea5ca
parent8e6107a0e49940646d08e5d703d2d128000bcdea
Verify profile data confirms large loop trip counts.

Summary:
Loops with inequality comparers, such as:

   // unsigned bound
   for (unsigned i = 1; i < bound; ++i) {...}

have getSmallConstantMaxTripCount report a large maximum static
trip count - in this case, 0xffff fffe. However, profiling info
may show that the trip count is much smaller, and thus
counter-recommend vectorization.

This change:
- flips loop-vectorize-with-block-frequency on by default.
- validates profiled loop frequency data supports vectorization,
  when static info appears to not counter-recommend it. Absence
  of profile data means we rely on static data, just as we've
  done so far.

Reviewers: twoh, mkuper, davidxl, tejohnson, Ayal

Reviewed By: davidxl

Subscribers: bkramer, llvm-commits

Differential Revision: https://reviews.llvm.org/D42946

llvm-svn: 324543
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
llvm/test/Transforms/LoopVectorize/tripcount.ll