Roger Ferrer =?utf-8?q?Ibáñez?= <rofir...@gmail.com>,Roger Ferrer Ibanez <roger.fer...@bsc.es> Message-ID: In-Reply-To: <llvm.org/llvm/llvm-project/pull/139...@github.com>
================ @@ -14206,10 +14211,48 @@ StmtResult SemaOpenMP::ActOnOpenMPTargetTeamsDistributeSimdDirective( getASTContext(), StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); } +/// Overloaded base case function +template <typename T, typename F> static bool tryHandleAs(T *, F &&) { + return false; +} + +/// Tries to recursively cast `Type` to one of the given types and invokes +/// `Func` if successful. +/// +/// \tparam Class The first type to check. +/// \tparam Rest The remaining types to check. +/// \tparam T The base type of `Type`. +/// \tparam F The callable type for the function to invoke upon a successful +/// cast. +/// \param Type The object to be checked. +/// \param Func The function to invoke if `Type` matches `Class`. +/// \return `true` if `Type` matched any type and `Func` was called, otherwise +/// `false`. +template <typename Class, typename... Rest, typename T, typename F> +static bool tryHandleAs(T *Type, F &&Func) { + if (Class *C = dyn_cast<Class>(Type)) { + Func(C); + return true; + } + return tryHandleAs<Rest...>(Type, std::forward<F>(Func)); +} + +/// Updates OriginalInits by checking Transform against loop transformation +/// directives and appending their pre-inits if a match is found. +static void updatePreInits(OMPLoopBasedDirective *Transform, + SmallVectorImpl<Stmt *> &PreInits) { + if (!tryHandleAs<OMPTileDirective, OMPUnrollDirective, OMPReverseDirective, + OMPInterchangeDirective, OMPFuseDirective>( + Transform, [&PreInits](auto *Dir) { + appendFlattenedStmtList(PreInits, Dir->getPreInits()); + })) + llvm_unreachable("Unhandled loop transformation"); +} + ---------------- alexey-bataev wrote: Better to add and start using in a separate patch https://github.com/llvm/llvm-project/pull/139293 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits