OSDN Git Service

N.B. This is with the new EH scheme:
authorBill Wendling <isanbard@gmail.com>
Tue, 11 Oct 2011 22:42:31 +0000 (22:42 +0000)
committerBill Wendling <isanbard@gmail.com>
Tue, 11 Oct 2011 22:42:31 +0000 (22:42 +0000)
commitc83693f5b0aa26de55881345a79f4202ef9c3088
tree7f0af5cf69f9bdf3a8368e5b506c5b55bdccd13a
parent68ad5673e80d51add854a7336752e56e3e22afa0
N.B. This is with the new EH scheme:

The blocks with invokes have branches to the dispatch block, because that more
correctly models the behavior of the CFG. The dispatch of course has edges to
the landing pads. Those landing pads could contain invokes, which then have
branches back to the dispatch. This creates a loop. The machine LICM pass looks
at this loop and thinks it can hoist elements out of it. But because the
dispatch is an alternate entry point into the program, the hoisted instructions
won't be executed.

I wasn't able to get a testcase which was small and could reproduce all of the
time. The function_try_block.cpp in llvm-test was where this showed up.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141726 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/MachineLICM.cpp