[FastISel] Fix patchpoint lowering to set the result register.
authorJuergen Ributzka <juergen@apple.com>
Tue, 15 Jul 2014 02:22:43 +0000 (02:22 +0000)
committerJuergen Ributzka <juergen@apple.com>
Tue, 15 Jul 2014 02:22:43 +0000 (02:22 +0000)
Always update the value map with the result register (if there is one), for the
patchpoint instruction we created to replace the target-specific call
instruction.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213033 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/FastISel.cpp

index 45c775dca293923b8e5a06940ff4af613f634101..0cd5facbb5eeb08b7322fa051691db06ce4edd1b 100644 (file)
@@ -748,10 +748,11 @@ bool FastISel::SelectPatchpoint(const CallInst *I) {
   SmallVector<MachineOperand, 32> Ops;
 
   // Add an explicit result reg if we use the anyreg calling convention.
-  unsigned ResultReg = 0;
   if (IsAnyRegCC && HasDef) {
-    ResultReg = createResultReg(TLI.getRegClassFor(MVT::i64));
-    Ops.push_back(MachineOperand::CreateReg(ResultReg, /*IsDef=*/true));
+    assert(CLI.NumResultRegs == 0 && "Unexpected result register.");
+    CLI.ResultReg = createResultReg(TLI.getRegClassFor(MVT::i64));
+    CLI.NumResultRegs = 1;
+    Ops.push_back(MachineOperand::CreateReg(CLI.ResultReg, /*IsDef=*/true));
   }
 
   // Add the <id> and <numBytes> constants.
@@ -839,8 +840,8 @@ bool FastISel::SelectPatchpoint(const CallInst *I) {
   // Inform the Frame Information that we have a patchpoint in this function.
   FuncInfo.MF->getFrameInfo()->setHasPatchPoint();
 
-  if (ResultReg)
-    UpdateValueMap(I, ResultReg);
+  if (CLI.NumResultRegs)
+    UpdateValueMap(I, CLI.ResultReg, CLI.NumResultRegs);
   return true;
 }