From: Devang Patel Date: Mon, 10 Mar 2008 18:22:16 +0000 (+0000) Subject: Simplify X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=641ca93cff0f957fc5fb9dfb05d2a4a340aa8af7 Simplify git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48161 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Utils/InlineFunction.cpp b/lib/Transforms/Utils/InlineFunction.cpp index 9ccc918aca4..87e43e62f5d 100644 --- a/lib/Transforms/Utils/InlineFunction.cpp +++ b/lib/Transforms/Utils/InlineFunction.cpp @@ -22,6 +22,7 @@ #include "llvm/Analysis/CallGraph.h" #include "llvm/Target/TargetData.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringExtras.h" #include "llvm/Support/CallSite.h" using namespace llvm; @@ -531,9 +532,11 @@ bool llvm::InlineFunction(CallSite CS, CallGraph *CG, const TargetData *TD) { unsigned NumRetVals = STy->getNumElements(); // Create new phi nodes such that phi node number in the PHIs vector // match corresponding return value operand number. + Instruction *InsertPt = AfterCallBB->begin(); for (unsigned i = 0; i < NumRetVals; ++i) { PHINode *PHI = new PHINode(STy->getElementType(i), - TheCall->getName(), AfterCallBB->begin()); + TheCall->getName() + "." + utostr(i), + InsertPt); PHIs.push_back(PHI); } // TheCall results are used by GetResult instructions. @@ -555,25 +558,19 @@ bool llvm::InlineFunction(CallSite CS, CallGraph *CG, const TargetData *TD) { // appropriate. if (!PHIs.empty()) { const Type *RTy = CalledFunc->getReturnType(); - if (const StructType *STy = dyn_cast(RTy)) { - unsigned NumRetVals = STy->getNumElements(); - for (unsigned j = 0; j < NumRetVals; ++j) { - PHINode *PHI = PHIs[j]; - // Each PHI node will receive one value from each return instruction. - for(unsigned i = 0, e = Returns.size(); i != e; ++i) { - ReturnInst *RI = Returns[i]; - PHI->addIncoming(RI->getReturnValue(j /*PHI number matches operand number*/), - RI->getParent()); - } - } - } else { - for (unsigned i = 0, e = Returns.size(); i != e; ++i) { + // There is atleast one return value. + unsigned NumRetVals = 1; + if (const StructType *STy = dyn_cast(RTy)) + NumRetVals = STy->getNumElements(); + for (unsigned j = 0; j < NumRetVals; ++j) { + PHINode *PHI = PHIs[j]; + // Each PHI node will receive one value from each return instruction. + for(unsigned i = 0, e = Returns.size(); i != e; ++i) { ReturnInst *RI = Returns[i]; - assert(PHIs.size() == 1 && "Invalid number of PHI nodes"); - assert(RI->getReturnValue() && "Ret should have value!"); - assert(RI->getReturnValue()->getType() == PHIs[0]->getType() && + assert(RI->getReturnValue(j)->getType() == PHI->getType() && "Ret value not consistent in function!"); - PHIs[0]->addIncoming(RI->getReturnValue(), RI->getParent()); + PHI->addIncoming(RI->getReturnValue(j /*PHI number matches operand number*/), + RI->getParent()); } } }