MSP430TargetMachine.h revision 193323
1193323Sed//==-- 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
18193323Sed#include "MSP430InstrInfo.h"
19193323Sed#include "MSP430ISelLowering.h"
20193323Sed#include "MSP430RegisterInfo.h"
21193323Sed#include "MSP430Subtarget.h"
22193323Sed#include "llvm/Target/TargetData.h"
23193323Sed#include "llvm/Target/TargetFrameInfo.h"
24193323Sed#include "llvm/Target/TargetMachine.h"
25193323Sed
26193323Sednamespace llvm {
27193323Sed
28193323Sed/// MSP430TargetMachine
29193323Sed///
30193323Sedclass MSP430TargetMachine : public LLVMTargetMachine {
31193323Sed  MSP430Subtarget        Subtarget;
32193323Sed  const TargetData       DataLayout;       // Calculates type size & alignment
33193323Sed  MSP430InstrInfo        InstrInfo;
34193323Sed  MSP430TargetLowering   TLInfo;
35193323Sed
36193323Sed  // MSP430 does not have any call stack frame, therefore not having
37193323Sed  // any MSP430 specific FrameInfo class.
38193323Sed  TargetFrameInfo       FrameInfo;
39193323Sed
40193323Sedprotected:
41193323Sed  virtual const TargetAsmInfo *createTargetAsmInfo() const;
42193323Sed
43193323Sedpublic:
44193323Sed  MSP430TargetMachine(const Module &M, const std::string &FS);
45193323Sed
46193323Sed  virtual const TargetFrameInfo *getFrameInfo() const { return &FrameInfo; }
47193323Sed  virtual const MSP430InstrInfo *getInstrInfo() const  { return &InstrInfo; }
48193323Sed  virtual const TargetData *getTargetData() const     { return &DataLayout;}
49193323Sed  virtual const MSP430Subtarget *getSubtargetImpl() const { return &Subtarget; }
50193323Sed
51193323Sed  virtual const TargetRegisterInfo *getRegisterInfo() const {
52193323Sed    return &InstrInfo.getRegisterInfo();
53193323Sed  }
54193323Sed
55193323Sed  virtual MSP430TargetLowering *getTargetLowering() const {
56193323Sed    return const_cast<MSP430TargetLowering*>(&TLInfo);
57193323Sed  }
58193323Sed
59193323Sed  virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
60193323Sed  virtual bool addAssemblyEmitter(PassManagerBase &PM,
61193323Sed                                  CodeGenOpt::Level OptLevel, bool Verbose,
62193323Sed                                  raw_ostream &Out);
63193323Sed  static unsigned getModuleMatchQuality(const Module &M);
64193323Sed}; // MSP430TargetMachine.
65193323Sed
66193323Sed} // end namespace llvm
67193323Sed
68193323Sed#endif // LLVM_TARGET_MSP430_TARGETMACHINE_H
69