From b90f1fd9fb16c5e4c2d64f9cda15d2832a7a88bf Mon Sep 17 00:00:00 2001 From: Juergen Ributzka Date: Tue, 15 Jul 2014 02:22:43 +0000 Subject: [PATCH] [FastISel] Fix patchpoint lowering to set the result register. 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 | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/CodeGen/SelectionDAG/FastISel.cpp b/lib/CodeGen/SelectionDAG/FastISel.cpp index 45c775dca29..0cd5facbb5e 100644 --- a/lib/CodeGen/SelectionDAG/FastISel.cpp +++ b/lib/CodeGen/SelectionDAG/FastISel.cpp @@ -748,10 +748,11 @@ bool FastISel::SelectPatchpoint(const CallInst *I) { SmallVector 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 and 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; } -- 2.34.1