X86RegisterInfo.h revision b499866c05cac0e97a22c5e1f477c89096be836b
1128aff4f9502a99af3573b98eb254490b3137646Chris Lattner//===- X86RegisterInfo.h - X86 Register Information Impl --------*- C++ -*-===//
2856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell//
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.
7856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell//
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();
27128aff4f9502a99af3573b98eb254490b3137646Chris Lattner  const TargetRegisterClass* getRegClassForType(const Type* Ty) const;
286811c6e1d72e55f79202b69acd15f6098967913eChris Lattner
29128aff4f9502a99af3573b98eb254490b3137646Chris Lattner  /// Code Generation virtual methods...
30e668dab5b339df01920b8bff890a70455b7dd27aAlkis Evlogimenos  int storeRegToStackSlot(MachineBasicBlock &MBB,
31024126ee23e6e4430a77025b61d0e713180f03d3Alkis Evlogimenos                          MachineBasicBlock::iterator MI,
32e668dab5b339df01920b8bff890a70455b7dd27aAlkis Evlogimenos                          unsigned SrcReg, int FrameIndex,
33e668dab5b339df01920b8bff890a70455b7dd27aAlkis Evlogimenos                          const TargetRegisterClass *RC) const;
34e668dab5b339df01920b8bff890a70455b7dd27aAlkis Evlogimenos
35e668dab5b339df01920b8bff890a70455b7dd27aAlkis Evlogimenos  int loadRegFromStackSlot(MachineBasicBlock &MBB,
36024126ee23e6e4430a77025b61d0e713180f03d3Alkis Evlogimenos                           MachineBasicBlock::iterator MI,
37e668dab5b339df01920b8bff890a70455b7dd27aAlkis Evlogimenos                           unsigned DestReg, int FrameIndex,
38e668dab5b339df01920b8bff890a70455b7dd27aAlkis Evlogimenos                           const TargetRegisterClass *RC) const;
39128aff4f9502a99af3573b98eb254490b3137646Chris Lattner
40c0b9dc5be79f009d260edb5cd5e1d8346587aaa2Alkis Evlogimenos  int copyRegToReg(MachineBasicBlock &MBB,
41024126ee23e6e4430a77025b61d0e713180f03d3Alkis Evlogimenos                   MachineBasicBlock::iterator MI,
426811c6e1d72e55f79202b69acd15f6098967913eChris Lattner		   unsigned DestReg, unsigned SrcReg,
436811c6e1d72e55f79202b69acd15f6098967913eChris Lattner		   const TargetRegisterClass *RC) const;
446811c6e1d72e55f79202b69acd15f6098967913eChris Lattner
45b499866c05cac0e97a22c5e1f477c89096be836bAlkis Evlogimenos  virtual bool canFoldMemoryOperand(MachineInstr* MI, unsigned i) const;
46b499866c05cac0e97a22c5e1f477c89096be836bAlkis Evlogimenos
47b499866c05cac0e97a22c5e1f477c89096be836bAlkis Evlogimenos  virtual int foldMemoryOperand(MachineInstr* MI, unsigned i,
48b499866c05cac0e97a22c5e1f477c89096be836bAlkis Evlogimenos                                int FrameIndex) const;
49b499866c05cac0e97a22c5e1f477c89096be836bAlkis Evlogimenos
50bb07ef97cfbe88eb5d69784acab5f36815738881Chris Lattner  void eliminateCallFramePseudoInstr(MachineFunction &MF,
51bb07ef97cfbe88eb5d69784acab5f36815738881Chris Lattner                                     MachineBasicBlock &MBB,
52bb07ef97cfbe88eb5d69784acab5f36815738881Chris Lattner                                     MachineBasicBlock::iterator MI) const;
532b46e8ecccfe8a6adc861158a21b67fb9e786885Misha Brukman
54bb07ef97cfbe88eb5d69784acab5f36815738881Chris Lattner  void eliminateFrameIndex(MachineFunction &MF,
55bb07ef97cfbe88eb5d69784acab5f36815738881Chris Lattner                           MachineBasicBlock::iterator MI) const;
56b83b28697ccabfcb6b8ddbc73fb3c4554f6d17ceMisha Brukman
57bb07ef97cfbe88eb5d69784acab5f36815738881Chris Lattner  void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;
5803c6fafd05c067d934d15ce8f472cb09740d0133Misha Brukman
59bb07ef97cfbe88eb5d69784acab5f36815738881Chris Lattner  void emitPrologue(MachineFunction &MF) const;
60bb07ef97cfbe88eb5d69784acab5f36815738881Chris Lattner  void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;
61726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner};
62726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner
63d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke} // End llvm namespace
64d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke
65726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner#endif
66