Skip to content

Commit b800ac2

Browse files
[SYCL] Enable SYCL integration header support with kernel arg optimization table
1 parent 3b7e3d7 commit b800ac2

File tree

10 files changed

+159
-130
lines changed

10 files changed

+159
-130
lines changed

clang/include/clang/Sema/Sema.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,8 @@ class SYCLIntegrationHeader {
336336

337337
/// Adds a kernel parameter descriptor to current kernel invocation
338338
/// descriptor.
339-
void addParamDesc(kernel_param_kind_t Kind, int Info, unsigned Offset);
339+
void addParamDesc(kernel_param_kind_t Kind, int Info, unsigned Offset,
340+
unsigned NumOpenCLParams);
340341

341342
/// Signals that addition of parameter descriptors to current kernel
342343
/// invocation descriptor has finished.
@@ -358,9 +359,9 @@ class SYCLIntegrationHeader {
358359
int Info = 0;
359360
// Offset of the captured parameter value in the lambda or function object.
360361
unsigned Offset = 0;
361-
// bool to mark kernel parameters that are used
362-
bool KernelParamUsed;
363-
KernelParamDesc() = default;
362+
// NumOpenCLParams to capture number of parameters in Accessor/Sampler init
363+
// method.
364+
unsigned NumOpenCLParams = 1;
364365
};
365366

366367
// Kernel invocation descriptor

clang/lib/Sema/SemaSYCL.cpp

Lines changed: 48 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1765,14 +1765,16 @@ class SyclKernelIntHeaderCreator : public SyclKernelFieldHandler {
17651765

17661766
void addParam(const FieldDecl *FD, QualType ArgTy,
17671767
SYCLIntegrationHeader::kernel_param_kind_t Kind) {
1768+
assert(Kind != SYCLIntegrationHeader::kind_accessor &&
1769+
"Kernel parameter should not be an Accessor");
17681770
uint64_t Size;
17691771
const ConstantArrayType *CAT =
17701772
SemaRef.getASTContext().getAsConstantArrayType(ArgTy);
17711773
if (CAT)
17721774
ArgTy = CAT->getElementType();
17731775
Size = SemaRef.getASTContext().getTypeSizeInChars(ArgTy).getQuantity();
17741776
Header.addParamDesc(Kind, static_cast<unsigned>(Size),
1775-
static_cast<unsigned>(CurOffset));
1777+
static_cast<unsigned>(CurOffset), 1);
17761778
}
17771779

17781780
public:
@@ -1783,6 +1785,16 @@ class SyclKernelIntHeaderCreator : public SyclKernelFieldHandler {
17831785
Header.startKernel(Name, NameType, StableName, KernelObj->getLocation());
17841786
}
17851787

1788+
unsigned getNumOpenCLParams(const CXXRecordDecl *SamplerOrAccessorTy) {
1789+
assert(SamplerOrAccessorTy &&
1790+
"Sampler/Accessor type must be a C++ record type");
1791+
CXXMethodDecl *InitMethod =
1792+
getMethodByName(SamplerOrAccessorTy, InitMethodName);
1793+
assert(InitMethod && "sampler/accessor must have __init method");
1794+
unsigned NumOpenCLParams;
1795+
return NumOpenCLParams = InitMethod->param_size();
1796+
}
1797+
17861798
bool handleSyclAccessorType(const CXXBaseSpecifier &BC,
17871799
QualType FieldTy) final {
17881800
const auto *AccTy =
@@ -1792,7 +1804,8 @@ class SyclKernelIntHeaderCreator : public SyclKernelFieldHandler {
17921804
int Dims = static_cast<int>(
17931805
AccTy->getTemplateArgs()[1].getAsIntegral().getExtValue());
17941806
int Info = getAccessTarget(AccTy) | (Dims << 11);
1795-
Header.addParamDesc(SYCLIntegrationHeader::kind_accessor, Info, CurOffset);
1807+
Header.addParamDesc(SYCLIntegrationHeader::kind_accessor, Info, CurOffset,
1808+
getNumOpenCLParams(AccTy));
17961809
return true;
17971810
}
17981811

@@ -1804,20 +1817,21 @@ class SyclKernelIntHeaderCreator : public SyclKernelFieldHandler {
18041817
int Dims = static_cast<int>(
18051818
AccTy->getTemplateArgs()[1].getAsIntegral().getExtValue());
18061819
int Info = getAccessTarget(AccTy) | (Dims << 11);
1807-
Header.addParamDesc(SYCLIntegrationHeader::kind_accessor, Info, CurOffset);
1820+
Header.addParamDesc(SYCLIntegrationHeader::kind_accessor, Info, CurOffset,
1821+
getNumOpenCLParams(AccTy));
18081822
return true;
18091823
}
1810-
1824+
18111825
bool handleSyclSamplerType(FieldDecl *FD, QualType FieldTy) final {
18121826
const auto *SamplerTy = FieldTy->getAsCXXRecordDecl();
18131827
assert(SamplerTy && "Sampler type must be a C++ record type");
18141828
CXXMethodDecl *InitMethod = getMethodByName(SamplerTy, InitMethodName);
18151829
assert(InitMethod && "sampler must have __init method");
1816-
18171830
// sampler __init method has only one argument
1831+
assert((InitMethod->param_size() == 1) &&
1832+
"sampler __init method should have only one argument");
18181833
const ParmVarDecl *SamplerArg = InitMethod->getParamDecl(0);
18191834
assert(SamplerArg && "sampler __init method must have sampler parameter");
1820-
18211835
addParam(FD, SamplerArg->getType(), SYCLIntegrationHeader::kind_sampler);
18221836
return true;
18231837
}
@@ -2686,34 +2700,42 @@ void SYCLIntegrationHeader::emit(raw_ostream &O) {
26862700
"the\n";
26872701
O << "// corresponding source\n";
26882702
O << "static constexpr\n";
2689-
O << "const bool kernel_param_used[] = {\n";
2690-
O << " //PARAM_USED_TABLE_BEGIN "
2691-
<< "\n";
2692-
for (unsigned I = 0; I < KernelDescs.size(); I++) {
2693-
auto &K = KernelDescs[I];
2703+
O << "const bool param_omit_table[] = {\n";
2704+
O << " // OMIT_TABLE_BEGIN\n";
2705+
for (const KernelDesc &K : KernelDescs) {
26942706
O << " //--- " << K.Name << "\n";
2695-
// bool value for each param
2707+
O << " ";
2708+
for (const KernelParamDesc &P : K.Params)
2709+
for (unsigned J = 0; J < P.NumOpenCLParams; J++)
2710+
O << "false, ";
2711+
O << "\n";
26962712
}
2697-
O << " //PARAM_USED_TABLE_END "
2698-
<< "\n";
2699-
O << " } \n\n";
2713+
O << " // OMIT_TABLE_END\n";
2714+
O << " }; \n\n";
27002715

27012716
O << "// array representing signatures of all kernels defined in the\n";
27022717
O << "// corresponding source\n";
27032718
O << "static constexpr\n";
27042719
O << "const kernel_param_desc_t kernel_signatures[] = {\n";
27052720

2706-
for (unsigned I = 0; I < KernelDescs.size(); I++) {
2707-
auto &K = KernelDescs[I];
2721+
unsigned CurIndex = 0;
2722+
for (const KernelDesc &K : KernelDescs) {
27082723
O << " //--- " << K.Name << "\n";
2709-
2710-
for (unsigned I = 0; I < K.Params.size(); I++) {
2711-
auto &P = K.Params[I];
2724+
for (const KernelParamDesc &P : K.Params) {
27122725
std::string TyStr = paramKind2Str(P.Kind);
27132726
O << " { kernel_param_kind_t::" << TyStr << ", ";
2714-
O << P.Info << ", " << P.Offset << ", "
2715-
<< "kernel_param_used[" << I << "]"
2716-
<< " },\n";
2727+
O << P.Info << ", " << P.Offset << ", ";
2728+
O << "param_omit_table[" << CurIndex << "]";
2729+
for (unsigned X = 1; X < P.NumOpenCLParams; X++) {
2730+
++CurIndex;
2731+
if (X < P.NumOpenCLParams)
2732+
O << " | ";
2733+
O << "(param_omit_table[" << CurIndex << "]"
2734+
<< " << " << X << ")";
2735+
}
2736+
++CurIndex;
2737+
O << "}";
2738+
O << ",\n";
27172739
}
27182740
O << "\n";
27192741
}
@@ -2808,14 +2830,11 @@ void SYCLIntegrationHeader::startKernel(StringRef KernelName,
28082830
}
28092831

28102832
void SYCLIntegrationHeader::addParamDesc(kernel_param_kind_t Kind, int Info,
2811-
unsigned Offset) {
2833+
unsigned Offset,
2834+
unsigned NumOpenCLParams) {
28122835
auto *K = getCurKernelDesc();
28132836
assert(K && "no kernels");
2814-
K->Params.push_back(KernelParamDesc());
2815-
KernelParamDesc &PD = K->Params.back();
2816-
PD.Kind = Kind;
2817-
PD.Info = Info;
2818-
PD.Offset = Offset;
2837+
K->Params.push_back({Kind, Info, Offset, NumOpenCLParams});
28192838
}
28202839

28212840
void SYCLIntegrationHeader::endKernel() {

clang/test/CodeGenSYCL/integration_header.cpp

Lines changed: 39 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -24,52 +24,57 @@
2424
// CHECK-NEXT: "_ZTSZ4mainE16accessor_in_base"
2525
// CHECK-NEXT: };
2626
//
27-
// CHECK: static constexpr
28-
// CHECK-NEXT: const bool kernel_param_used[] = {
29-
// CHECK-NEXT: //PARAM_USED_TABLE_BEGIN
30-
// CHECK-NEXT: //kernel_name_1
31-
// CHECK-NEXT: true, true, true
32-
// CHECK-NEXT: //kernel_name_2
33-
// CHECK-NEXT: true, true, true
34-
// CHECK-NEXT: //PARAM_USED_TABLE_END
35-
// CHECK-NEXT: }
36-
27+
// CHECK: static constexpr
28+
// CHECK-NEXT: const bool param_omit_table[] = {
29+
// CHECK-NEXT: // OMIT_TABLE_BEGIN
30+
// CHECK-NEXT: //--- _ZTSZ4mainE12first_kernel
31+
// CHECK-NEXT: false, false, false, false, false, false, false, false, false, false, false, false,
32+
// CHECK-NEXT: //--- _ZTSN16second_namespace13second_kernelIcEE
33+
// CHECK-NEXT: false, false, false, false, false, false,
34+
// CHECK-NEXT: //--- _ZTS12third_kernelILi1Ei5pointIZ4mainE1XEE
35+
// CHECK-NEXT: false, false, false, false, false, false,
36+
// CHECK-NEXT: //--- _ZTS13fourth_kernelIJN15template_arg_ns14namespaced_argILi1EEEEE
37+
// CHECK-NEXT: false, false, false, false, false,
38+
// CHECK-NEXT: //--- _ZTSZ4mainE16accessor_in_base
39+
// CHECK-NEXT: false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
40+
// CHECK-NEXT: // OMIT_TABLE_END
41+
// CHECK-NEXT: };
3742
// CHECK: static constexpr
3843
// CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = {
3944
// CHECK-NEXT: //--- _ZTSZ4mainE12first_kernel
40-
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0, kernel_param_used[0] },
41-
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 1, 4, kernel_param_used[1] },
42-
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 8, kernel_param_used[2] },
43-
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 12, kernel_param_used[3] },
44-
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 6112, 24, kernel_param_used[4] },
45-
// CHECK-NEXT: { kernel_param_kind_t::kind_sampler, 8, 40, kernel_param_used[5] },
45+
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0, param_omit_table[0]},
46+
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 1, 4, param_omit_table[1]},
47+
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 8, param_omit_table[2]},
48+
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 12, param_omit_table[3] | (param_omit_table[4] << 1) | (param_omit_table[5] << 2) | (param_omit_table[6] << 3)},
49+
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 6112, 24, param_omit_table[7] | (param_omit_table[8] << 1) | (param_omit_table[9] << 2) | (param_omit_table[10] << 3)},
50+
// CHECK-NEXT: { kernel_param_kind_t::kind_sampler, 8, 40, param_omit_table[11]},
4651
// CHECK-EMPTY:
4752
// CHECK-NEXT: //--- _ZTSN16second_namespace13second_kernelIcEE
48-
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0, kernel_param_used[0] },
49-
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 6112, 4, kernel_param_used[1] },
50-
// CHECK-NEXT: { kernel_param_kind_t::kind_sampler, 8, 16, kernel_param_used[2] },
53+
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0, param_omit_table[12]},
54+
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 6112, 4, param_omit_table[13] | (param_omit_table[14] << 1) | (param_omit_table[15] << 2) | (param_omit_table[16] << 3)},
55+
// CHECK-NEXT: { kernel_param_kind_t::kind_sampler, 8, 16, param_omit_table[17]},
5156
// CHECK-EMPTY:
5257
// CHECK-NEXT: //--- _ZTS12third_kernelILi1Ei5pointIZ4mainE1XEE
53-
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0, kernel_param_used[0] },
54-
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 6112, 4, kernel_param_used[1] },
55-
// CHECK-NEXT: { kernel_param_kind_t::kind_sampler, 8, 16, kernel_param_used[2] },
58+
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0, param_omit_table[18]},
59+
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 6112, 4, param_omit_table[19] | (param_omit_table[20] << 1) | (param_omit_table[21] << 2) | (param_omit_table[22] << 3)},
60+
// CHECK-NEXT: { kernel_param_kind_t::kind_sampler, 8, 16, param_omit_table[23]},
5661
// CHECK-EMPTY:
5762
// CHECK-NEXT: //--- _ZTS13fourth_kernelIJN15template_arg_ns14namespaced_argILi1EEEEE
58-
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0, kernel_param_used[0] },
59-
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 6112, 4, kernel_param_used[1] },
63+
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0, param_omit_table[24]},
64+
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 6112, 4, param_omit_table[25] | (param_omit_table[26] << 1) | (param_omit_table[27] << 2) | (param_omit_table[28] << 3)},
6065
// CHECK-EMPTY:
61-
// CHECK-NEXT: //--- _ZTSZ4mainE16accessor_in_base
62-
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0, kernel_param_used[0] },
63-
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 4, kernel_param_used[1] },
64-
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 8, kernel_param_used[2] },
65-
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 20, kernel_param_used[3] },
66-
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 24, kernel_param_used[4] },
67-
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 36, kernel_param_used[5] },
68-
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 40, kernel_param_used[6] },
69-
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 52, kernel_param_used[7] },
66+
// CHECK-NEXT: //--- _ZTSZ4mainE16accessor_in_base
67+
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0, param_omit_table[29]},
68+
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 4, param_omit_table[30]},
69+
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 8, param_omit_table[31] | (param_omit_table[32] << 1) | (param_omit_table[33] << 2) | (param_omit_table[34] << 3)},
70+
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 20, param_omit_table[35]},
71+
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 24, param_omit_table[36] | (param_omit_table[37] << 1) | (param_omit_table[38] << 2) | (param_omit_table[39] << 3)},
72+
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 36, param_omit_table[40]},
73+
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 40, param_omit_table[41] | (param_omit_table[42] << 1) | (param_omit_table[43] << 2) | (param_omit_table[44] << 3)},
74+
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 52, param_omit_table[45] | (param_omit_table[46] << 1) | (param_omit_table[47] << 2) | (param_omit_table[48] << 3)},
7075
// CHECK-EMPTY:
7176
// CHECK-NEXT: };
72-
//
77+
7378
// CHECK: template <> struct KernelInfo<class first_kernel> {
7479
// CHECK: template <> struct KernelInfo<::second_namespace::second_kernel<char>> {
7580
// CHECK: template <> struct KernelInfo<::third_kernel<1, int, ::point<X>>> {

