From 34437f35e9ecc5891b3f8b50c52adc305dd19228 Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Tue, 8 Apr 2008 02:24:08 +0000 Subject: [PATCH] Fix insert point handling for multiple return values. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49367 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Utils/UnifyFunctionExitNodes.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp b/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp index 76b565c0e22..6cdaba53a05 100644 --- a/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp +++ b/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp @@ -117,13 +117,21 @@ bool UnifyFunctionExitNodes::runOnFunction(Function &F) { if (NumRetVals == 0) ReturnInst::Create(NULL, NewRetBlock); else if (const StructType *STy = dyn_cast(F.getReturnType())) { - Instruction *InsertPt = NewRetBlock->getFirstNonPHI(); + Instruction *InsertPt = NULL; + if (NumRetVals == 0) + InsertPt = NewRetBlock->getFirstNonPHI(); + PHINode *PN = NULL; for (unsigned i = 0; i < NumRetVals; ++i) { - PHINode *PN = PHINode::Create(STy->getElementType(i), "UnifiedRetVal." - + utostr(i), InsertPt); + if (InsertPt) + PN = PHINode::Create(STy->getElementType(i), "UnifiedRetVal." + + utostr(i), InsertPt); + else + PN = PHINode::Create(STy->getElementType(i), "UnifiedRetVal." + + utostr(i), NewRetBlock); Phis.push_back(PN); + InsertPt = PN; } - ReturnInst::Create(&Phis[0], NumRetVals); + ReturnInst::Create(&Phis[0], NumRetVals, NewRetBlock); } else { // If the function doesn't return void... add a PHI node to the block... -- 2.34.1