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 Andric void X86MachineFunctionInfo::anchor() { }
1839d628a0SDimitry Andric 
setRestoreBasePointer(const MachineFunction * MF)1939d628a0SDimitry Andric void 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