1480093f4SDimitry Andric //===-- VETargetMachine.h - Define TargetMachine for VE ---------*- C++ -*-===// 2480093f4SDimitry Andric // 3480093f4SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4480093f4SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5480093f4SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6480093f4SDimitry Andric // 7480093f4SDimitry Andric //===----------------------------------------------------------------------===// 8480093f4SDimitry Andric // 9480093f4SDimitry Andric // This file declares the VE specific subclass of TargetMachine. 10480093f4SDimitry Andric // 11480093f4SDimitry Andric //===----------------------------------------------------------------------===// 12480093f4SDimitry Andric 13480093f4SDimitry Andric #ifndef LLVM_LIB_TARGET_VE_VETARGETMACHINE_H 14480093f4SDimitry Andric #define LLVM_LIB_TARGET_VE_VETARGETMACHINE_H 15480093f4SDimitry Andric 16480093f4SDimitry Andric #include "VEInstrInfo.h" 17480093f4SDimitry Andric #include "VESubtarget.h" 18480093f4SDimitry Andric #include "llvm/Target/TargetMachine.h" 19480093f4SDimitry Andric 20480093f4SDimitry Andric namespace llvm { 21480093f4SDimitry Andric 22480093f4SDimitry Andric class VETargetMachine : public LLVMTargetMachine { 23480093f4SDimitry Andric std::unique_ptr<TargetLoweringObjectFile> TLOF; 24480093f4SDimitry Andric VESubtarget Subtarget; 25480093f4SDimitry Andric // Hold Strings that can be free'd all together with VETargetMachine 26480093f4SDimitry Andric // e.g.: "GCC_except_tableXX" string. 27480093f4SDimitry Andric std::list<std::string> StrList; 28480093f4SDimitry Andric 29480093f4SDimitry Andric public: 30480093f4SDimitry Andric VETargetMachine(const Target &T, const Triple &TT, StringRef CPU, 31480093f4SDimitry Andric StringRef FS, const TargetOptions &Options, 32480093f4SDimitry Andric Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM, 33480093f4SDimitry Andric CodeGenOpt::Level OL, bool JIT); 34480093f4SDimitry Andric ~VETargetMachine() override; 35480093f4SDimitry Andric 36480093f4SDimitry Andric const VESubtarget *getSubtargetImpl() const { return &Subtarget; } 37480093f4SDimitry Andric const VESubtarget *getSubtargetImpl(const Function &) const override { 38480093f4SDimitry Andric return &Subtarget; 39480093f4SDimitry Andric } 40480093f4SDimitry Andric std::list<std::string> *getStrList() const { 41480093f4SDimitry Andric return const_cast<std::list<std::string> *>(&StrList); 42480093f4SDimitry Andric } 43480093f4SDimitry Andric 44480093f4SDimitry Andric // Pass Pipeline Configuration 45480093f4SDimitry Andric TargetPassConfig *createPassConfig(PassManagerBase &PM) override; 46480093f4SDimitry Andric TargetLoweringObjectFile *getObjFileLowering() const override { 47480093f4SDimitry Andric return TLOF.get(); 48480093f4SDimitry Andric } 49480093f4SDimitry Andric 50480093f4SDimitry Andric bool isMachineVerifierClean() const override { return false; } 51480093f4SDimitry Andric 52480093f4SDimitry Andric TargetTransformInfo getTargetTransformInfo(const Function &F) override; 53*5ffd83dbSDimitry Andric 54*5ffd83dbSDimitry Andric unsigned getSjLjDataSize() const override { return 64; } 55480093f4SDimitry Andric }; 56480093f4SDimitry Andric 57480093f4SDimitry Andric } // namespace llvm 58480093f4SDimitry Andric 59480093f4SDimitry Andric #endif 60