X86RegisterInfo.h revision b499866c05cac0e97a22c5e1f477c89096be836b
1//===- X86RegisterInfo.h - X86 Register Information Impl --------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file was developed by the LLVM research group and is distributed under 6// the University of Illinois Open Source License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file contains the X86 implementation of the MRegisterInfo class. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef X86REGISTERINFO_H 15#define X86REGISTERINFO_H 16 17#include "llvm/Target/MRegisterInfo.h" 18 19class llvm::Type; 20 21#include "X86GenRegisterInfo.h.inc" 22 23namespace llvm { 24 25struct X86RegisterInfo : public X86GenRegisterInfo { 26 X86RegisterInfo(); 27 const TargetRegisterClass* getRegClassForType(const Type* Ty) const; 28 29 /// Code Generation virtual methods... 30 int storeRegToStackSlot(MachineBasicBlock &MBB, 31 MachineBasicBlock::iterator MI, 32 unsigned SrcReg, int FrameIndex, 33 const TargetRegisterClass *RC) const; 34 35 int loadRegFromStackSlot(MachineBasicBlock &MBB, 36 MachineBasicBlock::iterator MI, 37 unsigned DestReg, int FrameIndex, 38 const TargetRegisterClass *RC) const; 39 40 int copyRegToReg(MachineBasicBlock &MBB, 41 MachineBasicBlock::iterator MI, 42 unsigned DestReg, unsigned SrcReg, 43 const TargetRegisterClass *RC) const; 44 45 virtual bool canFoldMemoryOperand(MachineInstr* MI, unsigned i) const; 46 47 virtual int foldMemoryOperand(MachineInstr* MI, unsigned i, 48 int FrameIndex) const; 49 50 void eliminateCallFramePseudoInstr(MachineFunction &MF, 51 MachineBasicBlock &MBB, 52 MachineBasicBlock::iterator MI) const; 53 54 void eliminateFrameIndex(MachineFunction &MF, 55 MachineBasicBlock::iterator MI) const; 56 57 void processFunctionBeforeFrameFinalized(MachineFunction &MF) const; 58 59 void emitPrologue(MachineFunction &MF) const; 60 void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; 61}; 62 63} // End llvm namespace 64 65#endif 66