Enhance loop rotation with existence of profile data in MachineBlockPlacement pass.
authorCong Hou <congh@google.com>
Mon, 19 Oct 2015 23:16:40 +0000 (23:16 +0000)
committerCong Hou <congh@google.com>
Mon, 19 Oct 2015 23:16:40 +0000 (23:16 +0000)
commitf2558c2db4a9820e578a212f5e6faf36c9e46f1d
treeff10bd480fb016233454f7fb7e4f159bc24c0798
parente61c7b5220cd118c005cba94fc14e2598b68f59e
Enhance loop rotation with existence of profile data in MachineBlockPlacement pass.

Currently, in MachineBlockPlacement pass the loop is rotated to let the best exit to be the last BB in the loop chain, to maximize the fall-through from the loop to outside. With profile data, we can determine the cost in terms of missed fall through opportunities when rotating a loop chain and select the best rotation. Basically, there are three kinds of cost to consider for each rotation:

1. The possibly missed fall through edge (if it exists) from BB out of the loop to the loop header.
2. The possibly missed fall through edges (if they exist) from the loop exits to BB out of the loop.
3. The missed fall through edge (if it exists) from the last BB to the first BB in the loop chain.

Therefore, the cost for a given rotation is the sum of costs listed above. We select the best rotation with the smallest cost. This is only for PGO mode when we have more precise edge frequencies.

Differential revision: http://reviews.llvm.org/D10717

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250754 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/MachineBlockPlacement.cpp
test/CodeGen/X86/code_placement_loop_rotation.ll [new file with mode: 0644]
test/CodeGen/X86/code_placement_loop_rotation2.ll [new file with mode: 0644]