X86RegisterInfo.h revision 4188699f80c233a20b6ddc61570a8a8c1804cb85
1128aff4f9502a99af3573b98eb254490b3137646Chris Lattner//===- X86RegisterInfo.h - X86 Register Information Impl --------*- C++ -*-===//
20e0a7a45d3d0a8c865a078459d2e1c6d8967a100Misha Brukman//
3856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell//                     The LLVM Compiler Infrastructure
4856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell//
5856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell// This file was developed by the LLVM research group and is distributed under
6856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell// the University of Illinois Open Source License. See LICENSE.TXT for details.
70e0a7a45d3d0a8c865a078459d2e1c6d8967a100Misha Brukman//
8856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell//===----------------------------------------------------------------------===//
9726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner//
10726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner// This file contains the X86 implementation of the MRegisterInfo class.
11726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner//
12726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner//===----------------------------------------------------------------------===//
13726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner
14726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner#ifndef X86REGISTERINFO_H
15726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner#define X86REGISTERINFO_H
16726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner
17726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner#include "llvm/Target/MRegisterInfo.h"
18726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner
19d0fde30ce850b78371fd1386338350591f9ff494Brian Gaekeclass llvm::Type;
20b83b28697ccabfcb6b8ddbc73fb3c4554f6d17ceMisha Brukman
217ad3e063f508218a2823bd5cf092ef622ed7ba6cChris Lattner#include "X86GenRegisterInfo.h.inc"
226811c6e1d72e55f79202b69acd15f6098967913eChris Lattner
23d0fde30ce850b78371fd1386338350591f9ff494Brian Gaekenamespace llvm {
24d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke
257ad3e063f508218a2823bd5cf092ef622ed7ba6cChris Lattnerstruct X86RegisterInfo : public X86GenRegisterInfo {
267ad3e063f508218a2823bd5cf092ef622ed7ba6cChris Lattner  X86RegisterInfo();
276811c6e1d72e55f79202b69acd15f6098967913eChris Lattner
28128aff4f9502a99af3573b98eb254490b3137646Chris Lattner  /// Code Generation virtual methods...
2901d0efba3982e98e2dc7bc534406fbf9fd1af137Chris Lattner  void storeRegToStackSlot(MachineBasicBlock &MBB,
30024126ee23e6e4430a77025b61d0e713180f03d3Alkis Evlogimenos                           MachineBasicBlock::iterator MI,
3197d5e6461a28790fa341d9e3b58f043db549dc6aChris Lattner                           unsigned SrcReg, int FrameIndex,
3297d5e6461a28790fa341d9e3b58f043db549dc6aChris Lattner                           const TargetRegisterClass *RC) const;
3301d0efba3982e98e2dc7bc534406fbf9fd1af137Chris Lattner
3401d0efba3982e98e2dc7bc534406fbf9fd1af137Chris Lattner  void loadRegFromStackSlot(MachineBasicBlock &MBB,
3501d0efba3982e98e2dc7bc534406fbf9fd1af137Chris Lattner                            MachineBasicBlock::iterator MI,
3697d5e6461a28790fa341d9e3b58f043db549dc6aChris Lattner                            unsigned DestReg, int FrameIndex,
3797d5e6461a28790fa341d9e3b58f043db549dc6aChris Lattner                            const TargetRegisterClass *RC) const;
380e0a7a45d3d0a8c865a078459d2e1c6d8967a100Misha Brukman
3901d0efba3982e98e2dc7bc534406fbf9fd1af137Chris Lattner  void copyRegToReg(MachineBasicBlock &MBB,
4001d0efba3982e98e2dc7bc534406fbf9fd1af137Chris Lattner                    MachineBasicBlock::iterator MI,
4101d0efba3982e98e2dc7bc534406fbf9fd1af137Chris Lattner                    unsigned DestReg, unsigned SrcReg,
4201d0efba3982e98e2dc7bc534406fbf9fd1af137Chris Lattner                    const TargetRegisterClass *RC) const;
436811c6e1d72e55f79202b69acd15f6098967913eChris Lattner
445a051f65d3074126b762eaf44b30c44e996577feChris Lattner  /// foldMemoryOperand - If this target supports it, fold a load or store of
455a051f65d3074126b762eaf44b30c44e996577feChris Lattner  /// the specified stack slot into the specified machine instruction for the
465a051f65d3074126b762eaf44b30c44e996577feChris Lattner  /// specified operand.  If this is possible, the target should perform the
475a051f65d3074126b762eaf44b30c44e996577feChris Lattner  /// folding and return true, otherwise it should return false.  If it folds
485a051f65d3074126b762eaf44b30c44e996577feChris Lattner  /// the instruction, it is likely that the MachineInstruction the iterator
495a051f65d3074126b762eaf44b30c44e996577feChris Lattner  /// references has been changed.
50a1a7148c4de22a2cedc76b97ef80569b36698342Alkis Evlogimenos  virtual MachineInstr* foldMemoryOperand(MachineInstr* MI,
5139354c99a158685d8bc91b0836c283e936a29cb2Alkis Evlogimenos                                          unsigned OpNum,
5239354c99a158685d8bc91b0836c283e936a29cb2Alkis Evlogimenos                                          int FrameIndex) const;
53b499866c05cac0e97a22c5e1f477c89096be836bAlkis Evlogimenos
54b499866c05cac0e97a22c5e1f477c89096be836bAlkis Evlogimenos
55bb07ef97cfbe88eb5d69784acab5f36815738881Chris Lattner  void eliminateCallFramePseudoInstr(MachineFunction &MF,
56bb07ef97cfbe88eb5d69784acab5f36815738881Chris Lattner                                     MachineBasicBlock &MBB,
57bb07ef97cfbe88eb5d69784acab5f36815738881Chris Lattner                                     MachineBasicBlock::iterator MI) const;
582b46e8ecccfe8a6adc861158a21b67fb9e786885Misha Brukman
59f8be5e94aaf70d53dc043f5e541fc0bf6771db22Nate Begeman  void eliminateFrameIndex(MachineBasicBlock::iterator MI) const;
60b83b28697ccabfcb6b8ddbc73fb3c4554f6d17ceMisha Brukman
61bb07ef97cfbe88eb5d69784acab5f36815738881Chris Lattner  void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;
6203c6fafd05c067d934d15ce8f472cb09740d0133Misha Brukman
63bb07ef97cfbe88eb5d69784acab5f36815738881Chris Lattner  void emitPrologue(MachineFunction &MF) const;
64bb07ef97cfbe88eb5d69784acab5f36815738881Chris Lattner  void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;
65f1d78e83356a412e525c30ac90dabf090a8cfc99Jim Laskey
66a99791886d5d4af2b900cd8cc1c9ed1677b6f0f4Jim Laskey  // Debug information queries.
674188699f80c233a20b6ddc61570a8a8c1804cb85Jim Laskey  unsigned getRARegister() const;
68a99791886d5d4af2b900cd8cc1c9ed1677b6f0f4Jim Laskey  unsigned getFrameRegister(MachineFunction &MF) const;
69726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner};
70726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner
71d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke} // End llvm namespace
72d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke
73726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner#endif
74