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;
30b561264d2b2e33e1e6322a99d600b5daece5bbdeAnton Korobeynikov
31b561264d2b2e33e1e6322a99d600b5daece5bbdeAnton Korobeynikov  /// StackAlign - Default stack alignment.
32b561264d2b2e33e1e6322a99d600b5daece5bbdeAnton Korobeynikov  ///
33b561264d2b2e33e1e6322a99d600b5daece5bbdeAnton Korobeynikov  unsigned StackAlign;
34f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikovpublic:
35ed8b5b55a4416286758c5567c2602d2c7d0be585Bill Wendling  MSP430RegisterInfo(MSP430TargetMachine &tm);
36f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov
37f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov  /// Code Generation virtual methods...
38015f228861ef9b337366f92f637d4e8d624bb006Craig Topper  const uint16_t *getCalleeSavedRegs(const MachineFunction *MF = 0) const;
39f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov
40f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov  BitVector getReservedRegs(const MachineFunction &MF) const;
41397fc4874efe9c17e737d4c5c50bd19dc3bf27f5Jakob Stoklund Olesen  const TargetRegisterClass*
42397fc4874efe9c17e737d4c5c50bd19dc3bf27f5Jakob Stoklund Olesen  getPointerRegClass(const MachineFunction &MF, unsigned Kind = 0) const;
43f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov
44fcb4a8ead3cd8d9540d5eaa448af5d14a0ee341aJim Grosbach  void eliminateFrameIndex(MachineBasicBlock::iterator II,
45108fb3202af6f500073cdbb7be32c25d7a273a2eChad Rosier                           int SPAdj, unsigned FIOperandNum,
46108fb3202af6f500073cdbb7be32c25d7a273a2eChad Rosier                           RegScavenger *RS = NULL) const;
47f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov
48f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov  // Debug information queries.
49b9c2fd964ee7dd7823ac71db8443055e4d0f1c15David Greene  unsigned getFrameRegister(const MachineFunction &MF) const;
50f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov};
51f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov
52f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov} // end namespace llvm
53f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov
54f2c3e179ecc2a6ebc259382828a5e5dc5a61d2f8Anton Korobeynikov#endif // LLVM_TARGET_MSP430REGISTERINFO_H
55