1dd58ef01SDimitry Andric //===-- X86MachineFunctionInfo.cpp - X86 machine function info ------------===// 263faed5bSDimitry Andric // 3e6d15924SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e6d15924SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5e6d15924SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 663faed5bSDimitry Andric // 763faed5bSDimitry Andric //===----------------------------------------------------------------------===// 863faed5bSDimitry Andric 963faed5bSDimitry Andric #include "X86MachineFunctionInfo.h" 1067c32a98SDimitry Andric #include "X86RegisterInfo.h" 1171d5a254SDimitry Andric #include "llvm/CodeGen/MachineRegisterInfo.h" 12044eb2f6SDimitry Andric #include "llvm/CodeGen/TargetSubtargetInfo.h" 1363faed5bSDimitry Andric 1463faed5bSDimitry Andric using namespace llvm; 1563faed5bSDimitry Andric X86MachineFunctionInfo(const llvm::X86MachineFunctionInfo & MFI)16ac9a064cSDimitry Andricyaml::X86MachineFunctionInfo::X86MachineFunctionInfo( 17ac9a064cSDimitry Andric const llvm::X86MachineFunctionInfo &MFI) 18ac9a064cSDimitry Andric : AMXProgModel(MFI.getAMXProgModel()) {} 19ac9a064cSDimitry Andric mappingImpl(yaml::IO & YamlIO)20ac9a064cSDimitry Andricvoid yaml::X86MachineFunctionInfo::mappingImpl(yaml::IO &YamlIO) { 21ac9a064cSDimitry Andric MappingTraits<X86MachineFunctionInfo>::mapping(YamlIO, *this); 22ac9a064cSDimitry Andric } 23ac9a064cSDimitry Andric clone(BumpPtrAllocator & Allocator,MachineFunction & DestMF,const DenseMap<MachineBasicBlock *,MachineBasicBlock * > & Src2DstMBB) const24145449b1SDimitry AndricMachineFunctionInfo *X86MachineFunctionInfo::clone( 25145449b1SDimitry Andric BumpPtrAllocator &Allocator, MachineFunction &DestMF, 26145449b1SDimitry Andric const DenseMap<MachineBasicBlock *, MachineBasicBlock *> &Src2DstMBB) 27145449b1SDimitry Andric const { 28145449b1SDimitry Andric return DestMF.cloneInfo<X86MachineFunctionInfo>(*this); 29145449b1SDimitry Andric } 30145449b1SDimitry Andric initializeBaseYamlFields(const yaml::X86MachineFunctionInfo & YamlMFI)31ac9a064cSDimitry Andricvoid X86MachineFunctionInfo::initializeBaseYamlFields( 32ac9a064cSDimitry Andric const yaml::X86MachineFunctionInfo &YamlMFI) { 33ac9a064cSDimitry Andric AMXProgModel = YamlMFI.AMXProgModel; 34ac9a064cSDimitry Andric } 35ac9a064cSDimitry Andric anchor()3663faed5bSDimitry Andricvoid X86MachineFunctionInfo::anchor() { } 3767c32a98SDimitry Andric setRestoreBasePointer(const MachineFunction * MF)3867c32a98SDimitry Andricvoid X86MachineFunctionInfo::setRestoreBasePointer(const MachineFunction *MF) { 3967c32a98SDimitry Andric if (!RestoreBasePointerOffset) { 4067c32a98SDimitry Andric const X86RegisterInfo *RegInfo = static_cast<const X86RegisterInfo *>( 4167c32a98SDimitry Andric MF->getSubtarget().getRegisterInfo()); 4267c32a98SDimitry Andric unsigned SlotSize = RegInfo->getSlotSize(); 4371d5a254SDimitry Andric for (const MCPhysReg *CSR = MF->getRegInfo().getCalleeSavedRegs(); 4471d5a254SDimitry Andric unsigned Reg = *CSR; ++CSR) { 4567c32a98SDimitry Andric if (X86::GR64RegClass.contains(Reg) || X86::GR32RegClass.contains(Reg)) 4667c32a98SDimitry Andric RestoreBasePointerOffset -= SlotSize; 4767c32a98SDimitry Andric } 4867c32a98SDimitry Andric } 4967c32a98SDimitry Andric } 5067c32a98SDimitry Andric 51