aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/Scalar/LoopIndexSplit.cpp
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2008-02-14 23:18:47 +0000
committerDevang Patel <dpatel@apple.com>2008-02-14 23:18:47 +0000
commit9b03daa2a3a668e4313e0d869bb10aad5b08262a (patch)
treeddca8e253b188c8457ffd85b0e34846b00884a5e /lib/Transforms/Scalar/LoopIndexSplit.cpp
parent5a0e7b41c1b6cb2d9b4d877996c09f0ad7235572 (diff)
If loop header is also loop exiting block then OrigPN is incoming value for B loop header.
Fixes PR 2030. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47141 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/LoopIndexSplit.cpp')
-rw-r--r--lib/Transforms/Scalar/LoopIndexSplit.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/Transforms/Scalar/LoopIndexSplit.cpp b/lib/Transforms/Scalar/LoopIndexSplit.cpp
index a0bfe4f082..3aedb93fd1 100644
--- a/lib/Transforms/Scalar/LoopIndexSplit.cpp
+++ b/lib/Transforms/Scalar/LoopIndexSplit.cpp
@@ -1465,7 +1465,13 @@ bool LoopIndexSplit::splitLoop(SplitInfo &SD) {
PN->addIncoming(SD.B_StartValue, A_ExitingBlock);
else {
PHINode *OrigPN = cast<PHINode>(InverseMap[PN]);
- Value *V2 = OrigPN->getIncomingValueForBlock(A_ExitingBlock);
+ Value *V2 = NULL;
+ // If loop header is also loop exiting block then
+ // OrigPN is incoming value for B loop header.
+ if (A_ExitingBlock == L->getHeader())
+ V2 = OrigPN;
+ else
+ V2 = OrigPN->getIncomingValueForBlock(A_ExitingBlock);
PN->addIncoming(V2, A_ExitingBlock);
}
} else