PPCRegisterInfo.h revision f38df04c3a0c2aa766fa50b254d2d0fc743f8152
1f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman//===- PPC32RegisterInfo.h - PowerPC32 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 17f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#include "PowerPC.h" 18f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#include "PPC32GenRegisterInfo.h.inc" 19f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#include <map> 20f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 21f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukmannamespace llvm { 22f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 23f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukmanclass Type; 24f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 25f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukmanclass PPC32RegisterInfo : public PPC32GenRegisterInfo { 26f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman std::map<unsigned, unsigned> ImmToIdxMap; 27f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukmanpublic: 28f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman PPC32RegisterInfo(); 29f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 30f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman /// Code Generation virtual methods... 31f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void storeRegToStackSlot(MachineBasicBlock &MBB, 32f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman MachineBasicBlock::iterator MBBI, 33f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman unsigned SrcReg, int FrameIndex) const; 34f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 35f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void loadRegFromStackSlot(MachineBasicBlock &MBB, 36f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman MachineBasicBlock::iterator MBBI, 37f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman unsigned DestReg, int FrameIndex) const; 38b5f662fa0314f7e7e690aae8ebff7136cc3a5ab0Misha Brukman 39f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void copyRegToReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, 40f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman unsigned DestReg, unsigned SrcReg, 41f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman const TargetRegisterClass *RC) const; 42f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 43f38df04c3a0c2aa766fa50b254d2d0fc743f8152Chris Lattner /// foldMemoryOperand - PowerPC (like most RISC's) can only fold spills into 44f38df04c3a0c2aa766fa50b254d2d0fc743f8152Chris Lattner /// copy instructions, turning them into load/store instructions. 45f38df04c3a0c2aa766fa50b254d2d0fc743f8152Chris Lattner virtual MachineInstr* foldMemoryOperand(MachineInstr* MI, unsigned OpNum, 46f38df04c3a0c2aa766fa50b254d2d0fc743f8152Chris Lattner int FrameIndex) const; 47f38df04c3a0c2aa766fa50b254d2d0fc743f8152Chris Lattner 48f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void eliminateCallFramePseudoInstr(MachineFunction &MF, 49f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman MachineBasicBlock &MBB, 50f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman MachineBasicBlock::iterator I) const; 51f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 52f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void eliminateFrameIndex(MachineBasicBlock::iterator II) const; 53f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 54f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void emitPrologue(MachineFunction &MF) const; 55f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; 56f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman}; 57f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 58f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman} // end namespace llvm 59f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 60f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#endif 61