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