From: Devang Patel Date: Tue, 8 Apr 2008 02:24:08 +0000 (+0000) Subject: Fix insert point handling for multiple return values. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=34437f35e9ecc5891b3f8b50c52adc305dd19228;p=oota-llvm.git 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 --- 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...