1 //===-- MBlazeTargetMachine.h - Define TargetMachine for MBlaze --- C++ ---===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file declares the MBlaze specific subclass of TargetMachine.
12 //===----------------------------------------------------------------------===//
14 #ifndef MBLAZE_TARGETMACHINE_H
15 #define MBLAZE_TARGETMACHINE_H
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"
30 class formatted_raw_ostream
;
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
;
44 MBlazeTargetMachine(const Target
&T
, const std::string
&TT
,
45 const std::string
&CPU
, const std::string
&FS
);
47 virtual const MBlazeInstrInfo
*getInstrInfo() const
48 { return &InstrInfo
; }
50 virtual const InstrItineraryData
*getInstrItineraryData() const
51 { return &InstrItins
; }
53 virtual const TargetFrameLowering
*getFrameLowering() const
54 { return &FrameLowering
; }
56 virtual const MBlazeSubtarget
*getSubtargetImpl() const
57 { return &Subtarget
; }
59 virtual const TargetData
*getTargetData() const
60 { return &DataLayout
;}
62 virtual const MBlazeRegisterInfo
*getRegisterInfo() const
63 { return &InstrInfo
.getRegisterInfo(); }
65 virtual const MBlazeTargetLowering
*getTargetLowering() const
68 virtual const MBlazeSelectionDAGInfo
* getSelectionDAGInfo() const
71 const TargetIntrinsicInfo
*getIntrinsicInfo() const
72 { return &IntrinsicInfo
; }
74 virtual const MBlazeELFWriterInfo
*getELFWriterInfo() const {
75 return &ELFWriterInfo
;
78 // Pass Pipeline Configuration
79 virtual bool addInstSelector(PassManagerBase
&PM
, CodeGenOpt::Level Opt
);
80 virtual bool addPreEmitPass(PassManagerBase
&PM
,CodeGenOpt::Level Opt
);
82 } // End llvm namespace