PPCRegisterInfo.h revision 0ffb1a56ff8439604556afd09ee0774655d7197c
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, 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 456a78c2157ad1ca9608ebdb33a8cc9f86f4a74f2cChris Lattner unsigned isLoadFromStackSlot(MachineInstr *MI, int &FrameIndex) const; 466a78c2157ad1ca9608ebdb33a8cc9f86f4a74f2cChris Lattner 47f38df04c3a0c2aa766fa50b254d2d0fc743f8152Chris Lattner /// foldMemoryOperand - PowerPC (like most RISC's) can only fold spills into 48f38df04c3a0c2aa766fa50b254d2d0fc743f8152Chris Lattner /// copy instructions, turning them into load/store instructions. 49f38df04c3a0c2aa766fa50b254d2d0fc743f8152Chris Lattner virtual MachineInstr* foldMemoryOperand(MachineInstr* MI, unsigned OpNum, 50f38df04c3a0c2aa766fa50b254d2d0fc743f8152Chris Lattner int FrameIndex) const; 51f38df04c3a0c2aa766fa50b254d2d0fc743f8152Chris Lattner 52f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void eliminateCallFramePseudoInstr(MachineFunction &MF, 53f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman MachineBasicBlock &MBB, 54f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman MachineBasicBlock::iterator I) const; 55f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 56f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void eliminateFrameIndex(MachineBasicBlock::iterator II) const; 57f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 58f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void emitPrologue(MachineFunction &MF) const; 59f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; 60f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman}; 61f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 62f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman} // end namespace llvm 63f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 64f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#endif 65