1 //===-- X86MachineFunctionInfo.cpp - X86 machine function info ------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "X86MachineFunctionInfo.h" 10 #include "X86RegisterInfo.h" 11 #include "llvm/CodeGen/MachineRegisterInfo.h" 12 #include "llvm/CodeGen/TargetSubtargetInfo.h" 13 14 using namespace llvm; 15 X86MachineFunctionInfo(const llvm::X86MachineFunctionInfo & MFI)16yaml::X86MachineFunctionInfo::X86MachineFunctionInfo( 17 const llvm::X86MachineFunctionInfo &MFI) 18 : AMXProgModel(MFI.getAMXProgModel()) {} 19 mappingImpl(yaml::IO & YamlIO)20void yaml::X86MachineFunctionInfo::mappingImpl(yaml::IO &YamlIO) { 21 MappingTraits<X86MachineFunctionInfo>::mapping(YamlIO, *this); 22 } 23 clone(BumpPtrAllocator & Allocator,MachineFunction & DestMF,const DenseMap<MachineBasicBlock *,MachineBasicBlock * > & Src2DstMBB) const24MachineFunctionInfo *X86MachineFunctionInfo::clone( 25 BumpPtrAllocator &Allocator, MachineFunction &DestMF, 26 const DenseMap<MachineBasicBlock *, MachineBasicBlock *> &Src2DstMBB) 27 const { 28 return DestMF.cloneInfo<X86MachineFunctionInfo>(*this); 29 } 30 initializeBaseYamlFields(const yaml::X86MachineFunctionInfo & YamlMFI)31void X86MachineFunctionInfo::initializeBaseYamlFields( 32 const yaml::X86MachineFunctionInfo &YamlMFI) { 33 AMXProgModel = YamlMFI.AMXProgModel; 34 } 35 anchor()36void X86MachineFunctionInfo::anchor() { } 37 setRestoreBasePointer(const MachineFunction * MF)38void X86MachineFunctionInfo::setRestoreBasePointer(const MachineFunction *MF) { 39 if (!RestoreBasePointerOffset) { 40 const X86RegisterInfo *RegInfo = static_cast<const X86RegisterInfo *>( 41 MF->getSubtarget().getRegisterInfo()); 42 unsigned SlotSize = RegInfo->getSlotSize(); 43 for (const MCPhysReg *CSR = MF->getRegInfo().getCalleeSavedRegs(); 44 unsigned Reg = *CSR; ++CSR) { 45 if (X86::GR64RegClass.contains(Reg) || X86::GR32RegClass.contains(Reg)) 46 RestoreBasePointerOffset -= SlotSize; 47 } 48 } 49 } 50 51