1//===--- SPIRVCommandLine.h ---- Command Line Options -----------*- 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 contains classes and functions needed for processing, parsing, and
10// using CLI options for the SPIR-V backend.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_SPIRV_SPIRVCOMMANDLINE_H
15#define LLVM_LIB_TARGET_SPIRV_SPIRVCOMMANDLINE_H
16
17#include "MCTargetDesc/SPIRVBaseInfo.h"
18#include "llvm/Support/CommandLine.h"
19#include <string>
20
21namespace llvm {
22template <typename T> class ArrayRef;
23class StringRef;
24class Triple;
25
26/// Command line parser for toggling SPIR-V extensions.
27struct SPIRVExtensionsParser : public cl::parser<ExtensionSet> {
28public:
29 SPIRVExtensionsParser(cl::Option &O) : cl::parser<ExtensionSet>(O) {}
30
31 /// Parses SPIR-V extension name from CLI arguments.
32 ///
33 /// \return Returns true on error.
34 bool parse(cl::Option &O, StringRef ArgName, StringRef ArgValue,
35 ExtensionSet &Vals);
36
37 /// Validates and converts extension names into internal enum values.
38 ///
39 /// \return Returns a reference to the unknown SPIR-V extension name from the
40 /// list if present, or an empty StringRef on success.
41 static StringRef checkExtensions(ArrayRef<std::string> ExtNames,
42 ExtensionSet &AllowedExtensions);
43
44 /// Returns the list of extensions that are valid for a particular
45 /// target environment (i.e., OpenCL or Vulkan).
46 static ExtensionSet getValidExtensions(const Triple &TT);
47
48private:
49 static ExtensionSet DisabledExtensions;
50};
51
52} // namespace llvm
53#endif // LLVM_LIB_TARGET_SPIRV_SPIRVCOMMANDLINE_H
54