1 //===-- DXILOperationCommon.h - DXIL Operation ------------------*- 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 is created to share common definitions used by both the
10 // DXILOpBuilder and the table
11 //  generator.
12 // Documentation for DXIL can be found in
13 // https://github.com/Microsoft/DirectXShaderCompiler/blob/main/docs/DXIL.rst.
14 //
15 //===----------------------------------------------------------------------===//
16 
17 #ifndef LLVM_SUPPORT_DXILOPERATIONCOMMON_H
18 #define LLVM_SUPPORT_DXILOPERATIONCOMMON_H
19 
20 #include "llvm/ADT/StringSwitch.h"
21 
22 namespace llvm {
23 namespace DXIL {
24 
25 enum class ParameterKind : uint8_t {
26   INVALID = 0,
27   VOID,
28   HALF,
29   FLOAT,
30   DOUBLE,
31   I1,
32   I8,
33   I16,
34   I32,
35   I64,
36   OVERLOAD,
37   CBUFFER_RET,
38   RESOURCE_RET,
39   DXIL_HANDLE,
40 };
41 
42 inline ParameterKind parameterTypeNameToKind(StringRef Name) {
43   return StringSwitch<ParameterKind>(Name)
44       .Case("void", ParameterKind::VOID)
45       .Case("half", ParameterKind::HALF)
46       .Case("float", ParameterKind::FLOAT)
47       .Case("double", ParameterKind::DOUBLE)
48       .Case("i1", ParameterKind::I1)
49       .Case("i8", ParameterKind::I8)
50       .Case("i16", ParameterKind::I16)
51       .Case("i32", ParameterKind::I32)
52       .Case("i64", ParameterKind::I64)
53       .Case("$o", ParameterKind::OVERLOAD)
54       .Case("dx.types.Handle", ParameterKind::DXIL_HANDLE)
55       .Case("dx.types.CBufRet", ParameterKind::CBUFFER_RET)
56       .Case("dx.types.ResRet", ParameterKind::RESOURCE_RET)
57       .Default(ParameterKind::INVALID);
58 }
59 
60 } // namespace DXIL
61 } // namespace llvm
62 
63 #endif
64