OSDN Git Service

[LCSSA] Handle PHI insertion in disjoint loops
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Mon, 22 Dec 2014 22:35:46 +0000 (22:35 +0000)
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Mon, 22 Dec 2014 22:35:46 +0000 (22:35 +0000)
commita559a2317c908b5cd8336360cffdde2d2a977006
tree2daedc587b346547158b0850697d2205ed956815
parente5ca21a2df48e3b3246629b141ea27eb69d7b643
[LCSSA] Handle PHI insertion in disjoint loops

Take two disjoint Loops L1 and L2.

LoopSimplify fails to simplify some loops (e.g. when indirect branches
are involved). In such situations, it can happen that an exit for L1 is
the header of L2. Thus, when we create PHIs in one of such exits we are
also inserting PHIs in L2 header.

This could break LCSSA form for L2 because these inserted PHIs can also
have uses in L2 exits, which are never handled in the current
implementation. Provide a fix for this corner case and test that we
don't assert/crash on that.

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

rdar://problem/19166231

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224740 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Transforms/Utils/LoopUtils.h
lib/Transforms/Scalar/LICM.cpp
lib/Transforms/Utils/LCSSA.cpp
lib/Transforms/Utils/LoopUnroll.cpp
test/Transforms/LCSSA/indirectbr.ll