xref: /llvm-project/llvm/lib/Target/LoongArch/LoongArchTargetMachine.h (revision bb3f5e1fed7c6ba733b7f273e93f5d3930976185)
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