Remove 4,096 loop scale limitation.
authorDiego Novillo <dnovillo@google.com>
Wed, 1 Apr 2015 17:42:27 +0000 (17:42 +0000)
committerDiego Novillo <dnovillo@google.com>
Wed, 1 Apr 2015 17:42:27 +0000 (17:42 +0000)
commit32d9020423f9b49c831bce1244218b575819029c
treec19c5354446214363306d66e739b7e7832628e50
parent6b2fe99659736dd2fcf8f82801ff0e5a299c348c
Remove 4,096 loop scale limitation.

Summary:
This is part 1 of fixes to address the problems described in
https://llvm.org/bugs/show_bug.cgi?id=22719.

The restriction to limit loop scales to 4,096 does not really prevent
overflows anymore, as the underlying algorithm has changed and does
not seem to suffer from this problem.

Additionally, artificially restricting loop scales to such a low number
skews frequency information, making loops of equal hotness appear to
have very different hotness properties.

The only loops that are artificially restricted to a scale of 4096 are
infinite loops (those loops with an exit mass of 0). This prevents
infinite loops from skewing the frequencies of other regions in the CFG.

At the end of propagation, frequencies are scaled to values that take no
more than 64 bits to represent. When the range of frequencies to be
represented fits within 61 bits, it pushes up the scaling factor to a
minimum of 8 to better distinguish small frequency values. Otherwise,
small frequency values are all saturated down at 1.

Tested on x86_64.

Reviewers: dexonsmith

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D8718

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233826 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Analysis/BlockFrequencyInfoImpl.h
lib/Analysis/BlockFrequencyInfoImpl.cpp
test/Analysis/BlockFrequencyInfo/bad_input.ll
test/Analysis/BlockFrequencyInfo/loops_with_profile_info.ll [new file with mode: 0644]