From: Chris Lattner Date: Thu, 18 Mar 2004 04:12:05 +0000 (+0000) Subject: Fix CodeExtractor/2004-03-17-OutputMismatch.ll X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=04229c192bc153210e8ee8a18eb28d7f1ec21bfe;p=oota-llvm.git Fix CodeExtractor/2004-03-17-OutputMismatch.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12486 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Utils/CodeExtractor.cpp b/lib/Transforms/Utils/CodeExtractor.cpp index 59f9876df57..694f06bdc6f 100644 --- a/lib/Transforms/Utils/CodeExtractor.cpp +++ b/lib/Transforms/Utils/CodeExtractor.cpp @@ -347,6 +347,10 @@ CodeExtractor::emitCallAndSwitchStatement(Function *newFunction, // just plain inputs for non-scalars std::vector params(inputs); + // Get an iterator to the first output argument. + Function::aiterator OutputArgBegin = newFunction->abegin(); + std::advance(OutputArgBegin, inputs.size()); + for (unsigned i = 0, e = outputs.size(); i != e; ++i) { Value *Output = outputs[i]; // Create allocas for scalar outputs @@ -401,12 +405,12 @@ CodeExtractor::emitCallAndSwitchStatement(Function *newFunction, // Restore values just before we exit // FIXME: Use a GetElementPtr to bunch the outputs in a struct - for (unsigned out = 0, e = outputs.size(); out != e; ++out) + Function::aiterator OAI = OutputArgBegin; + for (unsigned out = 0, e = outputs.size(); out != e; ++out, ++OAI) if (!DS || DS->dominates(cast(outputs[out])->getParent(), TI->getParent())) - new StoreInst(outputs[out], getFunctionArg(newFunction, out), - NTRet); + new StoreInst(outputs[out], OAI, NTRet); } // rewrite the original branch instruction with this new target