1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 19:12:56 +02:00

[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.

llvm-svn: 213033
This commit is contained in:
Juergen Ributzka 2014-07-15 02:22:43 +00:00
parent 211ccabffb
commit 23901e5103

View 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;
}