Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 0 additions & 73 deletions clang/include/clang/Sema/Sema.h
Original file line number Diff line number Diff line change
Expand Up @@ -4702,79 +4702,6 @@ class Sema final : public SemaBase {
/// Essentially, this just moves them to the current pool.
void redelayDiagnostics(sema::DelayedDiagnosticPool &pool);

SYCLWorkGroupSizeHintAttr *
MergeSYCLWorkGroupSizeHintAttr(Decl *D, const SYCLWorkGroupSizeHintAttr &A);
IntelReqdSubGroupSizeAttr *
MergeIntelReqdSubGroupSizeAttr(Decl *D, const IntelReqdSubGroupSizeAttr &A);
IntelNamedSubGroupSizeAttr *
MergeIntelNamedSubGroupSizeAttr(Decl *D, const IntelNamedSubGroupSizeAttr &A);
SYCLIntelNumSimdWorkItemsAttr *
MergeSYCLIntelNumSimdWorkItemsAttr(Decl *D,
const SYCLIntelNumSimdWorkItemsAttr &A);
SYCLIntelESimdVectorizeAttr *
MergeSYCLIntelESimdVectorizeAttr(Decl *D,
const SYCLIntelESimdVectorizeAttr &A);
SYCLIntelSchedulerTargetFmaxMhzAttr *MergeSYCLIntelSchedulerTargetFmaxMhzAttr(
Decl *D, const SYCLIntelSchedulerTargetFmaxMhzAttr &A);
SYCLIntelNoGlobalWorkOffsetAttr *MergeSYCLIntelNoGlobalWorkOffsetAttr(
Decl *D, const SYCLIntelNoGlobalWorkOffsetAttr &A);
SYCLIntelLoopFuseAttr *
MergeSYCLIntelLoopFuseAttr(Decl *D, const SYCLIntelLoopFuseAttr &A);
SYCLIntelMaxReplicatesAttr *
MergeSYCLIntelMaxReplicatesAttr(Decl *D, const SYCLIntelMaxReplicatesAttr &A);
SYCLIntelForcePow2DepthAttr *
MergeSYCLIntelForcePow2DepthAttr(Decl *D,
const SYCLIntelForcePow2DepthAttr &A);
SYCLIntelInitiationIntervalAttr *MergeSYCLIntelInitiationIntervalAttr(
Decl *D, const SYCLIntelInitiationIntervalAttr &A);

SYCLIntelMaxConcurrencyAttr *
MergeSYCLIntelMaxConcurrencyAttr(Decl *D,
const SYCLIntelMaxConcurrencyAttr &A);
SYCLIntelMaxGlobalWorkDimAttr *
MergeSYCLIntelMaxGlobalWorkDimAttr(Decl *D,
const SYCLIntelMaxGlobalWorkDimAttr &A);
SYCLIntelMinWorkGroupsPerComputeUnitAttr *
MergeSYCLIntelMinWorkGroupsPerComputeUnitAttr(
Decl *D, const SYCLIntelMinWorkGroupsPerComputeUnitAttr &A);
SYCLIntelMaxWorkGroupsPerMultiprocessorAttr *
MergeSYCLIntelMaxWorkGroupsPerMultiprocessorAttr(
Decl *D, const SYCLIntelMaxWorkGroupsPerMultiprocessorAttr &A);
SYCLIntelBankWidthAttr *
MergeSYCLIntelBankWidthAttr(Decl *D, const SYCLIntelBankWidthAttr &A);
SYCLIntelNumBanksAttr *
MergeSYCLIntelNumBanksAttr(Decl *D, const SYCLIntelNumBanksAttr &A);
SYCLDeviceHasAttr *MergeSYCLDeviceHasAttr(Decl *D,
const SYCLDeviceHasAttr &A);
SYCLUsesAspectsAttr *MergeSYCLUsesAspectsAttr(Decl *D,
const SYCLUsesAspectsAttr &A);
bool CheckMaxAllowedWorkGroupSize(const Expr *RWGSXDim, const Expr *RWGSYDim,
const Expr *RWGSZDim, const Expr *MWGSXDim,
const Expr *MWGSYDim, const Expr *MWGSZDim);
SYCLIntelMaxWorkGroupSizeAttr *
MergeSYCLIntelMaxWorkGroupSizeAttr(Decl *D,
const SYCLIntelMaxWorkGroupSizeAttr &A);
void CheckSYCLAddIRAttributesFunctionAttrConflicts(Decl *D);
SYCLAddIRAttributesFunctionAttr *MergeSYCLAddIRAttributesFunctionAttr(
Decl *D, const SYCLAddIRAttributesFunctionAttr &A);
SYCLAddIRAttributesKernelParameterAttr *
MergeSYCLAddIRAttributesKernelParameterAttr(
Decl *D, const SYCLAddIRAttributesKernelParameterAttr &A);
SYCLAddIRAttributesGlobalVariableAttr *
MergeSYCLAddIRAttributesGlobalVariableAttr(
Decl *D, const SYCLAddIRAttributesGlobalVariableAttr &A);
SYCLAddIRAnnotationsMemberAttr *
MergeSYCLAddIRAnnotationsMemberAttr(Decl *D,
const SYCLAddIRAnnotationsMemberAttr &A);
SYCLReqdWorkGroupSizeAttr *
MergeSYCLReqdWorkGroupSizeAttr(Decl *D, const SYCLReqdWorkGroupSizeAttr &A);

SYCLTypeAttr *MergeSYCLTypeAttr(Decl *D, const AttributeCommonInfo &CI,
SYCLTypeAttr::SYCLType TypeName);

SYCLIntelPipeIOAttr *MergeSYCLIntelPipeIOAttr(Decl *D,
const SYCLIntelPipeIOAttr &A);

bool CheckCountedByAttr(Scope *Scope, const FieldDecl *FD);
/// Check if IdxExpr is a valid parameter index for a function or
/// instance method D. May output an error.
Expand Down
118 changes: 118 additions & 0 deletions clang/include/clang/Sema/SemaSYCL.h
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,124 @@ class SemaSYCL : public SemaBase {
ParsedType ParsedTy);

void handleKernelAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLTypeAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLDeviceAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLDeviceIndirectlyCallableAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLGlobalVarAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLRegisterNumAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelESimdVectorizeAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLDeviceHasAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLUsesAspectsAttr(Decl *D, const ParsedAttr &AL);
void handleLaunchBoundsAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLWorkGroupSizeHintAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLReqdWorkGroupSizeAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelMaxWorkGroupSizeAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelMinWorkGroupsPerComputeUnitAttr(Decl *D,
const ParsedAttr &AL);
void handleSYCLIntelMaxWorkGroupsPerMultiprocessorAttr(Decl *D,
const ParsedAttr &AL);
void handleIntelReqdSubGroupSizeAttr(Decl *D, const ParsedAttr &AL);
void handleIntelNamedSubGroupSizeAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelNumSimdWorkItemsAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelSchedulerTargetFmaxMhzAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelMaxGlobalWorkDimAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelNoGlobalWorkOffsetAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelUseStallEnableClustersAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelLoopFuseAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelInitiationIntervalAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelDoublePumpAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelSinglePumpAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelMemoryAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelRegisterAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelBankWidthAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelNumBanksAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelPrivateCopiesAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelMaxReplicatesAttr(Decl *D, const ParsedAttr &AL);
void handleIntelSimpleDualPortAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelMergeAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelBankBitsAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelForcePow2DepthAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelPipeIOAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelMaxConcurrencyAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLAddIRAttributesFunctionAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLAddIRAttributesKernelParameterAttr(Decl *D,
const ParsedAttr &AL);
void handleSYCLAddIRAttributesGlobalVariableAttr(Decl *D,
const ParsedAttr &AL);
void handleSYCLAddIRAnnotationsMemberAttr(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelMaxWorkGroupSize(Decl *D, const ParsedAttr &AL);
void handleSYCLIntelMinWorkGroupsPerComputeUnit(Decl *D,
const ParsedAttr &AL);
void handleSYCLIntelMaxWorkGroupsPerMultiprocessor(Decl *D,
const ParsedAttr &AL);

void checkSYCLAddIRAttributesFunctionAttrConflicts(Decl *D);

SYCLReqdWorkGroupSizeAttr *
mergeSYCLReqdWorkGroupSizeAttr(Decl *D, const SYCLReqdWorkGroupSizeAttr &A);
SYCLIntelNumSimdWorkItemsAttr *
mergeSYCLIntelNumSimdWorkItemsAttr(Decl *D,
const SYCLIntelNumSimdWorkItemsAttr &A);
SYCLIntelInitiationIntervalAttr *mergeSYCLIntelInitiationIntervalAttr(
Decl *D, const SYCLIntelInitiationIntervalAttr &A);
SYCLIntelSchedulerTargetFmaxMhzAttr *mergeSYCLIntelSchedulerTargetFmaxMhzAttr(
Decl *D, const SYCLIntelSchedulerTargetFmaxMhzAttr &A);
SYCLIntelMaxGlobalWorkDimAttr *
mergeSYCLIntelMaxGlobalWorkDimAttr(Decl *D,
const SYCLIntelMaxGlobalWorkDimAttr &A);
SYCLIntelMinWorkGroupsPerComputeUnitAttr *
mergeSYCLIntelMinWorkGroupsPerComputeUnitAttr(
Decl *D, const SYCLIntelMinWorkGroupsPerComputeUnitAttr &A);
SYCLIntelMaxWorkGroupsPerMultiprocessorAttr *
mergeSYCLIntelMaxWorkGroupsPerMultiprocessorAttr(
Decl *D, const SYCLIntelMaxWorkGroupsPerMultiprocessorAttr &A);
SYCLIntelLoopFuseAttr *
mergeSYCLIntelLoopFuseAttr(Decl *D, const SYCLIntelLoopFuseAttr &A);
SYCLIntelESimdVectorizeAttr *
mergeSYCLIntelESimdVectorizeAttr(Decl *D,
const SYCLIntelESimdVectorizeAttr &A);
SYCLIntelNoGlobalWorkOffsetAttr *mergeSYCLIntelNoGlobalWorkOffsetAttr(
Decl *D, const SYCLIntelNoGlobalWorkOffsetAttr &A);
SYCLIntelBankWidthAttr *
mergeSYCLIntelBankWidthAttr(Decl *D, const SYCLIntelBankWidthAttr &A);
SYCLIntelNumBanksAttr *
mergeSYCLIntelNumBanksAttr(Decl *D, const SYCLIntelNumBanksAttr &A);
SYCLIntelMaxReplicatesAttr *
mergeSYCLIntelMaxReplicatesAttr(Decl *D, const SYCLIntelMaxReplicatesAttr &A);
SYCLIntelForcePow2DepthAttr *
mergeSYCLIntelForcePow2DepthAttr(Decl *D,
const SYCLIntelForcePow2DepthAttr &A);
SYCLIntelPipeIOAttr *mergeSYCLIntelPipeIOAttr(Decl *D,
const SYCLIntelPipeIOAttr &A);
SYCLIntelMaxConcurrencyAttr *
mergeSYCLIntelMaxConcurrencyAttr(Decl *D,
const SYCLIntelMaxConcurrencyAttr &A);
SYCLAddIRAttributesFunctionAttr *mergeSYCLAddIRAttributesFunctionAttr(
Decl *D, const SYCLAddIRAttributesFunctionAttr &A);
SYCLAddIRAttributesKernelParameterAttr *
mergeSYCLAddIRAttributesKernelParameterAttr(
Decl *D, const SYCLAddIRAttributesKernelParameterAttr &A);
SYCLAddIRAttributesGlobalVariableAttr *
mergeSYCLAddIRAttributesGlobalVariableAttr(
Decl *D, const SYCLAddIRAttributesGlobalVariableAttr &A);
SYCLAddIRAnnotationsMemberAttr *
mergeSYCLAddIRAnnotationsMemberAttr(Decl *D,
const SYCLAddIRAnnotationsMemberAttr &A);
SYCLDeviceHasAttr *mergeSYCLDeviceHasAttr(Decl *D,
const SYCLDeviceHasAttr &A);
SYCLUsesAspectsAttr *mergeSYCLUsesAspectsAttr(Decl *D,
const SYCLUsesAspectsAttr &A);
SYCLTypeAttr *mergeSYCLTypeAttr(Decl *D, const AttributeCommonInfo &CI,
SYCLTypeAttr::SYCLType TypeName);
SYCLWorkGroupSizeHintAttr *
mergeSYCLWorkGroupSizeHintAttr(Decl *D, const SYCLWorkGroupSizeHintAttr &A);
SYCLIntelMaxWorkGroupSizeAttr *
mergeSYCLIntelMaxWorkGroupSizeAttr(Decl *D,
const SYCLIntelMaxWorkGroupSizeAttr &A);
IntelReqdSubGroupSizeAttr *
mergeIntelReqdSubGroupSizeAttr(Decl *D, const IntelReqdSubGroupSizeAttr &A);
IntelNamedSubGroupSizeAttr *
mergeIntelNamedSubGroupSizeAttr(Decl *D, const IntelNamedSubGroupSizeAttr &A);

static OffloadArch getOffloadArch(const TargetInfo &TI);
static bool hasDependentExpr(Expr **Exprs, const size_t ExprsSize);
Expand Down
54 changes: 27 additions & 27 deletions clang/lib/Sema/SemaDecl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2855,69 +2855,69 @@ static bool mergeDeclAttribute(Sema &S, NamedDecl *D,
else if (const auto *INA = dyn_cast<WebAssemblyImportNameAttr>(Attr))
NewAttr = S.Wasm().mergeImportNameAttr(D, *INA);
else if (const auto *A = dyn_cast<SYCLIntelLoopFuseAttr>(Attr))
NewAttr = S.MergeSYCLIntelLoopFuseAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelLoopFuseAttr(D, *A);
else if (const auto *TCBA = dyn_cast<EnforceTCBAttr>(Attr))
NewAttr = S.mergeEnforceTCBAttr(D, *TCBA);
else if (const auto *TCBLA = dyn_cast<EnforceTCBLeafAttr>(Attr))
NewAttr = S.mergeEnforceTCBLeafAttr(D, *TCBLA);
else if (const auto *A = dyn_cast<IntelReqdSubGroupSizeAttr>(Attr))
NewAttr = S.MergeIntelReqdSubGroupSizeAttr(D, *A);
NewAttr = S.SYCL().mergeIntelReqdSubGroupSizeAttr(D, *A);
else if (const auto *A = dyn_cast<IntelNamedSubGroupSizeAttr>(Attr))
NewAttr = S.MergeIntelNamedSubGroupSizeAttr(D, *A);
NewAttr = S.SYCL().mergeIntelNamedSubGroupSizeAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLIntelNumSimdWorkItemsAttr>(Attr))
NewAttr = S.MergeSYCLIntelNumSimdWorkItemsAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelNumSimdWorkItemsAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLIntelESimdVectorizeAttr>(Attr))
NewAttr = S.MergeSYCLIntelESimdVectorizeAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelESimdVectorizeAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLIntelSchedulerTargetFmaxMhzAttr>(Attr))
NewAttr = S.MergeSYCLIntelSchedulerTargetFmaxMhzAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelSchedulerTargetFmaxMhzAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLIntelNoGlobalWorkOffsetAttr>(Attr))
NewAttr = S.MergeSYCLIntelNoGlobalWorkOffsetAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelNoGlobalWorkOffsetAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLIntelMaxReplicatesAttr>(Attr))
NewAttr = S.MergeSYCLIntelMaxReplicatesAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelMaxReplicatesAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLIntelMaxConcurrencyAttr>(Attr))
NewAttr = S.MergeSYCLIntelMaxConcurrencyAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelMaxConcurrencyAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLIntelForcePow2DepthAttr>(Attr))
NewAttr = S.MergeSYCLIntelForcePow2DepthAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelForcePow2DepthAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLIntelInitiationIntervalAttr>(Attr))
NewAttr = S.MergeSYCLIntelInitiationIntervalAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelInitiationIntervalAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLWorkGroupSizeHintAttr>(Attr))
NewAttr = S.MergeSYCLWorkGroupSizeHintAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLWorkGroupSizeHintAttr(D, *A);
else if (const auto *A =
dyn_cast<SYCLIntelMinWorkGroupsPerComputeUnitAttr>(Attr))
NewAttr = S.MergeSYCLIntelMinWorkGroupsPerComputeUnitAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelMinWorkGroupsPerComputeUnitAttr(D, *A);
else if (const auto *A =
dyn_cast<SYCLIntelMaxWorkGroupsPerMultiprocessorAttr>(Attr))
NewAttr = S.MergeSYCLIntelMaxWorkGroupsPerMultiprocessorAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelMaxWorkGroupsPerMultiprocessorAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLIntelMaxGlobalWorkDimAttr>(Attr))
NewAttr = S.MergeSYCLIntelMaxGlobalWorkDimAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelMaxGlobalWorkDimAttr(D, *A);
else if (const auto *BTFA = dyn_cast<BTFDeclTagAttr>(Attr))
NewAttr = S.mergeBTFDeclTagAttr(D, *BTFA);
else if (const auto *A = dyn_cast<SYCLIntelBankWidthAttr>(Attr))
NewAttr = S.MergeSYCLIntelBankWidthAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelBankWidthAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLIntelNumBanksAttr>(Attr))
NewAttr = S.MergeSYCLIntelNumBanksAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelNumBanksAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLDeviceHasAttr>(Attr))
NewAttr = S.MergeSYCLDeviceHasAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLDeviceHasAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLUsesAspectsAttr>(Attr))
NewAttr = S.MergeSYCLUsesAspectsAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLUsesAspectsAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLTypeAttr>(Attr))
NewAttr = S.MergeSYCLTypeAttr(D, *A, A->getType());
NewAttr = S.SYCL().mergeSYCLTypeAttr(D, *A, A->getType());
else if (const auto *A = dyn_cast<SYCLIntelPipeIOAttr>(Attr))
NewAttr = S.MergeSYCLIntelPipeIOAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelPipeIOAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLIntelMaxWorkGroupSizeAttr>(Attr))
NewAttr = S.MergeSYCLIntelMaxWorkGroupSizeAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLIntelMaxWorkGroupSizeAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLAddIRAttributesFunctionAttr>(Attr))
NewAttr = S.MergeSYCLAddIRAttributesFunctionAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLAddIRAttributesFunctionAttr(D, *A);
else if (const auto *A =
dyn_cast<SYCLAddIRAttributesKernelParameterAttr>(Attr))
NewAttr = S.MergeSYCLAddIRAttributesKernelParameterAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLAddIRAttributesKernelParameterAttr(D, *A);
else if (const auto *A =
dyn_cast<SYCLAddIRAttributesGlobalVariableAttr>(Attr))
NewAttr = S.MergeSYCLAddIRAttributesGlobalVariableAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLAddIRAttributesGlobalVariableAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLAddIRAnnotationsMemberAttr>(Attr))
NewAttr = S.MergeSYCLAddIRAnnotationsMemberAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLAddIRAnnotationsMemberAttr(D, *A);
else if (const auto *A = dyn_cast<SYCLReqdWorkGroupSizeAttr>(Attr))
NewAttr = S.MergeSYCLReqdWorkGroupSizeAttr(D, *A);
NewAttr = S.SYCL().mergeSYCLReqdWorkGroupSizeAttr(D, *A);
else if (const auto *NT = dyn_cast<HLSLNumThreadsAttr>(Attr))
NewAttr = S.HLSL().mergeNumThreadsAttr(D, *NT, NT->getX(), NT->getY(),
NT->getZ());
Expand Down
Loading