https://gcc.gnu.org/g:0dbf9e80ad2b6f6094c5f7ddf0a5cdfdb396b5f3

commit 0dbf9e80ad2b6f6094c5f7ddf0a5cdfdb396b5f3
Author: Andrew Stubbs <[email protected]>
Date:   Thu Oct 23 11:51:31 2025 +0000

    Revert "openmp: -foffload-memory=pinned"
    
    This reverts commit e13ab24bf919a7c4dc30dcfc9fafa9c6349a90a7.

Diff:
---
 gcc/omp-builtins.def                               |  3 -
 gcc/omp-low.cc                                     | 66 ----------------------
 libgomp/config/linux/allocator.c                   | 26 ---------
 libgomp/libgomp.map                                |  1 -
 .../libgomp.c-c++-common/alloc-pinned-1.c          | 28 ---------
 libgomp/testsuite/libgomp.c/alloc-pinned-7.c       | 63 ---------------------
 6 files changed, 187 deletions(-)

diff --git a/gcc/omp-builtins.def b/gcc/omp-builtins.def
index cfc2fd86e0fa..2f979b49caf5 100644
--- a/gcc/omp-builtins.def
+++ b/gcc/omp-builtins.def
@@ -500,6 +500,3 @@ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_WARNING, "GOMP_warning",
                  BT_FN_VOID_CONST_PTR_SIZE, ATTR_NOTHROW_LEAF_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ERROR, "GOMP_error",
                  BT_FN_VOID_CONST_PTR_SIZE, 
ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ENABLE_PINNED_MODE,
-                 "GOMP_enable_pinned_mode",
-                 BT_FN_VOID, ATTR_NOTHROW_LIST)
diff --git a/gcc/omp-low.cc b/gcc/omp-low.cc
index 2141b4a88f86..db02da762332 100644
--- a/gcc/omp-low.cc
+++ b/gcc/omp-low.cc
@@ -16587,68 +16587,6 @@ lower_omp (gimple_seq *body, omp_context *ctx)
   input_location = saved_location;
 }
 
-/* Emit a constructor function to enable -foffload-memory=pinned
-   at runtime.  Libgomp handles the OS mode setting, but we need to trigger
-   it by calling GOMP_enable_pinned mode before the program proper runs.  */
-
-static void
-omp_enable_pinned_mode ()
-{
-  static bool visited = false;
-  if (visited)
-    return;
-  visited = true;
-
-  /* Create a new function like this:
-
-       static void __attribute__((constructor))
-       __set_pinned_mode ()
-       {
-        GOMP_enable_pinned_mode ();
-       }
-  */
-
-  tree name = get_identifier ("__set_pinned_mode");
-  tree voidfntype = build_function_type_list (void_type_node, NULL_TREE);
-  tree decl = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL, name, voidfntype);
-
-  TREE_STATIC (decl) = 1;
-  TREE_USED (decl) = 1;
-  DECL_ARTIFICIAL (decl) = 1;
-  DECL_IGNORED_P (decl) = 0;
-  TREE_PUBLIC (decl) = 0;
-  DECL_UNINLINABLE (decl) = 1;
-  DECL_EXTERNAL (decl) = 0;
-  DECL_CONTEXT (decl) = NULL_TREE;
-  DECL_INITIAL (decl) = make_node (BLOCK);
-  BLOCK_SUPERCONTEXT (DECL_INITIAL (decl)) = decl;
-  DECL_STATIC_CONSTRUCTOR (decl) = 1;
-  DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("constructor"),
-                                     NULL_TREE, NULL_TREE);
-
-  tree t = build_decl (UNKNOWN_LOCATION, RESULT_DECL, NULL_TREE,
-                      void_type_node);
-  DECL_ARTIFICIAL (t) = 1;
-  DECL_IGNORED_P (t) = 1;
-  DECL_CONTEXT (t) = decl;
-  DECL_RESULT (decl) = t;
-
-  push_struct_function (decl);
-  init_tree_ssa (cfun);
-
-  tree calldecl = builtin_decl_explicit (BUILT_IN_GOMP_ENABLE_PINNED_MODE);
-  gcall *call = gimple_build_call (calldecl, 0);
-
-  gimple_seq seq = NULL;
-  gimple_seq_add_stmt (&seq, call);
-  gimple_set_body (decl, gimple_build_bind (NULL_TREE, seq, NULL));
-
-  cfun->function_end_locus = UNKNOWN_LOCATION;
-  cfun->curr_properties |= PROP_gimple_any;
-  pop_cfun ();
-  cgraph_node::add_new_function (decl, true);
-}
-
 /* Main entry point.  */
 
 static unsigned int
@@ -16705,10 +16643,6 @@ execute_lower_omp (void)
   for (auto task_stmt : task_cpyfns)
     finalize_task_copyfn (task_stmt);
   task_cpyfns.release ();
-
-  if (flag_offload_memory == OFFLOAD_MEMORY_PINNED)
-    omp_enable_pinned_mode ();
-
   return 0;
 }
 
diff --git a/libgomp/config/linux/allocator.c b/libgomp/config/linux/allocator.c
index 0138d3fa517a..8dea95954401 100644
--- a/libgomp/config/linux/allocator.c
+++ b/libgomp/config/linux/allocator.c
@@ -54,28 +54,11 @@
 # include <inttypes.h>  /* For PRIu64.  */
 #endif
 