clang/test/CodeGenSYCL/kernel-param-acc-array-ih.cpp

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,26 @@
1616
// CHECK-NEXT: const char* const kernel_names[] = {
1717
// CHECK-NEXT: "_ZTSZ4mainE8kernel_A"
1818
// CHECK-NEXT: };
19-
19+
//
2020
// CHECK: static constexpr
21-
// CHECK-NEXT: const bool kernel_param_used[] = {
22-
// CHECK-NEXT: //PARAM_USED_TABLE_BEGIN
23-
// CHECK-NEXT: //kernel_name_1
24-
// CHECK-NEXT: true, true, true
25-
// CHECK-NEXT: //kernel_name_2
26-
// CHECK-NEXT: true, true, true
27-
// CHECK-NEXT: //PARAM_USED_TABLE_END
28-
// CHECK-NEXT: }
29-
21+
// CHECK-NEXT: const bool param_omit_table[] = {
22+
// CHECK-NEXT: // OMIT_TABLE_BEGIN
23+
// CHECK-NEXT: //--- _ZTSZ4mainE8kernel_A
24+
// CHECK-NEXT: false, false, false, false, false, false, false, false,
25+
// CHECK-NEXT: // OMIT_TABLE_END
26+
// CHECK-NEXT: };
27+
//
3028
// CHECK: static constexpr
3129
// CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = {
3230
// CHECK-NEXT: //--- _ZTSZ4mainE8kernel_A
33-
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 0, kernel_param_used[0] },
34-
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 12, kernel_param_used[1] },
31+
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 0, param_omit_table[0] | (param_omit_table[1] << 1) | (param_omit_table[2] << 2) | (param_omit_table[3] << 3)},
32+
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 12, param_omit_table[4] | (param_omit_table[5] << 1) | (param_omit_table[6] << 2) | (param_omit_table[7] << 3)},
3533
// CHECK-EMPTY:
3634
// CHECK-NEXT: };
37-
3835
// CHECK: static constexpr
3936
// CHECK-NEXT: const unsigned kernel_signature_start[] = {
4037
// CHECK-NEXT: 0 // _ZTSZ4mainE8kernel_A
4138
// CHECK-NEXT: };
42-
4339
// CHECK: template <> struct KernelInfo<class kernel_A> {
4440

