131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- XCoreRegisterInfo.h - XCore Register Information Impl ---*- C++ -*-===// 2b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// 3b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// The LLVM Compiler Infrastructure 4b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// 5b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// This file is distributed under the University of Illinois Open Source 6b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// License. See LICENSE.TXT for details. 7b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// 8b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne//===----------------------------------------------------------------------===// 9b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// 10b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// This file contains the XCore implementation of the MRegisterInfo class. 11b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// 12b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne//===----------------------------------------------------------------------===// 13b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 14b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#ifndef XCOREREGISTERINFO_H 15b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#define XCOREREGISTERINFO_H 16b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 17b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#include "llvm/Target/TargetRegisterInfo.h" 1873f50d9bc3bd46cc0abeba9bb0d46977ba1aea42Evan Cheng 1973f50d9bc3bd46cc0abeba9bb0d46977ba1aea42Evan Cheng#define GET_REGINFO_HEADER 2073f50d9bc3bd46cc0abeba9bb0d46977ba1aea42Evan Cheng#include "XCoreGenRegisterInfo.inc" 21b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 22b25baef26f03b9909b65dd5f762b38f93000445dRichard Osbornenamespace llvm { 23b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 24b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborneclass TargetInstrInfo; 25b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 26b25baef26f03b9909b65dd5f762b38f93000445dRichard Osbornestruct XCoreRegisterInfo : public XCoreGenRegisterInfo { 27b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborneprivate: 28b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne const TargetInstrInfo &TII; 29b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 30b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne void loadConstant(MachineBasicBlock &MBB, 31b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne MachineBasicBlock::iterator I, 32bd9ef18f74a361e0ed630d373677c6fc0ce3cad9Dale Johannesen unsigned DstReg, int64_t Value, DebugLoc dl) const; 33b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 34b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne void storeToStack(MachineBasicBlock &MBB, 35b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne MachineBasicBlock::iterator I, 36bd9ef18f74a361e0ed630d373677c6fc0ce3cad9Dale Johannesen unsigned SrcReg, int Offset, DebugLoc dl) const; 37b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 38b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne void loadFromStack(MachineBasicBlock &MBB, 39b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne MachineBasicBlock::iterator I, 40bd9ef18f74a361e0ed630d373677c6fc0ce3cad9Dale Johannesen unsigned DstReg, int Offset, DebugLoc dl) const; 41b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 42b25baef26f03b9909b65dd5f762b38f93000445dRichard Osbornepublic: 43b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne XCoreRegisterInfo(const TargetInstrInfo &tii); 44b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 45b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne /// Code Generation virtual methods... 46b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 47015f228861ef9b337366f92f637d4e8d624bb006Craig Topper const uint16_t *getCalleeSavedRegs(const MachineFunction *MF = 0) const; 48b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 49b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne BitVector getReservedRegs(const MachineFunction &MF) const; 50b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 51b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne bool requiresRegisterScavenging(const MachineFunction &MF) const; 528ae8cf4559fc2e22fc0366f38533204718a9a32dRichard Osborne 536a8c7bf8e72338e55f0f9583e1828f62da165d4aPreston Gurd bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const; 546a8c7bf8e72338e55f0f9583e1828f62da165d4aPreston Gurd 558ae8cf4559fc2e22fc0366f38533204718a9a32dRichard Osborne bool useFPForScavengingIndex(const MachineFunction &MF) const; 56b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 57fcb4a8ead3cd8d9540d5eaa448af5d14a0ee341aJim Grosbach void eliminateFrameIndex(MachineBasicBlock::iterator II, 58108fb3202af6f500073cdbb7be32c25d7a273a2eChad Rosier int SPAdj, unsigned FIOperandNum, 59108fb3202af6f500073cdbb7be32c25d7a273a2eChad Rosier RegScavenger *RS = NULL) const; 60b9c2fd964ee7dd7823ac71db8443055e4d0f1c15David Greene 61b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne // Debug information queries. 62b9c2fd964ee7dd7823ac71db8443055e4d0f1c15David Greene unsigned getFrameRegister(const MachineFunction &MF) const; 63b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 64b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne //! Return whether to emit frame moves 65b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne static bool needsFrameMoves(const MachineFunction &MF); 66b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne}; 67b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 68b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne} // end namespace llvm 69b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 70b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#endif 71