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/Target/TargetMachine.h"
18#include <optional>
19
20namespace llvm {
21class SPIRVTargetMachine : public LLVMTargetMachine {
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 TargetTransformInfo getTargetTransformInfo(const Function &F) const override;
39
40 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
41 bool usesPhysRegsForValues() const override { return false; }
42
43 TargetLoweringObjectFile *getObjFileLowering() const override {
44 return TLOF.get();
45 }
46};
47} // namespace llvm
48
49#endif // LLVM_LIB_TARGET_SPIRV_SPIRVTARGETMACHINE_H
50

source code of llvm/lib/Target/SPIRV/SPIRVTargetMachine.h