On Tue, Mar 18, 2025 at 11:27:08AM +0530, Tejas Belagod wrote:
> The target clause in OpenMP is used to offload loop kernels to accelarator
> peripeherals. target's 'map' clause is used to move data from and to the
> accelarator. When the data is SVE type, it may not be suitable because of
> various reasons i.e. the two SVE targets may not agree on vector size or
> some targets don't support variable vector size. This makes SVE unsuitable
> for use in OMP's 'map' clause. This patch diagnoses all such cases and issues
> an error where SVE types are not suitable.
>
> Co-authored-by: Andrea Corallo <[email protected]>
>
> gcc/ChangeLog:
>
> * target.h (type_context_kind): Add new context kinds for target
> clauses.
> (omp_type_context): Query if the context is of OMP kind.
> * config/aarch64/aarch64-sve-builtins.cc (verify_type_context): Diagnose
> SVE types for a given OpenMP context.
> (omp_type_context): New.
> * gimplify.cc (omp_notice_variable): Diagnose implicitly-mapped SVE
> objects in OpenMP regions.
> (gimplify_scan_omp_clauses): Diagnose SVE types for various target
> clauses.
> @@ -5234,6 +5238,37 @@ verify_type_context (location_t loc, type_context_kind
> context,
> if (!silent_p)
> error_at (loc, "capture by copy of SVE type %qT", type);
> return false;
> +
> + case TCTX_OMP_MAP:
> + if (!silent_p)
> + error_at (loc, "SVE type %qT not allowed in map clause", type);
%<map%>
> + return false;
> +
> + case TCTX_OMP_MAP_IMP_REF:
> + if (!silent_p)
> + error ("cannot reference %qT object types in target region", type);
%<target%>
> + return false;
> +
> + case TCTX_OMP_PRIVATE:
> + if (!silent_p)
> + error_at (loc, "SVE type %qT not allowed in"
> + " target private clause", type);
%<target%> %<private%>
> + return false;
> +
> + case TCTX_OMP_FIRSTPRIVATE:
> + if (!silent_p)
> + error_at (loc, "SVE type %qT not allowed in"
> + " target firstprivate clause", type);
%<target%> %<firstprivate%>
> + return false;
> +
> + case TCTX_OMP_DEVICE_ADDR:
> + if (!silent_p)
> + error_at (loc, "SVE type %qT not allowed in"
> + " target device clauses", type);
%<target>
> + return false;
> +
> + default:
> + break;
Ok with these nits fixed.
Jakub