mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 18:24:00 +00:00
Factor some code into a new FoldSingleEntryPHINodes method.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60501 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -54,6 +54,24 @@ void llvm::DeleteDeadBlock(BasicBlock *BB) {
|
||||
BB->eraseFromParent();
|
||||
}
|
||||
|
||||
/// FoldSingleEntryPHINodes - We know that BB has one predecessor. If there are
|
||||
/// any single-entry PHI nodes in it, fold them away. This handles the case
|
||||
/// when all entries to the PHI nodes in a block are guaranteed equal, such as
|
||||
/// when the block has exactly one predecessor.
|
||||
void llvm::FoldSingleEntryPHINodes(BasicBlock *BB) {
|
||||
if (!isa<PHINode>(BB->begin()))
|
||||
return;
|
||||
|
||||
while (PHINode *PN = dyn_cast<PHINode>(BB->begin())) {
|
||||
if (PN->getIncomingValue(0) != PN)
|
||||
PN->replaceAllUsesWith(PN->getIncomingValue(0));
|
||||
else
|
||||
PN->replaceAllUsesWith(UndefValue::get(PN->getType()));
|
||||
PN->eraseFromParent();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// MergeBlockIntoPredecessor - Attempts to merge a block into its predecessor,
|
||||
/// if possible. The return value indicates success or failure.
|
||||
bool llvm::MergeBlockIntoPredecessor(BasicBlock* BB, Pass* P) {
|
||||
|
Reference in New Issue
Block a user