PPCRegisterInfo.h revision f1d78e83356a412e525c30ac90dabf090a8cfc99
121e463b2bf864671a87ebe386cb100ef9349a540Nate Begeman//===- PPCRegisterInfo.h - PowerPC Register Information Impl -----*- C++ -*-==// 2b5f662fa0314f7e7e690aae8ebff7136cc3a5ab0Misha Brukman// 3f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// The LLVM Compiler Infrastructure 4f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// 5f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// This file was developed by the LLVM research group and is distributed under 6f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// the University of Illinois Open Source License. See LICENSE.TXT for details. 7b5f662fa0314f7e7e690aae8ebff7136cc3a5ab0Misha Brukman// 8f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman//===----------------------------------------------------------------------===// 9f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// 10f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// This file contains the PowerPC implementation of the MRegisterInfo class. 11f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// 12f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman//===----------------------------------------------------------------------===// 13f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 14f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#ifndef POWERPC32_REGISTERINFO_H 15f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#define POWERPC32_REGISTERINFO_H 16f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 172668959b8879097db368aec7d76c455260abc75bChris Lattner#include "PPC.h" 184c7b43b43fdf943c7298718e15ab5d6dfe345be7Chris Lattner#include "PPCGenRegisterInfo.h.inc" 19f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#include <map> 20f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 21f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukmannamespace llvm { 22f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 23f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukmanclass Type; 24f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 2521e463b2bf864671a87ebe386cb100ef9349a540Nate Begemanclass PPCRegisterInfo : public PPCGenRegisterInfo { 26f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman std::map<unsigned, unsigned> ImmToIdxMap; 27f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukmanpublic: 2821e463b2bf864671a87ebe386cb100ef9349a540Nate Begeman PPCRegisterInfo(); 29f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 30f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman /// Code Generation virtual methods... 31f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void storeRegToStackSlot(MachineBasicBlock &MBB, 32f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman MachineBasicBlock::iterator MBBI, 330ffb1a56ff8439604556afd09ee0774655d7197cChris Lattner unsigned SrcReg, int FrameIndex, 340ffb1a56ff8439604556afd09ee0774655d7197cChris Lattner const TargetRegisterClass *RC) const; 35f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 36f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void loadRegFromStackSlot(MachineBasicBlock &MBB, 37f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman MachineBasicBlock::iterator MBBI, 380ffb1a56ff8439604556afd09ee0774655d7197cChris Lattner unsigned DestReg, int FrameIndex, 390ffb1a56ff8439604556afd09ee0774655d7197cChris Lattner const TargetRegisterClass *RC) const; 40b5f662fa0314f7e7e690aae8ebff7136cc3a5ab0Misha Brukman 41f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void copyRegToReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, 42f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman unsigned DestReg, unsigned SrcReg, 43f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman const TargetRegisterClass *RC) const; 44f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 45f38df04c3a0c2aa766fa50b254d2d0fc743f8152Chris Lattner /// foldMemoryOperand - PowerPC (like most RISC's) can only fold spills into 46f38df04c3a0c2aa766fa50b254d2d0fc743f8152Chris Lattner /// copy instructions, turning them into load/store instructions. 47f38df04c3a0c2aa766fa50b254d2d0fc743f8152Chris Lattner virtual MachineInstr* foldMemoryOperand(MachineInstr* MI, unsigned OpNum, 48f38df04c3a0c2aa766fa50b254d2d0fc743f8152Chris Lattner int FrameIndex) const; 49f38df04c3a0c2aa766fa50b254d2d0fc743f8152Chris Lattner 50f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void eliminateCallFramePseudoInstr(MachineFunction &MF, 51f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman MachineBasicBlock &MBB, 52f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman MachineBasicBlock::iterator I) const; 53f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 54f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void eliminateFrameIndex(MachineBasicBlock::iterator II) const; 55f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 56f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void emitPrologue(MachineFunction &MF) const; 57f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; 58f1d78e83356a412e525c30ac90dabf090a8cfc99Jim Laskey 59f1d78e83356a412e525c30ac90dabf090a8cfc99Jim Laskey void getLocation(MachineFunction &MF, unsigned Index, 60f1d78e83356a412e525c30ac90dabf090a8cfc99Jim Laskey MachineLocation &ML) const; 61f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman}; 62f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 63f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman} // end namespace llvm 64f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 65f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#endif 66