@@ -498,48 +498,21 @@ static void instantiateDependentAMDGPUWavesPerEUAttr(
498
498
S.addAMDGPUWavesPerEUAttr (New, Attr, MinExpr, MaxExpr);
499
499
}
500
500
501
- static void instantiateIntelFPGABankWidthAttr (
501
+ template <typename AttrName>
502
+ static void instantiateIntelFPGAMemoryAttr (
502
503
Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
503
- const IntelFPGABankWidthAttr *Attr, Decl *New) {
504
+ const AttrName *Attr, Decl *New) {
504
505
EnterExpressionEvaluationContext Unevaluated (
505
506
S, Sema::ExpressionEvaluationContext::ConstantEvaluated);
506
507
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
+ }
543
516
}
544
517
545
518
static void instantiateIntelFPGABankBitsAttr (
@@ -557,17 +530,6 @@ static void instantiateIntelFPGABankBitsAttr(
557
530
S.AddIntelFPGABankBitsAttr (New, *Attr, Args.data (), Args.size ());
558
531
}
559
532
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
-
571
533
static void instantiateSYCLIntelPipeIOAttr (
572
534
Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
573
535
const SYCLIntelPipeIOAttr *Attr, Decl *New) {
@@ -700,23 +662,24 @@ void Sema::InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
700
662
701
663
if (const auto *IntelFPGABankWidth =
702
664
dyn_cast<IntelFPGABankWidthAttr>(TmplAttr)) {
703
- instantiateIntelFPGABankWidthAttr (* this , TemplateArgs, IntelFPGABankWidth,
704
- New);
665
+ instantiateIntelFPGAMemoryAttr<IntelFPGABankWidthAttr>(
666
+ * this , TemplateArgs, IntelFPGABankWidth, New);
705
667
}
668
+
706
669
if (const auto *IntelFPGANumBanks =
707
670
dyn_cast<IntelFPGANumBanksAttr>(TmplAttr)) {
708
- instantiateIntelFPGANumBanksAttr (* this , TemplateArgs, IntelFPGANumBanks,
709
- New);
671
+ instantiateIntelFPGAMemoryAttr<IntelFPGANumBanksAttr>(
672
+ * this , TemplateArgs, IntelFPGANumBanks, New);
710
673
}
711
674
if (const auto *IntelFPGAPrivateCopies =
712
675
dyn_cast<IntelFPGAPrivateCopiesAttr>(TmplAttr)) {
713
- instantiateIntelFPGAPrivateCopiesAttr (* this , TemplateArgs,
714
- IntelFPGAPrivateCopies, New);
676
+ instantiateIntelFPGAMemoryAttr<IntelFPGAPrivateCopiesAttr>(
677
+ * this , TemplateArgs, IntelFPGAPrivateCopies, New);
715
678
}
716
679
if (const auto *IntelFPGAMaxReplicates =
717
680
dyn_cast<IntelFPGAMaxReplicatesAttr>(TmplAttr)) {
718
- instantiateIntelFPGAMaxReplicatesAttr (* this , TemplateArgs,
719
- IntelFPGAMaxReplicates, New);
681
+ instantiateIntelFPGAMemoryAttr<IntelFPGAMaxReplicatesAttr>(
682
+ * this , TemplateArgs, IntelFPGAMaxReplicates, New);
720
683
}
721
684
if (const auto *IntelFPGABankBits =
722
685
dyn_cast<IntelFPGABankBitsAttr>(TmplAttr)) {
@@ -725,8 +688,8 @@ void Sema::InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
725
688
}
726
689
if (const auto *IntelFPGAForcePow2Depth =
727
690
dyn_cast<IntelFPGAForcePow2DepthAttr>(TmplAttr)) {
728
- instantiateIntelFPGAForcePow2DepthAttr (* this , TemplateArgs,
729
- IntelFPGAForcePow2Depth, New);
691
+ instantiateIntelFPGAMemoryAttr<IntelFPGAForcePow2DepthAttr>(
692
+ * this , TemplateArgs, IntelFPGAForcePow2Depth, New);
730
693
}
731
694
if (const auto *SYCLIntelPipeIO = dyn_cast<SYCLIntelPipeIOAttr>(TmplAttr)) {
732
695
instantiateSYCLIntelPipeIOAttr (*this , TemplateArgs, SYCLIntelPipeIO, New);
0 commit comments