4541
#include <sycl.hpp>

clang/test/CodeGenSYCL/kernel-param-member-acc-array-ih.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,18 @@
1818
// CHECK-NEXT: };
1919

2020
// CHECK: static constexpr
21-
// CHECK-NEXT: const bool kernel_param_used[] = {
22-
// CHECK-NEXT: //PARAM_USED_TABLE_BEGIN
23-
// CHECK-NEXT: //kernel_name_1
24-
// CHECK-NEXT: true, true, true
25-
// CHECK-NEXT: //kernel_name_2
26-
// CHECK-NEXT: true, true, true
27-
// CHECK-NEXT: //PARAM_USED_TABLE_END
28-
// CHECK-NEXT: }
21+
// CHECK-NEXT: const bool param_omit_table[] = {
22+
// CHECK-NEXT: // OMIT_TABLE_BEGIN
23+
// CHECK-NEXT: //--- _ZTSZ4mainE8kernel_C
24+
// CHECK-NEXT: false, false, false, false, false, false, false, false,
25+
// CHECK-NEXT: // OMIT_TABLE_END
26+
// CHECK-NEXT: };
2927

3028
// CHECK: static constexpr
3129
// CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = {
32-
// CHECK-NEXT: //--- _ZTSZ4mainE8kernel_C
33-
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 0, kernel_param_used[0] },
34-
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 12, kernel_param_used[1] },
30+
// CHECK-NEXT: //--- _ZTSZ4mainE8kernel_C
31+
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 0, param_omit_table[0] | (param_omit_table[1] << 1) | (param_omit_table[2] << 2) | (param_omit_table[3] << 3)},
32+
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 12, param_omit_table[4] | (param_omit_table[5] << 1) | (param_omit_table[6] << 2) | (param_omit_table[7] << 3)},
3533
// CHECK-EMPTY:
3634
// CHECK-NEXT: };
3735

