summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Utils
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-06-17 01:45:53 +0000
committerChris Lattner <sabre@nondot.org>2005-06-17 01:45:53 +0000
commit5e735294bf5d8df67b8947016c675ca899d4fb79 (patch)
treeddc2e00ff1150f7379b3d52e8f6e0c59a2396152 /llvm/lib/Transforms/Utils
parent29ae6f6ed964d060f22ff7d63a02406240c749fc (diff)
downloadbcm5719-llvm-5e735294bf5d8df67b8947016c675ca899d4fb79.tar.gz
bcm5719-llvm-5e735294bf5d8df67b8947016c675ca899d4fb79.zip
Don't crash on: X = phi (X, X).
This fixes PR584 and Transforms/SimplifyCFG/2005-06-16-PHICrash.ll llvm-svn: 22232
Diffstat (limited to 'llvm/lib/Transforms/Utils')
-rw-r--r--llvm/lib/Transforms/Utils/SimplifyCFG.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
index ad78506ad42..6a3b803cbdb 100644
--- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
+++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -1461,12 +1461,15 @@ bool llvm::SimplifyCFG(BasicBlock *BB) {
BasicBlock::iterator AfterPHIIt = BB->begin();
while (isa<PHINode>(AfterPHIIt)) {
PHINode *PN = cast<PHINode>(AfterPHIIt++);
- if (PN->getIncomingValue(0) == PN->getIncomingValue(1))
- PN->replaceAllUsesWith(PN->getIncomingValue(0));
- else if (!DominatesMergePoint(PN->getIncomingValue(0), BB,
- &AggressiveInsts) ||
- !DominatesMergePoint(PN->getIncomingValue(1), BB,
- &AggressiveInsts)) {
+ if (PN->getIncomingValue(0) == PN->getIncomingValue(1)) {
+ if (PN->getIncomingValue(0) != PN)
+ PN->replaceAllUsesWith(PN->getIncomingValue(0));
+ else
+ PN->replaceAllUsesWith(UndefValue::get(PN->getType()));
+ } else if (!DominatesMergePoint(PN->getIncomingValue(0), BB,
+ &AggressiveInsts) ||
+ !DominatesMergePoint(PN->getIncomingValue(1), BB,
+ &AggressiveInsts)) {
CanPromote = false;
break;
}
OpenPOWER on IntegriCloud