SparcRegisterInfo.h revision fcb25e60f514e4dbceecef73ac229c61d6202ed2
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===-- SparcRegisterInfo.h - Sparc Register Information Impl ---*- C++ -*-===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file contains the Sparc implementation of the TargetRegisterInfo class.
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SPARCREGISTERINFO_H
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SPARCREGISTERINFO_H
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "llvm/Target/TargetRegisterInfo.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GET_REGINFO_HEADER
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "SparcGenRegisterInfo.inc"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace llvm {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SparcSubtarget;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TargetInstrInfo;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Type;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct SparcRegisterInfo : public SparcGenRegisterInfo {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SparcSubtarget &Subtarget;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const TargetInstrInfo &TII;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SparcRegisterInfo(SparcSubtarget &st, const TargetInstrInfo &tii);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Code Generation virtual methods...
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const uint16_t *getCalleeSavedRegs(const MachineFunction *MF = 0) const;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BitVector getReservedRegs(const MachineFunction &MF) const;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const TargetRegisterClass *getPointerRegClass(const MachineFunction &MF,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                unsigned Kind) const;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void eliminateFrameIndex(MachineBasicBlock::iterator II,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int SPAdj, unsigned FIOperandNum,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           RegScavenger *RS = NULL) const;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void processFunctionBeforeFrameFinalized(MachineFunction &MF,
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       RegScavenger *RS = NULL) const;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Debug information queries.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  unsigned getFrameRegister(const MachineFunction &MF) const;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Exception handling queries.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  unsigned getEHExceptionRegister() const;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  unsigned getEHHandlerRegister() const;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // end namespace llvm
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)