MBlazeTargetMachine.h revision 31d157ae1ac2cd9c787dc3c1d28e64c682803844
1//===-- MBlazeTargetMachine.h - Define TargetMachine for MBlaze -*- 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 MBlaze specific subclass of TargetMachine.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef MBLAZE_TARGETMACHINE_H
15#define MBLAZE_TARGETMACHINE_H
16
17#include "MBlazeSubtarget.h"
18#include "MBlazeInstrInfo.h"
19#include "MBlazeISelLowering.h"
20#include "MBlazeSelectionDAGInfo.h"
21#include "MBlazeIntrinsicInfo.h"
22#include "MBlazeFrameLowering.h"
23#include "MBlazeELFWriterInfo.h"
24#include "llvm/MC/MCStreamer.h"
25#include "llvm/Target/TargetMachine.h"
26#include "llvm/Target/TargetData.h"
27#include "llvm/Target/TargetFrameLowering.h"
28
29namespace llvm {
30  class formatted_raw_ostream;
31
32  class MBlazeTargetMachine : public LLVMTargetMachine {
33    MBlazeSubtarget        Subtarget;
34    const TargetData       DataLayout; // Calculates type size & alignment
35    MBlazeInstrInfo        InstrInfo;
36    MBlazeFrameLowering    FrameLowering;
37    MBlazeTargetLowering   TLInfo;
38    MBlazeSelectionDAGInfo TSInfo;
39    MBlazeIntrinsicInfo    IntrinsicInfo;
40    MBlazeELFWriterInfo    ELFWriterInfo;
41    InstrItineraryData     InstrItins;
42
43  public:
44    MBlazeTargetMachine(const Target &T, StringRef TT,
45                        StringRef CPU, StringRef FS,
46                        const TargetOptions &Options,
47                        Reloc::Model RM, CodeModel::Model CM,
48                        CodeGenOpt::Level OL);
49
50    virtual const MBlazeInstrInfo *getInstrInfo() const
51    { return &InstrInfo; }
52
53    virtual const InstrItineraryData *getInstrItineraryData() const
54    {  return &InstrItins; }
55
56    virtual const TargetFrameLowering *getFrameLowering() const
57    { return &FrameLowering; }
58
59    virtual const MBlazeSubtarget *getSubtargetImpl() const
60    { return &Subtarget; }
61
62    virtual const TargetData *getTargetData() const
63    { return &DataLayout;}
64
65    virtual const MBlazeRegisterInfo *getRegisterInfo() const
66    { return &InstrInfo.getRegisterInfo(); }
67
68    virtual const MBlazeTargetLowering *getTargetLowering() const
69    { return &TLInfo; }
70
71    virtual const MBlazeSelectionDAGInfo* getSelectionDAGInfo() const
72    { return &TSInfo; }
73
74    const TargetIntrinsicInfo *getIntrinsicInfo() const
75    { return &IntrinsicInfo; }
76
77    virtual const MBlazeELFWriterInfo *getELFWriterInfo() const {
78      return &ELFWriterInfo;
79    }
80
81    // Pass Pipeline Configuration
82    virtual TargetPassConfig *createPassConfig(PassManagerBase &PM);
83  };
84} // End llvm namespace
85
86#endif
87