17d523365SDimitry Andric //===-- X86MachineFunctionInfo.cpp - X86 machine function info ------------===// 2dff0c46cSDimitry Andric // 3dff0c46cSDimitry Andric // The LLVM Compiler Infrastructure 4dff0c46cSDimitry Andric // 5dff0c46cSDimitry Andric // This file is distributed under the University of Illinois Open Source 6dff0c46cSDimitry Andric // License. See LICENSE.TXT for details. 7dff0c46cSDimitry Andric // 8dff0c46cSDimitry Andric //===----------------------------------------------------------------------===// 9dff0c46cSDimitry Andric 10dff0c46cSDimitry Andric #include "X86MachineFunctionInfo.h" 1139d628a0SDimitry Andric #include "X86RegisterInfo.h" 127a7e6055SDimitry Andric #include "llvm/CodeGen/MachineRegisterInfo.h" 13*2cab237bSDimitry Andric #include "llvm/CodeGen/TargetSubtargetInfo.h" 14dff0c46cSDimitry Andric 15dff0c46cSDimitry Andric using namespace llvm; 16dff0c46cSDimitry Andric anchor()17dff0c46cSDimitry Andricvoid X86MachineFunctionInfo::anchor() { } 1839d628a0SDimitry Andric setRestoreBasePointer(const MachineFunction * MF)1939d628a0SDimitry Andricvoid X86MachineFunctionInfo::setRestoreBasePointer(const MachineFunction *MF) { 2039d628a0SDimitry Andric if (!RestoreBasePointerOffset) { 2139d628a0SDimitry Andric const X86RegisterInfo *RegInfo = static_cast<const X86RegisterInfo *>( 2239d628a0SDimitry Andric MF->getSubtarget().getRegisterInfo()); 2339d628a0SDimitry Andric unsigned SlotSize = RegInfo->getSlotSize(); 247a7e6055SDimitry Andric for (const MCPhysReg *CSR = MF->getRegInfo().getCalleeSavedRegs(); 257a7e6055SDimitry Andric unsigned Reg = *CSR; ++CSR) { 2639d628a0SDimitry Andric if (X86::GR64RegClass.contains(Reg) || X86::GR32RegClass.contains(Reg)) 2739d628a0SDimitry Andric RestoreBasePointerOffset -= SlotSize; 2839d628a0SDimitry Andric } 2939d628a0SDimitry Andric } 3039d628a0SDimitry Andric } 3139d628a0SDimitry Andric 32