Home | History | Annotate | Download | only in Blackfin
      1 //===-- BlackfinTargetMachine.h - TargetMachine for Blackfin ----*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file declares the Blackfin specific subclass of TargetMachine.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #ifndef BLACKFINTARGETMACHINE_H
     15 #define BLACKFINTARGETMACHINE_H
     16 
     17 #include "BlackfinInstrInfo.h"
     18 #include "BlackfinIntrinsicInfo.h"
     19 #include "BlackfinISelLowering.h"
     20 #include "BlackfinFrameLowering.h"
     21 #include "BlackfinSubtarget.h"
     22 #include "BlackfinSelectionDAGInfo.h"
     23 #include "llvm/Target/TargetMachine.h"
     24 #include "llvm/Target/TargetData.h"
     25 #include "llvm/Target/TargetFrameLowering.h"
     26 
     27 namespace llvm {
     28 
     29   class BlackfinTargetMachine : public LLVMTargetMachine {
     30     const TargetData DataLayout;
     31     BlackfinSubtarget Subtarget;
     32     BlackfinTargetLowering TLInfo;
     33     BlackfinSelectionDAGInfo TSInfo;
     34     BlackfinInstrInfo InstrInfo;
     35     BlackfinFrameLowering FrameLowering;
     36     BlackfinIntrinsicInfo IntrinsicInfo;
     37   public:
     38     BlackfinTargetMachine(const Target &T, StringRef TT,
     39                           StringRef CPU, StringRef FS,
     40                           Reloc::Model RM, CodeModel::Model CM);
     41 
     42     virtual const BlackfinInstrInfo *getInstrInfo() const { return &InstrInfo; }
     43     virtual const TargetFrameLowering *getFrameLowering() const {
     44       return &FrameLowering;
     45     }
     46     virtual const BlackfinSubtarget *getSubtargetImpl() const {
     47       return &Subtarget;
     48     }
     49     virtual const BlackfinRegisterInfo *getRegisterInfo() const {
     50       return &InstrInfo.getRegisterInfo();
     51     }
     52     virtual const BlackfinTargetLowering* getTargetLowering() const {
     53       return &TLInfo;
     54     }
     55     virtual const BlackfinSelectionDAGInfo* getSelectionDAGInfo() const {
     56       return &TSInfo;
     57     }
     58     virtual const TargetData *getTargetData() const { return &DataLayout; }
     59     virtual bool addInstSelector(PassManagerBase &PM,
     60                                  CodeGenOpt::Level OptLevel);
     61     const TargetIntrinsicInfo *getIntrinsicInfo() const {
     62       return &IntrinsicInfo;
     63     }
     64   };
     65 
     66 } // end namespace llvm
     67 
     68 #endif
     69