MSP430RegisterInfo.h revision 31d157ae1ac2cd9c787dc3c1d28e64c682803844
131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- MSP430RegisterInfo.h - MSP430 Register Information Impl -*- C++ -*-===// 2f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// 3f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// The LLVM Compiler Infrastructure 4f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// 5f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// This file is distributed under the University of Illinois Open Source 6f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// License. See LICENSE.TXT for details. 7f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// 8f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov//===----------------------------------------------------------------------===// 9f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// 10f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// This file contains the MSP430 implementation of the MRegisterInfo class. 11f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov// 12f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov//===----------------------------------------------------------------------===// 13f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 14f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov#ifndef LLVM_TARGET_MSP430REGISTERINFO_H 15f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov#define LLVM_TARGET_MSP430REGISTERINFO_H 16f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 17f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov#include "llvm/Target/TargetRegisterInfo.h" 1873f50d9bc3bd46cc0abeba9bb0d46977ba1aea42Evan Cheng 1973f50d9bc3bd46cc0abeba9bb0d46977ba1aea42Evan Cheng#define GET_REGINFO_HEADER 2073f50d9bc3bd46cc0abeba9bb0d46977ba1aea42Evan Cheng#include "MSP430GenRegisterInfo.inc" 21f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 22f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovnamespace llvm { 23f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 24f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovclass TargetInstrInfo; 25b561264d2b2e33e1e6322a99d600b5daece5bbdeAnton Korobeynikovclass MSP430TargetMachine; 26f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 27f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovstruct MSP430RegisterInfo : public MSP430GenRegisterInfo { 28f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovprivate: 29b561264d2b2e33e1e6322a99d600b5daece5bbdeAnton Korobeynikov MSP430TargetMachine &TM; 30f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov const TargetInstrInfo &TII; 31b561264d2b2e33e1e6322a99d600b5daece5bbdeAnton Korobeynikov 32b561264d2b2e33e1e6322a99d600b5daece5bbdeAnton Korobeynikov /// StackAlign - Default stack alignment. 33b561264d2b2e33e1e6322a99d600b5daece5bbdeAnton Korobeynikov /// 34b561264d2b2e33e1e6322a99d600b5daece5bbdeAnton Korobeynikov unsigned StackAlign; 35f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovpublic: 36b561264d2b2e33e1e6322a99d600b5daece5bbdeAnton Korobeynikov MSP430RegisterInfo(MSP430TargetMachine &tm, const TargetInstrInfo &tii); 37f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 38f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov /// Code Generation virtual methods... 39f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov const unsigned *getCalleeSavedRegs(const MachineFunction *MF = 0) const; 40f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 41f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov BitVector getReservedRegs(const MachineFunction &MF) const; 422cfd52c507bd5790457a171eb9bcb39019cc6860Chris Lattner const TargetRegisterClass* getPointerRegClass(unsigned Kind = 0) const; 43f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 44b561264d2b2e33e1e6322a99d600b5daece5bbdeAnton Korobeynikov void eliminateCallFramePseudoInstr(MachineFunction &MF, 45b561264d2b2e33e1e6322a99d600b5daece5bbdeAnton Korobeynikov MachineBasicBlock &MBB, 46b561264d2b2e33e1e6322a99d600b5daece5bbdeAnton Korobeynikov MachineBasicBlock::iterator I) const; 47f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 48fcb4a8ead3cd8d9540d5eaa448af5d14a0ee341aJim Grosbach void eliminateFrameIndex(MachineBasicBlock::iterator II, 49fcb4a8ead3cd8d9540d5eaa448af5d14a0ee341aJim Grosbach int SPAdj, RegScavenger *RS = NULL) const; 50f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 51ce45d30fa1922d19745f7307cf1bb712c5814b9aAnton Korobeynikov void processFunctionBeforeFrameFinalized(MachineFunction &MF) const; 52ce45d30fa1922d19745f7307cf1bb712c5814b9aAnton Korobeynikov 53f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov // Debug information queries. 54b9c2fd964ee7dd7823ac71db8443055e4d0f1c15David Greene unsigned getFrameRegister(const MachineFunction &MF) const; 55f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov}; 56f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 57f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov} // end namespace llvm 58f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov 59f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov#endif // LLVM_TARGET_MSP430REGISTERINFO_H 60