Skip to content

Commit 05e0d73

Browse files
committed
Address feedback: split common, vk and ocl builtins
The SPIR-V builtins are now split into 3 differents file: BuiltinsSPIRVCore.td, BuiltinsSPIRVVK.td for Vulkan specific builtins, BuiltinsSPIRVCL.td for OpenCL specific builtins and BuiltinsSPIRVCommon.td for common ones.
1 parent 020a804 commit 05e0d73

File tree

14 files changed

+158
-59
lines changed

14 files changed

+158
-59
lines changed

clang/include/clang/Basic/BuiltinsSPIRV.td

Lines changed: 0 additions & 48 deletions
This file was deleted.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
//===--- BuiltinsSPIRVBase.td - SPIRV Builtin function database -*- 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+
include "clang/Basic/BuiltinsBase.td"
10+
11+
class SPIRVBuiltin<string prototype, list<Attribute> Attr> : Builtin {
12+
let Spellings = ["__builtin_spirv_"#NAME];
13+
let Prototype = prototype;
14+
let Attributes = !listconcat([NoThrow], Attr);
15+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//===--- BuiltinsSPIRVCL.td - SPIRV Builtin function database ---*- 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+
include "clang/Basic/BuiltinsSPIRVBase.td"
10+
11+
def generic_cast_to_ptr_explicit
12+
: SPIRVBuiltin<"void*(void*, int)", [NoThrow, Const, CustomTypeChecking]>;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//===- BuiltinsSPIRVCommon.td - SPIRV Builtin function database -*- 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+
include "clang/Basic/BuiltinsSPIRVBase.td"
10+
11+
def distance : SPIRVBuiltin<"void(...)", [NoThrow, Const]>;
12+
def length : SPIRVBuiltin<"void(...)", [NoThrow, Const]>;
13+
def smoothstep : SPIRVBuiltin<"void(...)", [NoThrow, Const, CustomTypeChecking]>;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//===--- BuiltinsSPIRVVK.td - SPIRV Builtin function database ---*- 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+
include "clang/Basic/BuiltinsSPIRVBase.td"
10+
11+
12+
def reflect : SPIRVBuiltin<"void(...)", [NoThrow, Const]>;
13+
def faceforward : SPIRVBuiltin<"void(...)", [NoThrow, Const, CustomTypeChecking]>;

clang/include/clang/Basic/CMakeLists.txt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,17 @@ clang_tablegen(BuiltinsRISCV.inc -gen-clang-builtins
103103
SOURCE BuiltinsRISCV.td
104104
TARGET ClangBuiltinsRISCV)
105105

106-
clang_tablegen(BuiltinsSPIRV.inc -gen-clang-builtins
107-
SOURCE BuiltinsSPIRV.td
108-
TARGET ClangBuiltinsSPIRV)
106+
clang_tablegen(BuiltinsSPIRVCommon.inc -gen-clang-builtins
107+
SOURCE BuiltinsSPIRVCommon.td
108+
TARGET ClangBuiltinsSPIRVCommon)
109+
110+
clang_tablegen(BuiltinsSPIRVVK.inc -gen-clang-builtins
111+
SOURCE BuiltinsSPIRVVK.td
112+
TARGET ClangBuiltinsSPIRVVK)
113+
114+
clang_tablegen(BuiltinsSPIRVCL.inc -gen-clang-builtins
115+
SOURCE BuiltinsSPIRVCL.td
116+
TARGET ClangBuiltinsSPIRVCL)
109117

110118
clang_tablegen(BuiltinsX86.inc -gen-clang-builtins
111119
SOURCE BuiltinsX86.td

clang/include/clang/Basic/DiagnosticSemaKinds.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12741,6 +12741,8 @@ def err_bit_int_max_size : Error<"%select{signed|unsigned}0 _BitInt of bit "
1274112741
"sizes greater than %1 not supported">;
1274212742

1274312743
// SPIR-V builtins diagnostics
12744+
def err_spirv_invalid_target : Error<
12745+
"builtin requires %select{spirv|spirv32 or spirv64}0 target">;
1274412746
def err_spirv_builtin_generic_cast_invalid_arg : Error<
1274512747
"expecting a pointer argument to the generic address space">;
1274612748
def err_spirv_enum_not_int : Error<

clang/include/clang/Basic/TargetBuiltins.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,17 @@ namespace clang {
157157
enum {
158158
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
159159
#define GET_BUILTIN_ENUMERATORS
160-
#include "clang/Basic/BuiltinsSPIRV.inc"
160+
#include "clang/Basic/BuiltinsSPIRVCommon.inc"
161+
#undef GET_BUILTIN_ENUMERATORS
162+
FirstVKBuiltin,
163+
LastCoreBuiltin = FirstVKBuiltin - 1,
164+
#define GET_BUILTIN_ENUMERATORS
165+
#include "clang/Basic/BuiltinsSPIRVVK.inc"
166+
#undef GET_BUILTIN_ENUMERATORS
167+
FirstCLBuiltin,
168+
LastVKBuiltin = FirstCLBuiltin - 1,
169+
#define GET_BUILTIN_ENUMERATORS
170+
#include "clang/Basic/BuiltinsSPIRVCL.inc"
161171
#undef GET_BUILTIN_ENUMERATORS
162172
LastTSBuiltin
163173
};

clang/include/clang/Sema/SemaSPIRV.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ class SemaSPIRV : public SemaBase {
2121
public:
2222
SemaSPIRV(Sema &S);
2323

24-
bool CheckSPIRVBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
24+
bool CheckSPIRVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
25+
CallExpr *TheCall);
2526
};
2627
} // namespace clang
2728

clang/lib/Basic/Targets/SPIR.cpp

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,48 @@ static constexpr int NumBuiltins =
2424
clang::SPIRV::LastTSBuiltin - Builtin::FirstTSBuiltin;
2525

2626
#define GET_BUILTIN_STR_TABLE
27-
#include "clang/Basic/BuiltinsSPIRV.inc"
27+
#include "clang/Basic/BuiltinsSPIRVCommon.inc"
2828
#undef GET_BUILTIN_STR_TABLE
2929

3030
static constexpr Builtin::Info BuiltinInfos[] = {
3131
#define GET_BUILTIN_INFOS
32-
#include "clang/Basic/BuiltinsSPIRV.inc"
32+
#include "clang/Basic/BuiltinsSPIRVCommon.inc"
3333
#undef GET_BUILTIN_INFOS
3434
};
35-
static_assert(std::size(BuiltinInfos) == NumBuiltins);
35+
36+
namespace CL {
37+
#define GET_BUILTIN_STR_TABLE
38+
#include "clang/Basic/BuiltinsSPIRVCL.inc"
39+
#undef GET_BUILTIN_STR_TABLE
40+
41+
static constexpr Builtin::Info BuiltinInfos[] = {
42+
#define GET_BUILTIN_INFOS
43+
#include "clang/Basic/BuiltinsSPIRVCL.inc"
44+
#undef GET_BUILTIN_INFOS
45+
};
46+
} // namespace CL
47+
48+
namespace VK {
49+
#define GET_BUILTIN_STR_TABLE
50+
#include "clang/Basic/BuiltinsSPIRVVK.inc"
51+
#undef GET_BUILTIN_STR_TABLE
52+
53+
static constexpr Builtin::Info BuiltinInfos[] = {
54+
#define GET_BUILTIN_INFOS
55+
#include "clang/Basic/BuiltinsSPIRVVK.inc"
56+
#undef GET_BUILTIN_INFOS
57+
};
58+
} // namespace VK
59+
60+
static_assert(std::size(BuiltinInfos) + std::size(CL::BuiltinInfos) +
61+
std::size(VK::BuiltinInfos) ==
62+
NumBuiltins);
3663

3764
llvm::SmallVector<Builtin::InfosShard>
3865
BaseSPIRVTargetInfo::getTargetBuiltins() const {
39-
return {{&BuiltinStrings, BuiltinInfos}};
66+
return {{&BuiltinStrings, BuiltinInfos},
67+
{&VK::BuiltinStrings, VK::BuiltinInfos},
68+
{&CL::BuiltinStrings, CL::BuiltinInfos}};
4069
}
4170

4271
void SPIRTargetInfo::getTargetDefines(const LangOptions &Opts,

0 commit comments

Comments
 (0)