SparcRegisterInfo.h revision c0f64ffab93d11fb27a3b8a0707b77400918a20e
16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//===- SparcRegisterInfo.h - Sparc Register Information Impl ----*- C++ -*-===//
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//                     The LLVM Compiler Infrastructure
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// This file was developed by the LLVM research group and is distributed under
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// the University of Illinois Open Source License. See LICENSE.TXT for details.
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//===----------------------------------------------------------------------===//
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// This file contains the Sparc implementation of the MRegisterInfo class.
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//===----------------------------------------------------------------------===//
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef SPARCREGISTERINFO_H
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SPARCREGISTERINFO_H
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "llvm/Target/MRegisterInfo.h"
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "SparcGenRegisterInfo.h.inc"
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgnamespace llvm {
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass SparcSubtarget;
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass TargetInstrInfo;
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass Type;
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct SparcRegisterInfo : public SparcGenRegisterInfo {
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  SparcSubtarget &Subtarget;
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  const TargetInstrInfo &TII;
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  SparcRegisterInfo(SparcSubtarget &st, const TargetInstrInfo &tii);
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /// Code Generation virtual methods...
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  void storeRegToStackSlot(MachineBasicBlock &MBB,
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           MachineBasicBlock::iterator MBBI,
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           unsigned SrcReg, int FrameIndex,
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           const TargetRegisterClass *RC) const;
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  void loadRegFromStackSlot(MachineBasicBlock &MBB,
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            MachineBasicBlock::iterator MBBI,
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            unsigned DestReg, int FrameIndex,
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            const TargetRegisterClass *RC) const;
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  void copyRegToReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    unsigned DestReg, unsigned SrcReg,
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    const TargetRegisterClass *RC) const;
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  virtual MachineInstr* foldMemoryOperand(MachineInstr* MI,
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                          unsigned OpNum,
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                          int FrameIndex) const;
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  const unsigned *getCalleeSaveRegs() const;
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  const TargetRegisterClass* const* getCalleeSaveRegClasses() const;
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  void eliminateCallFramePseudoInstr(MachineFunction &MF,
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                     MachineBasicBlock &MBB,
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                     MachineBasicBlock::iterator I) const;
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  void eliminateFrameIndex(MachineBasicBlock::iterator II) const;
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;
62
63  void emitPrologue(MachineFunction &MF) const;
64  void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;
65
66  // Debug information queries.
67  unsigned getRARegister() const;
68  unsigned getFrameRegister(MachineFunction &MF) const;
69};
70
71} // end namespace llvm
72
73#endif
74