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