+2022-04-20 Andrew Stubbs <ams@codesourcery.com>
+
+ * omp-low.c: Do USM transformations for "unified_address".
+
2022-04-02 Andrew Stubbs <ams@codesourcery.com>
* omp-low.c (usm_transform): Transform omp_target_alloc and
+2022-04-20 Andrew Stubbs <ams@codesourcery.com>
+
+ * c-parser.c (c_parser_omp_requires): Check requires unified_address
+ for conflict with -foffload-memory=shared.
+
2022-03-10 Andrew Stubbs <ams@codesourcery.com>
Backport of the patch posted at
enum omp_requires this_req = (enum omp_requires) 0;
if (!strcmp (p, "unified_address"))
- this_req = OMP_REQUIRES_UNIFIED_ADDRESS;
+ {
+ this_req = OMP_REQUIRES_UNIFIED_ADDRESS;
+
+ if (flag_offload_memory != OFFLOAD_MEMORY_UNIFIED
+ && flag_offload_memory != OFFLOAD_MEMORY_NONE)
+ error_at (cloc,
+ "unified_address is incompatible with the "
+ "selected -foffload-memory option");
+ flag_offload_memory = OFFLOAD_MEMORY_UNIFIED;
+ }
else if (!strcmp (p, "unified_shared_memory"))
- {
- this_req = OMP_REQUIRES_UNIFIED_SHARED_MEMORY;
-
- if (flag_offload_memory != OFFLOAD_MEMORY_UNIFIED
- && flag_offload_memory != OFFLOAD_MEMORY_NONE)
- error_at (cloc,
- "unified_shared_memory is incompatible with the "
- "selected -foffload-memory option");
- flag_offload_memory = OFFLOAD_MEMORY_UNIFIED;
- }
+ {
+ this_req = OMP_REQUIRES_UNIFIED_SHARED_MEMORY;
+
+ if (flag_offload_memory != OFFLOAD_MEMORY_UNIFIED
+ && flag_offload_memory != OFFLOAD_MEMORY_NONE)
+ error_at (cloc,
+ "unified_shared_memory is incompatible with the "
+ "selected -foffload-memory option");
+ flag_offload_memory = OFFLOAD_MEMORY_UNIFIED;
+ }
else if (!strcmp (p, "dynamic_allocators"))
this_req = OMP_REQUIRES_DYNAMIC_ALLOCATORS;
else if (!strcmp (p, "reverse_offload"))
+2022-04-20 Andrew Stubbs <ams@codesourcery.com>
+
+ * parser.c (cp_parser_omp_requires): Check requires unified_address
+ for conflict with -foffload-memory=shared.
+
2022-03-10 Andrew Stubbs <ams@codesourcery.com>
Backport of the patch posted at
enum omp_requires this_req = (enum omp_requires) 0;
if (!strcmp (p, "unified_address"))
- this_req = OMP_REQUIRES_UNIFIED_ADDRESS;
+ {
+ this_req = OMP_REQUIRES_UNIFIED_ADDRESS;
+
+ if (flag_offload_memory != OFFLOAD_MEMORY_UNIFIED
+ && flag_offload_memory != OFFLOAD_MEMORY_NONE)
+ error_at (cloc,
+ "unified_address is incompatible with the "
+ "selected -foffload-memory option");
+ flag_offload_memory = OFFLOAD_MEMORY_UNIFIED;
+ }
else if (!strcmp (p, "unified_shared_memory"))
- {
- this_req = OMP_REQUIRES_UNIFIED_SHARED_MEMORY;
-
- if (flag_offload_memory != OFFLOAD_MEMORY_UNIFIED
- && flag_offload_memory != OFFLOAD_MEMORY_NONE)
- error_at (cloc,
- "unified_shared_memory is incompatible with the "
- "selected -foffload-memory option");
- flag_offload_memory = OFFLOAD_MEMORY_UNIFIED;
- }
+ {
+ this_req = OMP_REQUIRES_UNIFIED_SHARED_MEMORY;
+
+ if (flag_offload_memory != OFFLOAD_MEMORY_UNIFIED
+ && flag_offload_memory != OFFLOAD_MEMORY_NONE)
+ error_at (cloc,
+ "unified_shared_memory is incompatible with the "
+ "selected -foffload-memory option");
+ flag_offload_memory = OFFLOAD_MEMORY_UNIFIED;
+ }
else if (!strcmp (p, "dynamic_allocators"))
this_req = OMP_REQUIRES_DYNAMIC_ALLOCATORS;
else if (!strcmp (p, "reverse_offload"))
+2022-04-20 Andrew Stubbs <ams@codesourcery.com>
+
+ * openmp.c (gfc_match_omp_requires): Check requires unified_address
+ for conflict with -foffload-memory=shared.
+
2022-03-10 Andrew Stubbs <ams@codesourcery.com>
Backport of the patch posted at
requires_clause = OMP_REQ_UNIFIED_ADDRESS;
if (requires_clauses & OMP_REQ_UNIFIED_ADDRESS)
goto duplicate_clause;
+
+ if (flag_offload_memory != OFFLOAD_MEMORY_UNIFIED
+ && flag_offload_memory != OFFLOAD_MEMORY_NONE)
+ gfc_error_now ("unified_address at %C is incompatible with "
+ "the selected -foffload-memory option");
+ flag_offload_memory = OFFLOAD_MEMORY_UNIFIED;
}
else if (gfc_match (clauses[2]) == MATCH_YES)
{
{
return (flag_openmp || flag_openmp_simd)
&& (flag_offload_memory == OFFLOAD_MEMORY_UNIFIED
- || omp_requires_mask & OMP_REQUIRES_UNIFIED_SHARED_MEMORY);
+ || omp_requires_mask & OMP_REQUIRES_UNIFIED_SHARED_MEMORY
+ || omp_requires_mask & OMP_REQUIRES_UNIFIED_ADDRESS);
}
virtual unsigned int execute (function *)
{
+2022-04-20 Andrew Stubbs <ams@codesourcery.com>
+
+ * c-c++-common/gomp/usm-4.c: New test.
+ * gfortran.dg/gomp/usm-4.f90: New test.
+
2022-04-02 Andrew Stubbs <ams@codesourcery.com>
* c-c++-common/gomp/usm-2.c: Add omp_target_alloc.
--- /dev/null
+/* { dg-do compile } */
+/* { dg-additional-options "-foffload-memory=pinned" } */
+
+#pragma omp requires unified_address /* { dg-error "unified_address is incompatible with the selected -foffload-memory option" } */
--- /dev/null
+! { dg-do compile }
+! { dg-additional-options "-foffload-memory=pinned" }
+
+!$omp requires unified_address ! { dg-error "unified_address at .* is incompatible with the selected -foffload-memory option" }
+
+end