}
}
+// FIXME: Get this from tablegen.
static ArrayRef<MCPhysReg> get64BitArgumentGPRs(CallingConv::ID CallConv,
const X86Subtarget *Subtarget) {
assert(Subtarget->is64Bit());
static const MCPhysReg GPR64ArgRegsWin64[] = {
X86::RCX, X86::RDX, X86::R8, X86::R9
};
- return GPR64ArgRegsWin64;
+ return makeArrayRef(std::begin(GPR64ArgRegsWin64), std::end(GPR64ArgRegsWin64));
}
static const MCPhysReg GPR64ArgRegs64Bit[] = {
X86::RDI, X86::RSI, X86::RDX, X86::RCX, X86::R8, X86::R9
};
- return GPR64ArgRegs64Bit;
+ return makeArrayRef(std::begin(GPR64ArgRegs64Bit), std::end(GPR64ArgRegs64Bit));
}
+// FIXME: Get this from tablegen.
static ArrayRef<MCPhysReg> get64BitArgumentXMMs(MachineFunction &MF,
CallingConv::ID CallConv,
const X86Subtarget *Subtarget) {
// The XMM registers which might contain var arg parameters are shadowed
// in their paired GPR. So we only need to save the GPR to their home
// slots.
+ // TODO: __vectorcall will change this.
return None;
}
X86::XMM0, X86::XMM1, X86::XMM2, X86::XMM3,
X86::XMM4, X86::XMM5, X86::XMM6, X86::XMM7
};
- return XMMArgRegs64Bit;
+ return makeArrayRef(std::begin(XMMArgRegs64Bit), std::end(XMMArgRegs64Bit));
}
SDValue
if (!MemOps.empty())
Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOps);
} else {
- // TODO: Save virtual registers away some where so we can do
- // getCopyFromReg in the musttail call lowering bb.
+ // Add all GPRs, al, and XMMs to the list of forwards. We will add then
+ // to the liveout set on a musttail call.
assert(MFI->hasMustTailInVarArgFunc());
auto &Forwards = FuncInfo->getForwardedMustTailRegParms();
typedef X86MachineFunctionInfo::Forward Forward;
- // Add all GPRs, al, and XMMs to the list of forwards.
for (unsigned I = 0, E = LiveGPRs.size(); I != E; ++I) {
unsigned VReg =
MF.getRegInfo().createVirtualRegister(&X86::GR64RegClass);