Change how PHINodes store their operands.
authorJay Foad <jay.foad@gmail.com>
Mon, 20 Jun 2011 14:38:01 +0000 (14:38 +0000)
committerJay Foad <jay.foad@gmail.com>
Mon, 20 Jun 2011 14:38:01 +0000 (14:38 +0000)
commit72f5f313d87558958696ce69593d82efcdfa9128
treede93d765561f6dd605919f206871568262f09a2d
parentc137120bb047a7017cbab21f5f9c9e6f65e2b84f
Change how PHINodes store their operands.

Change PHINodes to store simple pointers to their incoming basic blocks,
instead of full-blown Uses.

Note that this loses an optimization in SplitCriticalEdge(), because we
can no longer walk the use list of a BasicBlock to find phi nodes. See
the comment I removed starting "However, the foreach loop is slow for
blocks with lots of predecessors".

Extend replaceAllUsesWith() on a BasicBlock to also update any phi
nodes in the block's successors. This mimics what would have happened
when PHINodes were proper Users of their incoming blocks. (Note that
this only works if OldBB->replaceAllUsesWith(NewBB) is called when
OldBB still has a terminator instruction, so it still has some
successors.)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133435 91177308-0d34-0410-b5e6-96231b3b80d8
18 files changed:
include/llvm/BasicBlock.h
include/llvm/Instructions.h
include/llvm/Support/CFG.h
include/llvm/Use.h
lib/Target/CppBackend/CPPBackend.cpp
lib/Transforms/Scalar/LoopUnswitch.cpp
lib/Transforms/Utils/BasicBlockUtils.cpp
lib/Transforms/Utils/BreakCriticalEdges.cpp
lib/Transforms/Utils/CloneFunction.cpp
lib/Transforms/Utils/InlineFunction.cpp
lib/Transforms/Utils/Local.cpp
lib/Transforms/Utils/LoopUnroll.cpp
lib/Transforms/Utils/ValueMapper.cpp
lib/VMCore/BasicBlock.cpp
lib/VMCore/Instructions.cpp
lib/VMCore/User.cpp
lib/VMCore/Value.cpp
lib/VMCore/Verifier.cpp