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