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