clang/test/CodeGenSYCL/kernel-param-pod-array-ih.cpp

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,21 @@
1717
// CHECK-NEXT: };
1818

1919
// CHECK: static constexpr
20-
// CHECK-NEXT: const bool kernel_param_used[] = {
21-
// CHECK-NEXT: //PARAM_USED_TABLE_BEGIN
22-
// CHECK-NEXT: //kernel_name_1
23-
// CHECK-NEXT: true, true, true
24-
// CHECK-NEXT: //kernel_name_2
25-
// CHECK-NEXT: true, true, true
26-
// CHECK-NEXT: //PARAM_USED_TABLE_END
27-
// CHECK-NEXT: }
20+
// CHECK-NEXT: const bool param_omit_table[] = {
21+
// CHECK-NEXT: // OMIT_TABLE_BEGIN
22+
// CHECK-NEXT: //--- _ZTSZ4mainE8kernel_B
23+
// CHECK-NEXT: false, false, false, false, false,
24+
// CHECK-NEXT: // OMIT_TABLE_END
25+
// CHECK-NEXT: };
2826

2927
// CHECK: static constexpr
3028
// CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = {
31-
// CHECK-NEXT: //--- _ZTSZ4mainE8kernel_B
32-
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0, kernel_param_used[0] },
33-
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 4, kernel_param_used[1] },
34-
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 8, kernel_param_used[2] },
35-
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 12, kernel_param_used[3] },
36-
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 16, kernel_param_used[4] },
29+
// CHECK-NEXT: //--- _ZTSZ4mainE8kernel_B
30+
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 0, param_omit_table[0]},
31+
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 4, param_omit_table[1]},
32+
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 8, param_omit_table[2]},
33+
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 12, param_omit_table[3]},
34+
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 4, 16, param_omit_table[4]},
3735
// CHECK-EMPTY:
3836
// CHECK-NEXT: };
3937

0 commit comments

Comments
 (0)