1//===-- SPIRVTargetMachine.h - Define TargetMachine for SPIR-V -*- C++ -*--===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file declares the SPIR-V specific subclass of TargetMachine.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_LIB_TARGET_SPIRV_SPIRVTARGETMACHINE_H
14#define LLVM_LIB_TARGET_SPIRV_SPIRVTARGETMACHINE_H
15
16#include "SPIRVSubtarget.h"
17#include "llvm/CodeGen/CodeGenTargetMachineImpl.h"
18#include <optional>
19
20namespace llvm {
21class SPIRVTargetMachine : public CodeGenTargetMachineImpl {
22 std::unique_ptr<TargetLoweringObjectFile> TLOF;
23 SPIRVSubtarget Subtarget;
24
25public:
26 SPIRVTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
27 StringRef FS, const TargetOptions &Options,
28 std::optional<Reloc::Model> RM,
29 std::optional<CodeModel::Model> CM, CodeGenOptLevel OL,
30 bool JIT);
31
32 const SPIRVSubtarget *getSubtargetImpl() const { return &Subtarget; }
33
34 const SPIRVSubtarget *getSubtargetImpl(const Function &) const override {
35 return &Subtarget;
36 }
37
38 SPIRVSubtarget *getMutableSubtargetImpl() { return &Subtarget; }
39
40 TargetTransformInfo getTargetTransformInfo(const Function &F) const override;
41
42 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
43 bool usesPhysRegsForValues() const override { return false; }
44
45 TargetLoweringObjectFile *getObjFileLowering() const override {
46 return TLOF.get();
47 }
48
49 void registerPassBuilderCallbacks(PassBuilder &PB) override;
50};
51} // namespace llvm
52
53#endif // LLVM_LIB_TARGET_SPIRV_SPIRVTARGETMACHINE_H
54