Home | History | Annotate | Download | only in SystemZ
      1 //==- SystemZTargetMachine.h - Define TargetMachine for SystemZ ---*- 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 SystemZ specific subclass of TargetMachine.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 
     15 #ifndef SYSTEMZTARGETMACHINE_H
     16 #define SYSTEMZTARGETMACHINE_H
     17 
     18 #include "SystemZSubtarget.h"
     19 #include "llvm/Target/TargetMachine.h"
     20 
     21 namespace llvm {
     22 
     23 class TargetFrameLowering;
     24 
     25 class SystemZTargetMachine : public LLVMTargetMachine {
     26   SystemZSubtarget        Subtarget;
     27 
     28 public:
     29   SystemZTargetMachine(const Target &T, StringRef TT, StringRef CPU,
     30                        StringRef FS, const TargetOptions &Options,
     31                        Reloc::Model RM, CodeModel::Model CM,
     32                        CodeGenOpt::Level OL);
     33 
     34   // Override TargetMachine.
     35   const TargetFrameLowering *getFrameLowering() const override {
     36     return getSubtargetImpl()->getFrameLowering();
     37   }
     38   const SystemZInstrInfo *getInstrInfo() const override {
     39     return getSubtargetImpl()->getInstrInfo();
     40   }
     41   const SystemZSubtarget *getSubtargetImpl() const override {
     42     return &Subtarget;
     43   }
     44   const DataLayout *getDataLayout() const override {
     45     return getSubtargetImpl()->getDataLayout();
     46   }
     47   const SystemZRegisterInfo *getRegisterInfo() const override {
     48     return getSubtargetImpl()->getRegisterInfo();
     49   }
     50   const SystemZTargetLowering *getTargetLowering() const override {
     51     return getSubtargetImpl()->getTargetLowering();
     52   }
     53   const TargetSelectionDAGInfo *getSelectionDAGInfo() const override {
     54     return getSubtargetImpl()->getSelectionDAGInfo();
     55   }
     56 
     57   // Override LLVMTargetMachine
     58   TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
     59 };
     60 
     61 } // end namespace llvm
     62 
     63 #endif
     64