From 8b3a43963f37b0a89d68707b05377799760baa3d Mon Sep 17 00:00:00 2001 From: Dmitry Sidorov Date: Mon, 8 Jun 2020 15:16:58 +0300 Subject: [PATCH 1/2] [NFC][SYCL][FPGA] Code reduction for FPGA memory attributes A little refactoring, addressed to a comment: https://github.com/intel/llvm/pull/1807#discussion_r434400938 Signed-off-by: Dmitry Sidorov --- .../lib/Sema/SemaTemplateInstantiateDecl.cpp | 79 +++++-------------- 1 file changed, 21 insertions(+), 58 deletions(-) diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index 7d14408ab3b46..c86a12c4def6a 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -498,48 +498,21 @@ static void instantiateDependentAMDGPUWavesPerEUAttr( S.addAMDGPUWavesPerEUAttr(New, Attr, MinExpr, MaxExpr); } -static void instantiateIntelFPGABankWidthAttr( +template +static void instantiateIntelFPGAMemoryAttr( Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, - const IntelFPGABankWidthAttr *Attr, Decl *New) { + const AttrName *Attr, Decl *New) { EnterExpressionEvaluationContext Unevaluated( S, Sema::ExpressionEvaluationContext::ConstantEvaluated); ExprResult Result = S.SubstExpr(Attr->getValue(), TemplateArgs); - if (!Result.isInvalid()) - return S.AddOneConstantPowerTwoValueAttr( - New, *Attr, Result.getAs()); -} - -static void instantiateIntelFPGANumBanksAttr( - Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, - const IntelFPGANumBanksAttr *Attr, Decl *New) { - EnterExpressionEvaluationContext Unevaluated( - S, Sema::ExpressionEvaluationContext::ConstantEvaluated); - ExprResult Result = S.SubstExpr(Attr->getValue(), TemplateArgs); - if (!Result.isInvalid()) - return S.AddOneConstantPowerTwoValueAttr( - New, *Attr, Result.getAs()); -} - -static void instantiateIntelFPGAPrivateCopiesAttr( - Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, - const IntelFPGAPrivateCopiesAttr *Attr, Decl *New) { - EnterExpressionEvaluationContext Unevaluated( - S, Sema::ExpressionEvaluationContext::ConstantEvaluated); - ExprResult Result = S.SubstExpr(Attr->getValue(), TemplateArgs); - if (!Result.isInvalid()) - return S.AddOneConstantValueAttr( - New, *Attr, Result.getAs()); -} - -static void instantiateIntelFPGAMaxReplicatesAttr( - Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, - const IntelFPGAMaxReplicatesAttr *Attr, Decl *New) { - EnterExpressionEvaluationContext Unevaluated( - S, Sema::ExpressionEvaluationContext::ConstantEvaluated); - ExprResult Result = S.SubstExpr(Attr->getValue(), TemplateArgs); - if (!Result.isInvalid()) - return S.AddOneConstantValueAttr( + if (!Result.isInvalid()) { + if (std::is_same::value || + std::is_same::value) + return S.AddOneConstantPowerTwoValueAttr( + New, *Attr, Result.getAs()); + return S.AddOneConstantValueAttr( New, *Attr, Result.getAs()); + } } static void instantiateIntelFPGABankBitsAttr( @@ -557,17 +530,6 @@ static void instantiateIntelFPGABankBitsAttr( S.AddIntelFPGABankBitsAttr(New, *Attr, Args.data(), Args.size()); } -static void instantiateIntelFPGAForcePow2DepthAttr( - Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, - const IntelFPGAForcePow2DepthAttr *Attr, Decl *New) { - EnterExpressionEvaluationContext Unevaluated( - S, Sema::ExpressionEvaluationContext::ConstantEvaluated); - ExprResult Result = S.SubstExpr(Attr->getValue(), TemplateArgs); - if (!Result.isInvalid()) - S.AddOneConstantValueAttr( - New, *Attr, Result.getAs()); -} - static void instantiateSYCLIntelPipeIOAttr( Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const SYCLIntelPipeIOAttr *Attr, Decl *New) { @@ -700,23 +662,24 @@ void Sema::InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs, if (const auto *IntelFPGABankWidth = dyn_cast(TmplAttr)) { - instantiateIntelFPGABankWidthAttr(*this, TemplateArgs, IntelFPGABankWidth, - New); + instantiateIntelFPGAMemoryAttr( + *this, TemplateArgs, IntelFPGABankWidth, New); } + if (const auto *IntelFPGANumBanks = dyn_cast(TmplAttr)) { - instantiateIntelFPGANumBanksAttr(*this, TemplateArgs, IntelFPGANumBanks, - New); + instantiateIntelFPGAMemoryAttr( + *this, TemplateArgs, IntelFPGANumBanks, New); } if (const auto *IntelFPGAPrivateCopies = dyn_cast(TmplAttr)) { - instantiateIntelFPGAPrivateCopiesAttr(*this, TemplateArgs, - IntelFPGAPrivateCopies, New); + instantiateIntelFPGAMemoryAttr( + *this, TemplateArgs, IntelFPGAPrivateCopies, New); } if (const auto *IntelFPGAMaxReplicates = dyn_cast(TmplAttr)) { - instantiateIntelFPGAMaxReplicatesAttr(*this, TemplateArgs, - IntelFPGAMaxReplicates, New); + instantiateIntelFPGAMemoryAttr( + *this, TemplateArgs, IntelFPGAMaxReplicates, New); } if (const auto *IntelFPGABankBits = dyn_cast(TmplAttr)) { @@ -725,8 +688,8 @@ void Sema::InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs, } if (const auto *IntelFPGAForcePow2Depth = dyn_cast(TmplAttr)) { - instantiateIntelFPGAForcePow2DepthAttr(*this, TemplateArgs, - IntelFPGAForcePow2Depth, New); + instantiateIntelFPGAMemoryAttr( + *this, TemplateArgs, IntelFPGAForcePow2Depth, New); } if (const auto *SYCLIntelPipeIO = dyn_cast(TmplAttr)) { instantiateSYCLIntelPipeIOAttr(*this, TemplateArgs, SYCLIntelPipeIO, New); From 0e35ba087191d85da956a4a0a98a97bc1fcef80a Mon Sep 17 00:00:00 2001 From: Dmitry Sidorov Date: Wed, 10 Jun 2020 19:07:00 +0300 Subject: [PATCH 2/2] Apply clang-format Signed-off-by: Dmitry Sidorov --- clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index c86a12c4def6a..dc8e5f868d2da 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -508,10 +508,10 @@ static void instantiateIntelFPGAMemoryAttr( if (!Result.isInvalid()) { if (std::is_same::value || std::is_same::value) - return S.AddOneConstantPowerTwoValueAttr( - New, *Attr, Result.getAs()); - return S.AddOneConstantValueAttr( - New, *Attr, Result.getAs()); + return S.AddOneConstantPowerTwoValueAttr(New, *Attr, + Result.getAs()); + return S.AddOneConstantValueAttr(New, *Attr, + Result.getAs()); } }