Skip to content

Commit 03d934e

Browse files
authored
[NFC][SYCL][FPGA] Code reduction for FPGA memory attributes (#1867)
A little refactoring, addressed to a comment: #1807 (comment) Signed-off-by: Dmitry Sidorov <[email protected]>
1 parent 79aa1fc commit 03d934e

File tree

1 file changed

+22
-59
lines changed

1 file changed

+22
-59
lines changed

clang/lib/Sema/SemaTemplateInstantiateDecl.cpp

Lines changed: 22 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -498,48 +498,21 @@ static void instantiateDependentAMDGPUWavesPerEUAttr(
498498
S.addAMDGPUWavesPerEUAttr(New, Attr, MinExpr, MaxExpr);
499499
}
500500

501-
static void instantiateIntelFPGABankWidthAttr(
501+
template <typename AttrName>
502+
static void instantiateIntelFPGAMemoryAttr(
502503
Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
503-
const IntelFPGABankWidthAttr *Attr, Decl *New) {
504+
const AttrName *Attr, Decl *New) {
504505
EnterExpressionEvaluationContext Unevaluated(
505506
S, Sema::ExpressionEvaluationContext::ConstantEvaluated);
506507
ExprResult Result = S.SubstExpr(Attr->getValue(), TemplateArgs);
507-
if (!Result.isInvalid())
508-
return S.AddOneConstantPowerTwoValueAttr<IntelFPGABankWidthAttr>(
509-
New, *Attr, Result.getAs<Expr>());
510-
}
511-
512-
static void instantiateIntelFPGANumBanksAttr(
513-
Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
514-
const IntelFPGANumBanksAttr *Attr, Decl *New) {
515-
EnterExpressionEvaluationContext Unevaluated(
516-
S, Sema::ExpressionEvaluationContext::ConstantEvaluated);
517-
ExprResult Result = S.SubstExpr(Attr->getValue(), TemplateArgs);
518-
if (!Result.isInvalid())
519-
return S.AddOneConstantPowerTwoValueAttr<IntelFPGANumBanksAttr>(
520-
New, *Attr, Result.getAs<Expr>());
521-
}
522-
523-
static void instantiateIntelFPGAPrivateCopiesAttr(
524-
Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
525-
const IntelFPGAPrivateCopiesAttr *Attr, Decl *New) {
526-
EnterExpressionEvaluationContext Unevaluated(
527-
S, Sema::ExpressionEvaluationContext::ConstantEvaluated);
528-
ExprResult Result = S.SubstExpr(Attr->getValue(), TemplateArgs);
529-
if (!Result.isInvalid())
530-
return S.AddOneConstantValueAttr<IntelFPGAPrivateCopiesAttr>(
531-
New, *Attr, Result.getAs<Expr>());
532-
}
533-
534-
static void instantiateIntelFPGAMaxReplicatesAttr(
535-
Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
536-
const IntelFPGAMaxReplicatesAttr *Attr, Decl *New) {
537-
EnterExpressionEvaluationContext Unevaluated(
538-
S, Sema::ExpressionEvaluationContext::ConstantEvaluated);
539-
ExprResult Result = S.SubstExpr(Attr->getValue(), TemplateArgs);
540-
if (!Result.isInvalid())
541-
return S.AddOneConstantValueAttr<IntelFPGAMaxReplicatesAttr>(
542-
New, *Attr, Result.getAs<Expr>());
508+
if (!Result.isInvalid()) {
509+
if (std::is_same<AttrName, IntelFPGABankWidthAttr>::value ||
510+
std::is_same<AttrName, IntelFPGANumBanksAttr>::value)
511+
return S.AddOneConstantPowerTwoValueAttr<AttrName>(New, *Attr,
512+
Result.getAs<Expr>());
513+
return S.AddOneConstantValueAttr<AttrName>(New, *Attr,
514+
Result.getAs<Expr>());
515+
}
543516
}
544517

545518
static void instantiateIntelFPGABankBitsAttr(
@@ -557,17 +530,6 @@ static void instantiateIntelFPGABankBitsAttr(
557530
S.AddIntelFPGABankBitsAttr(New, *Attr, Args.data(), Args.size());
558531
}
559532

560-
static void instantiateIntelFPGAForcePow2DepthAttr(
561-
Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
562-
const IntelFPGAForcePow2DepthAttr *Attr, Decl *New) {
563-
EnterExpressionEvaluationContext Unevaluated(
564-
S, Sema::ExpressionEvaluationContext::ConstantEvaluated);
565-
ExprResult Result = S.SubstExpr(Attr->getValue(), TemplateArgs);
566-
if (!Result.isInvalid())
567-
S.AddOneConstantValueAttr<IntelFPGAForcePow2DepthAttr>(
568-
New, *Attr, Result.getAs<Expr>());
569-
}
570-
571533
static void instantiateSYCLIntelPipeIOAttr(
572534
Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
573535
const SYCLIntelPipeIOAttr *Attr, Decl *New) {
@@ -700,23 +662,24 @@ void Sema::InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
700662

701663
if (const auto *IntelFPGABankWidth =
702664
dyn_cast<IntelFPGABankWidthAttr>(TmplAttr)) {
703-
instantiateIntelFPGABankWidthAttr(*this, TemplateArgs, IntelFPGABankWidth,
704-
New);
665+
instantiateIntelFPGAMemoryAttr<IntelFPGABankWidthAttr>(
666+
*this, TemplateArgs, IntelFPGABankWidth, New);
705667
}
668+
706669
if (const auto *IntelFPGANumBanks =
707670
dyn_cast<IntelFPGANumBanksAttr>(TmplAttr)) {
708-
instantiateIntelFPGANumBanksAttr(*this, TemplateArgs, IntelFPGANumBanks,
709-
New);
671+
instantiateIntelFPGAMemoryAttr<IntelFPGANumBanksAttr>(
672+
*this, TemplateArgs, IntelFPGANumBanks, New);
710673
}
711674
if (const auto *IntelFPGAPrivateCopies =
712675
dyn_cast<IntelFPGAPrivateCopiesAttr>(TmplAttr)) {
713-
instantiateIntelFPGAPrivateCopiesAttr(*this, TemplateArgs,
714-
IntelFPGAPrivateCopies, New);
676+
instantiateIntelFPGAMemoryAttr<IntelFPGAPrivateCopiesAttr>(
677+
*this, TemplateArgs, IntelFPGAPrivateCopies, New);
715678
}
716679
if (const auto *IntelFPGAMaxReplicates =
717680
dyn_cast<IntelFPGAMaxReplicatesAttr>(TmplAttr)) {
718-
instantiateIntelFPGAMaxReplicatesAttr(*this, TemplateArgs,
719-
IntelFPGAMaxReplicates, New);
681+
instantiateIntelFPGAMemoryAttr<IntelFPGAMaxReplicatesAttr>(
682+
*this, TemplateArgs, IntelFPGAMaxReplicates, New);
720683
}
721684
if (const auto *IntelFPGABankBits =
722685
dyn_cast<IntelFPGABankBitsAttr>(TmplAttr)) {
@@ -725,8 +688,8 @@ void Sema::InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
725688
}
726689
if (const auto *IntelFPGAForcePow2Depth =
727690
dyn_cast<IntelFPGAForcePow2DepthAttr>(TmplAttr)) {
728-
instantiateIntelFPGAForcePow2DepthAttr(*this, TemplateArgs,
729-
IntelFPGAForcePow2Depth, New);
691+
instantiateIntelFPGAMemoryAttr<IntelFPGAForcePow2DepthAttr>(
692+
*this, TemplateArgs, IntelFPGAForcePow2Depth, New);
730693
}
731694
if (const auto *SYCLIntelPipeIO = dyn_cast<SYCLIntelPipeIOAttr>(TmplAttr)) {
732695
instantiateSYCLIntelPipeIOAttr(*this, TemplateArgs, SYCLIntelPipeIO, New);

0 commit comments

Comments
 (0)