https://github.com/amitamd7 created https://github.com/llvm/llvm-project/pull/150580
Added support for detecting OMP Target Directive and OMP From Clause in Clang Unit Test Framework >From 846d871783d572667cb8bdb954961f274e04702c Mon Sep 17 00:00:00 2001 From: amtiwari <amtiw...@amd.com> Date: Tue, 17 Jun 2025 07:56:35 -0400 Subject: [PATCH 1/2] Add strided_update.c to tracking --- offload/test/offloading/strided_update.c | 50 ++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 offload/test/offloading/strided_update.c diff --git a/offload/test/offloading/strided_update.c b/offload/test/offloading/strided_update.c new file mode 100644 index 0000000000000..271a00de5f7a1 --- /dev/null +++ b/offload/test/offloading/strided_update.c @@ -0,0 +1,50 @@ +// Checks that "update from" clause in OpenMP is supported when the elements are updated in a non-contiguous manner. +// RUN: %libomptarget-compile-run-and-check-generic +#include <omp.h> +#include <stdio.h> + +int main() { + int len = 8; + double data[len]; + #pragma omp target map(tofrom: len, data[0:len]) + { + for (int i = 0; i < len; i++) { + data[i] = i; + } + } + // initial values + printf("original host array values:\n"); + for (int i = 0; i < len; i++) + printf("%f\n", data[i]); + printf("\n"); + + #pragma omp target data map(to: len, data[0:len]) + { + #pragma omp target + for (int i = 0; i < len; i++) { + data[i] += i ; + } + + #pragma omp target update from(data[0:8:2]) + } + // from results + // CHECK: 0.000000 + // CHECK: 1.000000 + // CHECK: 4.000000 + // CHECK: 3.000000 + // CHECK: 8.000000 + // CHECK: 5.000000 + // CHECK: 12.000000 + // CHECK: 7.000000 + // CHECK-NOT: 2.000000 + // CHECK-NOT: 6.000000 + // CHECK-NOT: 10.000000 + // CHECK-NOT: 14.000000 + + printf("from target array results:\n"); + for (int i = 0; i < len; i++) + printf("%f\n", data[i]); + printf("\n"); + + return 0; +} >From 85653b4ee0b9362d52eb9fb0bbe1ce48c022c775 Mon Sep 17 00:00:00 2001 From: amtiwari <amtiw...@amd.com> Date: Fri, 25 Jul 2025 02:45:34 -0400 Subject: [PATCH 2/2] support_for_target_directive_clang_unittests --- clang/include/clang/ASTMatchers/ASTMatchers.h | 27 +++++++++++++++++++ clang/lib/ASTMatchers/ASTMatchersInternal.cpp | 4 +++ clang/lib/ASTMatchers/Dynamic/Registry.cpp | 2 ++ 3 files changed, 33 insertions(+) diff --git a/clang/include/clang/ASTMatchers/ASTMatchers.h b/clang/include/clang/ASTMatchers/ASTMatchers.h index 08c898f7758ec..5ca075528add5 100644 --- a/clang/include/clang/ASTMatchers/ASTMatchers.h +++ b/clang/include/clang/ASTMatchers/ASTMatchers.h @@ -8735,6 +8735,21 @@ AST_MATCHER_P(OMPExecutableDirective, hasAnyClause, Builder) != Clauses.end(); } +/// Matches any ``#pragma omp target update`` executable directive. +/// +/// Given +/// +/// \code +/// #pragma omp target update from(a) +/// #pragma omp target update to(b) +/// \endcode +/// +/// ``ompTargetUpdateDirective()`` matches both ``omp target update from(a)`` +/// and ``omp target update to(b)``. +extern const internal::VariadicDynCastAllOfMatcher<Stmt, + OMPTargetUpdateDirective> + ompTargetUpdateDirective; + /// Matches OpenMP ``default`` clause. /// /// Given @@ -8848,6 +8863,18 @@ AST_MATCHER_P(OMPExecutableDirective, isAllowedToContainClauseKind, Finder->getASTContext().getLangOpts().OpenMP); } +/// Matches OpenMP ``from`` clause. +/// +/// Given +/// +/// \code +/// #pragma omp target update from(a) +/// \endcode +/// +/// ``ompFromClause()`` matches ``from(a)``. +extern const internal::VariadicDynCastAllOfMatcher<OMPClause, OMPFromClause> + ompFromClause; + //----------------------------------------------------------------------------// // End OpenMP handling. //----------------------------------------------------------------------------// diff --git a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp index 80dc888811657..7580cee3d8aed 100644 --- a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp +++ b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp @@ -1125,8 +1125,12 @@ AST_TYPELOC_TRAVERSE_MATCHER_DEF( const internal::VariadicDynCastAllOfMatcher<Stmt, OMPExecutableDirective> ompExecutableDirective; +const internal::VariadicDynCastAllOfMatcher<Stmt, OMPTargetUpdateDirective> + ompTargetUpdateDirective; const internal::VariadicDynCastAllOfMatcher<OMPClause, OMPDefaultClause> ompDefaultClause; +const internal::VariadicDynCastAllOfMatcher<OMPClause, OMPFromClause> + ompFromClause; const internal::VariadicDynCastAllOfMatcher<Decl, CXXDeductionGuideDecl> cxxDeductionGuideDecl; diff --git a/clang/lib/ASTMatchers/Dynamic/Registry.cpp b/clang/lib/ASTMatchers/Dynamic/Registry.cpp index 562df715e08ae..e74fae3c50029 100644 --- a/clang/lib/ASTMatchers/Dynamic/Registry.cpp +++ b/clang/lib/ASTMatchers/Dynamic/Registry.cpp @@ -531,7 +531,9 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(ofClass); REGISTER_MATCHER(ofKind); REGISTER_MATCHER(ompDefaultClause); + REGISTER_MATCHER(ompFromClause); REGISTER_MATCHER(ompExecutableDirective); + REGISTER_MATCHER(ompTargetUpdateDirective); REGISTER_MATCHER(on); REGISTER_MATCHER(onImplicitObjectArgument); REGISTER_MATCHER(opaqueValueExpr); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits