clang 22.0.0git
SPIRV.h
Go to the documentation of this file.
1//===--- SPIRV.h - SPIR-V Tool Implementations ------------------*- 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#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_SPIRV_H
10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_SPIRV_H
11
12#include "clang/Driver/Tool.h"
14
15namespace clang {
16namespace driver {
17namespace tools {
18namespace SPIRV {
19
21 const JobAction &JA, const InputInfo &Output,
22 const InputInfo &Input,
23 const llvm::opt::ArgStringList &Args);
24
26 const JobAction &JA, const InputInfo &Output,
27 const InputInfo &Input,
28 const llvm::opt::ArgStringList &Args);
29
31 const JobAction &JA, const InputInfo &Output,
32 const InputInfoList &Inputs,
33 const llvm::opt::ArgList &Args);
34
35class LLVM_LIBRARY_VISIBILITY Translator : public Tool {
36public:
38 : Tool("SPIR-V::Translator", "llvm-spirv", TC) {}
39
40 bool hasIntegratedCPP() const override { return false; }
41 bool hasIntegratedAssembler() const override { return true; }
42
43 void ConstructJob(Compilation &C, const JobAction &JA,
44 const InputInfo &Output, const InputInfoList &Inputs,
45 const llvm::opt::ArgList &TCArgs,
46 const char *LinkingOutput) const override;
47};
48
49class LLVM_LIBRARY_VISIBILITY Linker final : public Tool {
50public:
51 Linker(const ToolChain &TC) : Tool("SPIR-V::Linker", "spirv-link", TC) {}
52 bool hasIntegratedCPP() const override { return false; }
53 bool isLinkJob() const override { return true; }
54 void ConstructJob(Compilation &C, const JobAction &JA,
55 const InputInfo &Output, const InputInfoList &Inputs,
56 const llvm::opt::ArgList &TCArgs,
57 const char *LinkingOutput) const override;
58};
59
60class LLVM_LIBRARY_VISIBILITY Assembler final : public Tool {
61public:
62 Assembler(const ToolChain &TC) : Tool("SPIR-V::Assembler", "spirv-as", TC) {}
63 bool hasIntegratedAssembler() const override { return false; }
64 bool hasIntegratedCPP() const override { return false; }
65 void ConstructJob(Compilation &C, const JobAction &JA,
66 const InputInfo &Output, const InputInfoList &Inputs,
67 const llvm::opt::ArgList &TCArgs,
68 const char *AssembleOutput) const override;
69};
70
71} // namespace SPIRV
72} // namespace tools
73
74namespace toolchains {
75
76class LLVM_LIBRARY_VISIBILITY SPIRVToolChain : public ToolChain {
77 mutable std::unique_ptr<Tool> Assembler;
78
79public:
80 SPIRVToolChain(const Driver &D, const llvm::Triple &Triple,
81 const llvm::opt::ArgList &Args);
82
83 bool useIntegratedAs() const override { return true; }
84
85 bool IsIntegratedBackendDefault() const override { return true; }
86 bool IsNonIntegratedBackendSupported() const override { return true; }
87 bool IsMathErrnoDefault() const override { return false; }
88 bool isCrossCompiling() const override { return true; }
89 bool isPICDefault() const override { return false; }
90 bool isPIEDefault(const llvm::opt::ArgList &Args) const override {
91 return false;
92 }
93 bool isPICDefaultForced() const override { return false; }
94 bool SupportsProfiling() const override { return false; }
95 bool HasNativeLLVMSupport() const override;
96
97 clang::driver::Tool *SelectTool(const JobAction &JA) const override;
98
99protected:
100 clang::driver::Tool *getTool(Action::ActionClass AC) const override;
101 Tool *buildLinker() const override;
102
103private:
104 clang::driver::Tool *getAssembler() const;
105
106 bool NativeLLVMSupport;
107};
108
109} // namespace toolchains
110} // namespace driver
111} // namespace clang
112#endif
Compilation - A set of tasks to perform for a single driver invocation.
Definition Compilation.h:45
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
Definition Driver.h:99
InputInfo - Wrapper for information about an input source.
Definition InputInfo.h:22
ToolChain - Access to tools for a single platform.
Definition ToolChain.h:92
ToolChain(const Driver &D, const llvm::Triple &T, const llvm::opt::ArgList &Args)
Definition ToolChain.cpp:89
Tool - Information on a specific compilation tool.
Definition Tool.h:32
Tool(const char *Name, const char *ShortName, const ToolChain &TC)
Definition Tool.cpp:14
bool isPICDefault() const override
Test whether this toolchain defaults to PIC.
Definition SPIRV.h:89
bool IsNonIntegratedBackendSupported() const override
IsNonIntegratedBackendSupported - Does this tool chain support -fno-integrated-objemitter.
Definition SPIRV.h:86
bool useIntegratedAs() const override
Check if the toolchain should use the integrated assembler.
Definition SPIRV.h:83
bool isPICDefaultForced() const override
Tests whether this toolchain forces its default for PIC, PIE or non-PIC.
Definition SPIRV.h:93
bool IsMathErrnoDefault() const override
IsMathErrnoDefault - Does this tool chain use -fmath-errno by default.
Definition SPIRV.h:87
bool IsIntegratedBackendDefault() const override
IsIntegratedBackendDefault - Does this tool chain enable -fintegrated-objemitter by default.
Definition SPIRV.h:85
bool isPIEDefault(const llvm::opt::ArgList &Args) const override
Test whether this toolchain defaults to PIE.
Definition SPIRV.h:90
bool isCrossCompiling() const override
Returns true if the toolchain is targeting a non-native architecture.
Definition SPIRV.h:88
SPIRVToolChain(const Driver &D, const llvm::Triple &Triple, const llvm::opt::ArgList &Args)
Definition SPIRV.cpp:169
bool SupportsProfiling() const override
SupportsProfiling - Does this tool chain support -pg.
Definition SPIRV.h:94
bool hasIntegratedAssembler() const override
Definition SPIRV.h:63
bool hasIntegratedCPP() const override
Definition SPIRV.h:64
Assembler(const ToolChain &TC)
Definition SPIRV.h:62
bool isLinkJob() const override
Definition SPIRV.h:53
Linker(const ToolChain &TC)
Definition SPIRV.h:51
bool hasIntegratedCPP() const override
Definition SPIRV.h:52
bool hasIntegratedAssembler() const override
Definition SPIRV.h:41
bool hasIntegratedCPP() const override
Definition SPIRV.h:40
Translator(const ToolChain &TC)
Definition SPIRV.h:37
void constructLLVMLinkCommand(Compilation &C, const Tool &T, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const llvm::opt::ArgList &Args)
Definition SPIRV.cpp:78
void constructAssembleCommand(Compilation &C, const Tool &T, const JobAction &JA, const InputInfo &Output, const InputInfo &Input, const llvm::opt::ArgStringList &Args)
Definition SPIRV.cpp:48
void constructTranslateCommand(Compilation &C, const Tool &T, const JobAction &JA, const InputInfo &Output, const InputInfo &Input, const llvm::opt::ArgStringList &Args)
Definition SPIRV.cpp:20
SmallVector< InputInfo, 4 > InputInfoList
Definition Driver.h:50
The JSON file list parser is used to communicate input to InstallAPI.
const FunctionProtoType * T