Fix CodeExtractor/2004-03-17-OutputMismatch.ll
authorChris Lattner <sabre@nondot.org>
Thu, 18 Mar 2004 04:12:05 +0000 (04:12 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 18 Mar 2004 04:12:05 +0000 (04:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12486 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/CodeExtractor.cpp

index 59f9876df571544e96d35fffe598568d3af16348..694f06bdc6f291811f8ced06cf37a56ea26f85aa 100644 (file)
@@ -347,6 +347,10 @@ CodeExtractor::emitCallAndSwitchStatement(Function *newFunction,
   // just plain inputs for non-scalars
   std::vector<Value*> 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<Instruction>(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