1444c6d26SLu Weining //=- LoongArchTargetMachine.h - Define TargetMachine for LoongArch -*- C++ -*-// 2444c6d26SLu Weining // 3444c6d26SLu Weining // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4444c6d26SLu Weining // See https://llvm.org/LICENSE.txt for license information. 5444c6d26SLu Weining // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6444c6d26SLu Weining // 7444c6d26SLu Weining //===----------------------------------------------------------------------===// 8444c6d26SLu Weining // 9444c6d26SLu Weining // This file declares the LoongArch specific subclass of TargetMachine. 10444c6d26SLu Weining // 11444c6d26SLu Weining //===----------------------------------------------------------------------===// 12444c6d26SLu Weining 13444c6d26SLu Weining #ifndef LLVM_LIB_TARGET_LOONGARCH_LOONGARCHTARGETMACHINE_H 14444c6d26SLu Weining #define LLVM_LIB_TARGET_LOONGARCH_LOONGARCHTARGETMACHINE_H 15444c6d26SLu Weining 1633388ae8SLu Weining #include "LoongArchSubtarget.h" 17*bb3f5e1fSMatin Raayai #include "llvm/CodeGen/CodeGenTargetMachineImpl.h" 188c7c20f0SKrzysztof Parzyszek #include <optional> 19444c6d26SLu Weining 20444c6d26SLu Weining namespace llvm { 21444c6d26SLu Weining 22*bb3f5e1fSMatin Raayai class LoongArchTargetMachine : public CodeGenTargetMachineImpl { 2333388ae8SLu Weining std::unique_ptr<TargetLoweringObjectFile> TLOF; 2433388ae8SLu Weining mutable StringMap<std::unique_ptr<LoongArchSubtarget>> SubtargetMap; 25444c6d26SLu Weining 26444c6d26SLu Weining public: 27444c6d26SLu Weining LoongArchTargetMachine(const Target &T, const Triple &TT, StringRef CPU, 28444c6d26SLu Weining StringRef FS, const TargetOptions &Options, 29bac97427SFangrui Song std::optional<Reloc::Model> RM, 300a1aa6cdSArthur Eubanks std::optional<CodeModel::Model> CM, CodeGenOptLevel OL, 310a1aa6cdSArthur Eubanks bool JIT); 32444c6d26SLu Weining ~LoongArchTargetMachine() override; 3333388ae8SLu Weining 341918cf58SZhao Qi TargetTransformInfo getTargetTransformInfo(const Function &F) const override; 3533388ae8SLu Weining const LoongArchSubtarget *getSubtargetImpl(const Function &F) const override; 3633388ae8SLu Weining const LoongArchSubtarget *getSubtargetImpl() const = delete; 3733388ae8SLu Weining 3833388ae8SLu Weining // Pass Pipeline Configuration 3933388ae8SLu Weining TargetPassConfig *createPassConfig(PassManagerBase &PM) override; 4033388ae8SLu Weining 4133388ae8SLu Weining TargetLoweringObjectFile *getObjFileLowering() const override { 4233388ae8SLu Weining return TLOF.get(); 4333388ae8SLu Weining } 44c774fd55SMatt Arsenault 45c774fd55SMatt Arsenault MachineFunctionInfo * 46c774fd55SMatt Arsenault createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F, 47c774fd55SMatt Arsenault const TargetSubtargetInfo *STI) const override; 48dd3e0a46Shev 49dd3e0a46Shev // Addrspacecasts are always noops. 50dd3e0a46Shev bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const override { 51dd3e0a46Shev return true; 52dd3e0a46Shev } 53444c6d26SLu Weining }; 54444c6d26SLu Weining 55444c6d26SLu Weining } // end namespace llvm 56444c6d26SLu Weining 57444c6d26SLu Weining #endif // LLVM_LIB_TARGET_LOONGARCH_LOONGARCHTARGETMACHINE_H 58