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