1 //===-- AMDGPUTargetMachine.h - AMDGPU TargetMachine Interface --*- 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 //  The AMDGPU TargetMachine interface definition for hw codgen targets.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef AMDGPU_TARGET_MACHINE_H
15 #define AMDGPU_TARGET_MACHINE_H
16 
17 #include "AMDGPUInstrInfo.h"
18 #include "AMDGPUSubtarget.h"
19 #include "AMDILFrameLowering.h"
20 #include "AMDILIntrinsicInfo.h"
21 #include "R600ISelLowering.h"
22 #include "llvm/ADT/OwningPtr.h"
23 #include "llvm/Target/TargetData.h"
24 
25 namespace llvm {
26 
27 MCAsmInfo* createMCAsmInfo(const Target &T, StringRef TT);
28 
29 class AMDGPUTargetMachine : public LLVMTargetMachine {
30 
31   AMDGPUSubtarget Subtarget;
32   const TargetData DataLayout;
33   AMDGPUFrameLowering FrameLowering;
34   AMDGPUIntrinsicInfo IntrinsicInfo;
35   const AMDGPUInstrInfo * InstrInfo;
36   AMDGPUTargetLowering * TLInfo;
37   const InstrItineraryData* InstrItins;
38   bool mDump;
39 
40 public:
41    AMDGPUTargetMachine(const Target &T, StringRef TT, StringRef FS,
42                        StringRef CPU,
43                        TargetOptions Options,
44                        Reloc::Model RM, CodeModel::Model CM,
45                        CodeGenOpt::Level OL);
46    ~AMDGPUTargetMachine();
getFrameLowering()47    virtual const AMDGPUFrameLowering* getFrameLowering() const {
48      return &FrameLowering;
49    }
getIntrinsicInfo()50    virtual const AMDGPUIntrinsicInfo* getIntrinsicInfo() const {
51      return &IntrinsicInfo;
52    }
getInstrInfo()53    virtual const AMDGPUInstrInfo *getInstrInfo() const {return InstrInfo;}
getSubtargetImpl()54    virtual const AMDGPUSubtarget *getSubtargetImpl() const {return &Subtarget; }
getRegisterInfo()55    virtual const AMDGPURegisterInfo *getRegisterInfo() const {
56       return &InstrInfo->getRegisterInfo();
57    }
getTargetLowering()58    virtual AMDGPUTargetLowering * getTargetLowering() const {
59       return TLInfo;
60    }
getInstrItineraryData()61    virtual const InstrItineraryData* getInstrItineraryData() const {
62       return InstrItins;
63    }
getTargetData()64    virtual const TargetData* getTargetData() const { return &DataLayout; }
65    virtual TargetPassConfig *createPassConfig(PassManagerBase &PM);
66 };
67 
68 } // End namespace llvm
69 
70 #endif // AMDGPU_TARGET_MACHINE_H
71