1234353Sdim//===-- MSP430TargetMachine.h - Define TargetMachine for MSP430 -*- C++ -*-===//
2193323Sed//
3193323Sed//                     The LLVM Compiler Infrastructure
4193323Sed//
5193323Sed// This file is distributed under the University of Illinois Open Source
6193323Sed// License. See LICENSE.TXT for details.
7193323Sed//
8193323Sed//===----------------------------------------------------------------------===//
9193323Sed//
10193323Sed// This file declares the MSP430 specific subclass of TargetMachine.
11193323Sed//
12193323Sed//===----------------------------------------------------------------------===//
13193323Sed
14193323Sed
15193323Sed#ifndef LLVM_TARGET_MSP430_TARGETMACHINE_H
16193323Sed#define LLVM_TARGET_MSP430_TARGETMACHINE_H
17193323Sed
18249423Sdim#include "MSP430FrameLowering.h"
19249423Sdim#include "MSP430ISelLowering.h"
20193323Sed#include "MSP430InstrInfo.h"
21249423Sdim#include "MSP430RegisterInfo.h"
22208599Srdivacky#include "MSP430SelectionDAGInfo.h"
23193323Sed#include "MSP430Subtarget.h"
24249423Sdim#include "llvm/IR/DataLayout.h"
25218893Sdim#include "llvm/Target/TargetFrameLowering.h"
26193323Sed#include "llvm/Target/TargetMachine.h"
27193323Sed
28193323Sednamespace llvm {
29193323Sed
30193323Sed/// MSP430TargetMachine
31193323Sed///
32193323Sedclass MSP430TargetMachine : public LLVMTargetMachine {
33193323Sed  MSP430Subtarget        Subtarget;
34243830Sdim  const DataLayout       DL;       // Calculates type size & alignment
35193323Sed  MSP430InstrInfo        InstrInfo;
36193323Sed  MSP430TargetLowering   TLInfo;
37208599Srdivacky  MSP430SelectionDAGInfo TSInfo;
38218893Sdim  MSP430FrameLowering    FrameLowering;
39193323Sed
40193323Sedpublic:
41226633Sdim  MSP430TargetMachine(const Target &T, StringRef TT,
42234353Sdim                      StringRef CPU, StringRef FS, const TargetOptions &Options,
43234353Sdim                      Reloc::Model RM, CodeModel::Model CM,
44234353Sdim                      CodeGenOpt::Level OL);
45193323Sed
46218893Sdim  virtual const TargetFrameLowering *getFrameLowering() const {
47218893Sdim    return &FrameLowering;
48218893Sdim  }
49193323Sed  virtual const MSP430InstrInfo *getInstrInfo() const  { return &InstrInfo; }
50243830Sdim  virtual const DataLayout *getDataLayout() const     { return &DL;}
51193323Sed  virtual const MSP430Subtarget *getSubtargetImpl() const { return &Subtarget; }
52193323Sed
53193323Sed  virtual const TargetRegisterInfo *getRegisterInfo() const {
54193323Sed    return &InstrInfo.getRegisterInfo();
55193323Sed  }
56193323Sed
57207618Srdivacky  virtual const MSP430TargetLowering *getTargetLowering() const {
58207618Srdivacky    return &TLInfo;
59193323Sed  }
60193323Sed
61208599Srdivacky  virtual const MSP430SelectionDAGInfo* getSelectionDAGInfo() const {
62208599Srdivacky    return &TSInfo;
63208599Srdivacky  }
64234353Sdim  virtual TargetPassConfig *createPassConfig(PassManagerBase &PM);
65193323Sed}; // MSP430TargetMachine.
66193323Sed
67193323Sed} // end namespace llvm
68193323Sed
69193323Sed#endif // LLVM_TARGET_MSP430_TARGETMACHINE_H
70