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