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