181ad6265SDimitry Andric //=- LoongArchTargetMachine.h - Define TargetMachine for LoongArch -*- C++ -*-// 281ad6265SDimitry Andric // 381ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 481ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 581ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 681ad6265SDimitry Andric // 781ad6265SDimitry Andric //===----------------------------------------------------------------------===// 881ad6265SDimitry Andric // 981ad6265SDimitry Andric // This file declares the LoongArch specific subclass of TargetMachine. 1081ad6265SDimitry Andric // 1181ad6265SDimitry Andric //===----------------------------------------------------------------------===// 1281ad6265SDimitry Andric 1381ad6265SDimitry Andric #ifndef LLVM_LIB_TARGET_LOONGARCH_LOONGARCHTARGETMACHINE_H 1481ad6265SDimitry Andric #define LLVM_LIB_TARGET_LOONGARCH_LOONGARCHTARGETMACHINE_H 1581ad6265SDimitry Andric 1681ad6265SDimitry Andric #include "LoongArchSubtarget.h" 1781ad6265SDimitry Andric #include "llvm/Target/TargetMachine.h" 18bdd1243dSDimitry Andric #include <optional> 1981ad6265SDimitry Andric 2081ad6265SDimitry Andric namespace llvm { 2181ad6265SDimitry Andric 2281ad6265SDimitry Andric class LoongArchTargetMachine : public LLVMTargetMachine { 2381ad6265SDimitry Andric std::unique_ptr<TargetLoweringObjectFile> TLOF; 2481ad6265SDimitry Andric mutable StringMap<std::unique_ptr<LoongArchSubtarget>> SubtargetMap; 2581ad6265SDimitry Andric 2681ad6265SDimitry Andric public: 2781ad6265SDimitry Andric LoongArchTargetMachine(const Target &T, const Triple &TT, StringRef CPU, 2881ad6265SDimitry Andric StringRef FS, const TargetOptions &Options, 29bdd1243dSDimitry Andric std::optional<Reloc::Model> RM, 305f757f3fSDimitry Andric std::optional<CodeModel::Model> CM, CodeGenOptLevel OL, 315f757f3fSDimitry Andric bool JIT); 3281ad6265SDimitry Andric ~LoongArchTargetMachine() override; 3381ad6265SDimitry Andric 3406c3fb27SDimitry Andric TargetTransformInfo getTargetTransformInfo(const Function &F) const override; 3581ad6265SDimitry Andric const LoongArchSubtarget *getSubtargetImpl(const Function &F) const override; 3681ad6265SDimitry Andric const LoongArchSubtarget *getSubtargetImpl() const = delete; 3781ad6265SDimitry Andric 3881ad6265SDimitry Andric // Pass Pipeline Configuration 3981ad6265SDimitry Andric TargetPassConfig *createPassConfig(PassManagerBase &PM) override; 4081ad6265SDimitry Andric getObjFileLowering()4181ad6265SDimitry Andric TargetLoweringObjectFile *getObjFileLowering() const override { 4281ad6265SDimitry Andric return TLOF.get(); 4381ad6265SDimitry Andric } 44bdd1243dSDimitry Andric 45bdd1243dSDimitry Andric MachineFunctionInfo * 46bdd1243dSDimitry Andric createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F, 47bdd1243dSDimitry Andric const TargetSubtargetInfo *STI) const override; 48*439352acSDimitry Andric 49*439352acSDimitry Andric // Addrspacecasts are always noops. isNoopAddrSpaceCast(unsigned SrcAS,unsigned DestAS)50*439352acSDimitry Andric bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const override { 51*439352acSDimitry Andric return true; 52*439352acSDimitry Andric } 5381ad6265SDimitry Andric }; 5481ad6265SDimitry Andric 5581ad6265SDimitry Andric } // end namespace llvm 5681ad6265SDimitry Andric 5781ad6265SDimitry Andric #endif // LLVM_LIB_TARGET_LOONGARCH_LOONGARCHTARGETMACHINE_H 58