-static bool always_pinned_mode = false;
-
-/* This function is called by the compiler when -foffload-memory=pinned
-   is used.  */
-
-void
-GOMP_enable_pinned_mode ()
-{
-  if (mlockall (MCL_CURRENT | MCL_FUTURE) != 0)
-    gomp_error ("failed to pin all memory (ulimit too low?)");
-  else
-    always_pinned_mode = true;
-}
-
 static void *
 linux_memspace_alloc (omp_memspace_handle_t memspace, size_t size, int pin)
 {
   (void)memspace;
 
-  /* Explicit pinning may not be required.  */
-  pin = pin && !always_pinned_mode;
-
   if (pin)
     {
       /* Note that mmap always returns zeroed memory and is therefore also a
@@ -107,9 +90,6 @@ linux_memspace_alloc (omp_memspace_handle_t memspace, size_t 
size, int pin)
 static void *
 linux_memspace_calloc (omp_memspace_handle_t memspace, size_t size, int pin)
 {
-  /* Explicit pinning may not be required.  */
-  pin = pin && !always_pinned_mode;
-
   if (pin)
     return linux_memspace_alloc (memspace, size, pin);
   else
@@ -122,9 +102,6 @@ linux_memspace_free (omp_memspace_handle_t memspace, void 
*addr, size_t size,
 {
   (void)memspace;
 
-  /* Explicit pinning may not be required.  */
-  pin = pin && !always_pinned_mode;
-
   if (pin)
     munmap (addr, size);
   else
@@ -135,9 +112,6 @@ static void *
 linux_memspace_realloc (omp_memspace_handle_t memspace, void *addr,
                        size_t oldsize, size_t size, int oldpin, int pin)
 {
-  /* Explicit pinning may not be required.  */
-  pin = pin && !always_pinned_mode;
-
   if (oldpin && pin)
     {
       void *newaddr = mremap (addr, oldsize, size, MREMAP_MAYMOVE);
diff --git a/libgomp/libgomp.map b/libgomp/libgomp.map
index a6c523ba51a8..f6aee7c03945 100644
--- a/libgomp/libgomp.map
+++ b/libgomp/libgomp.map
@@ -406,7 +406,6 @@ GOMP_5.0.1 {
   global:
        GOMP_alloc;
        GOMP_free;
-       GOMP_enable_pinned_mode;
 } GOMP_5.0;
 
 GOMP_5.1 {
diff --git a/libgomp/testsuite/libgomp.c-c++-common/alloc-pinned-1.c 
b/libgomp/testsuite/libgomp.c-c++-common/alloc-pinned-1.c
deleted file mode 100644
index 77333951ca77..000000000000
--- a/libgomp/testsuite/libgomp.c-c++-common/alloc-pinned-1.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* { dg-do run } */
-/* { dg-additional-options "-foffload-memory=pinned" } */
-/* { dg-skip-if "Pinning not implemented on this host" { ! *-*-linux-gnu* } } 
*/
-
-#if __cplusplus
-#define EXTERNC extern "C"
-#else
-#define EXTERNC
-#endif
-
-/* Intercept the libgomp initialization call to check it happens.  */
-
-int good = 0;
-
-EXTERNC void
-GOMP_enable_pinned_mode ()
-{
-  good = 1;
-}
-
-int
-main ()
-{
-  if (!good)
-    __builtin_exit (1);
-
-  return 0;
-}
diff --git a/libgomp/testsuite/libgomp.c/alloc-pinned-7.c 
b/libgomp/testsuite/libgomp.c/alloc-pinned-7.c
deleted file mode 100644
index 44652aac8746..000000000000
--- a/libgomp/testsuite/libgomp.c/alloc-pinned-7.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* { dg-do run } */
-/* { dg-additional-options "-foffload-memory=pinned" } */
-
-/* { dg-skip-if "Pinning not implemented on this host" { ! *-*-linux-gnu* } } 
*/
-
-/* Test that -foffload-memory=pinned works.  */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifdef __linux__
-#include <sys/types.h>
-#include <unistd.h>
-
-#include <sys/mman.h>
-
-int
-get_pinned_mem ()
-{
-  int pid = getpid ();
-  char buf[100];
-  sprintf (buf, "/proc/%d/status", pid);
-
-  FILE *proc = fopen (buf, "r");
-  if (!proc)
-    abort ();
-  while (fgets (buf, 100, proc))
-    {
-      int val;
-      if (sscanf (buf, "VmLck: %d", &val))
-       {
-         fclose (proc);
-         return val;
-       }
-    }
-  abort ();
-}
-#else
-int
-get_pinned_mem ()
-{
-  return 0;
-}
-
-#define mlockall(...) 0
-#endif
-
-#include <omp.h>
-
-int
-main ()
-{
-  // Sanity check
-  if (get_pinned_mem () == 0)
-    {
-      /* -foffload-memory=pinned has failed, but maybe that's because
-        isufficient pinned memory was available.  */
-      if (mlockall (MCL_CURRENT | MCL_FUTURE) == 0)
-       abort ();
-    }
-
-  return 0;
-}

Reply via email to