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" 19bdd1243dSDimitry Andric #include <optional> 20480093f4SDimitry Andric 21480093f4SDimitry Andric namespace llvm { 22480093f4SDimitry Andric 23480093f4SDimitry Andric class VETargetMachine : public LLVMTargetMachine { 24480093f4SDimitry Andric std::unique_ptr<TargetLoweringObjectFile> TLOF; 25480093f4SDimitry Andric VESubtarget Subtarget; 26480093f4SDimitry Andric // Hold Strings that can be free'd all together with VETargetMachine 27480093f4SDimitry Andric // e.g.: "GCC_except_tableXX" string. 28480093f4SDimitry Andric std::list<std::string> StrList; 29480093f4SDimitry Andric 30480093f4SDimitry Andric public: 31480093f4SDimitry Andric VETargetMachine(const Target &T, const Triple &TT, StringRef CPU, 32480093f4SDimitry Andric StringRef FS, const TargetOptions &Options, 33bdd1243dSDimitry Andric std::optional<Reloc::Model> RM, 34*5f757f3fSDimitry Andric std::optional<CodeModel::Model> CM, CodeGenOptLevel OL, 35bdd1243dSDimitry Andric bool JIT); 36480093f4SDimitry Andric ~VETargetMachine() override; 37480093f4SDimitry Andric 38480093f4SDimitry Andric const VESubtarget *getSubtargetImpl() const { return &Subtarget; } 39480093f4SDimitry Andric const VESubtarget *getSubtargetImpl(const Function &) const override { 40480093f4SDimitry Andric return &Subtarget; 41480093f4SDimitry Andric } 42480093f4SDimitry Andric std::list<std::string> *getStrList() const { 43480093f4SDimitry Andric return const_cast<std::list<std::string> *>(&StrList); 44480093f4SDimitry Andric } 45480093f4SDimitry Andric 46480093f4SDimitry Andric // Pass Pipeline Configuration 47480093f4SDimitry Andric TargetPassConfig *createPassConfig(PassManagerBase &PM) override; 48480093f4SDimitry Andric TargetLoweringObjectFile *getObjFileLowering() const override { 49480093f4SDimitry Andric return TLOF.get(); 50480093f4SDimitry Andric } 51480093f4SDimitry Andric 52bdd1243dSDimitry Andric MachineFunctionInfo * 53bdd1243dSDimitry Andric createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F, 54bdd1243dSDimitry Andric const TargetSubtargetInfo *STI) const override; 55bdd1243dSDimitry Andric 56480093f4SDimitry Andric bool isMachineVerifierClean() const override { return false; } 57480093f4SDimitry Andric 5881ad6265SDimitry Andric TargetTransformInfo getTargetTransformInfo(const Function &F) const override; 595ffd83dbSDimitry Andric 605ffd83dbSDimitry Andric unsigned getSjLjDataSize() const override { return 64; } 61480093f4SDimitry Andric }; 62480093f4SDimitry Andric 63480093f4SDimitry Andric } // namespace llvm 64480093f4SDimitry Andric 65480093f4SDimitry Andric #endif 66