Home | History | Annotate | Line # | Download | only in VE
      1 //===-- VETargetMachine.h - Define TargetMachine for VE ---------*- C++ -*-===//
      2 //
      3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      4 // See https://llvm.org/LICENSE.txt for license information.
      5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      6 //
      7 //===----------------------------------------------------------------------===//
      8 //
      9 // This file declares the VE specific subclass of TargetMachine.
     10 //
     11 //===----------------------------------------------------------------------===//
     12 
     13 #ifndef LLVM_LIB_TARGET_VE_VETARGETMACHINE_H
     14 #define LLVM_LIB_TARGET_VE_VETARGETMACHINE_H
     15 
     16 #include "VEInstrInfo.h"
     17 #include "VESubtarget.h"
     18 #include "llvm/Target/TargetMachine.h"
     19 
     20 namespace llvm {
     21 
     22 class VETargetMachine : public LLVMTargetMachine {
     23   std::unique_ptr<TargetLoweringObjectFile> TLOF;
     24   VESubtarget Subtarget;
     25   // Hold Strings that can be free'd all together with VETargetMachine
     26   //   e.g.: "GCC_except_tableXX" string.
     27   std::list<std::string> StrList;
     28 
     29 public:
     30   VETargetMachine(const Target &T, const Triple &TT, StringRef CPU,
     31                   StringRef FS, const TargetOptions &Options,
     32                   Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
     33                   CodeGenOpt::Level OL, bool JIT);
     34   ~VETargetMachine() override;
     35 
     36   const VESubtarget *getSubtargetImpl() const { return &Subtarget; }
     37   const VESubtarget *getSubtargetImpl(const Function &) const override {
     38     return &Subtarget;
     39   }
     40   std::list<std::string> *getStrList() const {
     41     return const_cast<std::list<std::string> *>(&StrList);
     42   }
     43 
     44   // Pass Pipeline Configuration
     45   TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
     46   TargetLoweringObjectFile *getObjFileLowering() const override {
     47     return TLOF.get();
     48   }
     49 
     50   bool isMachineVerifierClean() const override { return false; }
     51 
     52   TargetTransformInfo getTargetTransformInfo(const Function &F) override;
     53 
     54   unsigned getSjLjDataSize() const override { return 64; }
     55 };
     56 
     57 } // namespace llvm
     58 
     59 #endif
     60