Skip to content
Snippets Groups Projects
  1. Oct 16, 2024
    • Tobias Burnus's avatar
      Add libgomp.oacc-fortran/acc_on_device-1-4.f · ee4fdda7
      Tobias Burnus authored
      Kind of undoes r15-4315-g9f549d216c9716 by adding the original testcase back;
      namely, adding acc_on_device-1-3.f as acc_on_device-1-4.f with
      -fno-builtin-acc_on_device removed.
      
      libgomp/ChangeLog:
      
      	* testsuite/libgomp.oacc-fortran/acc_on_device-1-4.f: New test;
      	same as acc_on_device-1-3.f but using the builtin function.
      ee4fdda7
    • GCC Administrator's avatar
      Daily bump. · d9e02add
      GCC Administrator authored
      d9e02add
  2. Oct 14, 2024
    • Thomas Schwinge's avatar
      OpenACC 'nohost' clause: harmonize 'libgomp.oacc-{c-c++-common,fortran}/routine-nohost-1.*' · de032071
      Thomas Schwinge authored
      The test case 'libgomp.oacc-fortran/routine-nohost-1.f90' added in 2021
      commit a61f6afb "OpenACC 'nohost' clause" was
      dependend on inlining being enabled, and otherwise ('-fno-inline') failed to
      optimize/link:
      
          /tmp/ccb2hsPd.o: In function `MAIN__._omp_fn.0':
          routine-nohost-1.f90:(.text+0xf4): undefined reference to `fact_nohost_'
      
      However, as of recent commit 3269a722
      "Fortran: Use OpenACC's acc_on_device builtin, fix OpenMP' __builtin_is_initial_device",
      we're now properly handling OpenACC/Fortran 'acc_on_device', and may specify
      '-fno-inline', like done in 'libgomp.oacc-c-c++-common/routine-nohost-1.c'.
      
      	libgomp/
      	* testsuite/libgomp.oacc-fortran/routine-nohost-1.f90: Add
      	'-fno-inline'.
      de032071
    • Thomas Schwinge's avatar
      Fortran: Use OpenACC's acc_on_device builtin, fix OpenMP'... · 9f549d21
      Thomas Schwinge authored
      Fortran: Use OpenACC's acc_on_device builtin, fix OpenMP' __builtin_is_initial_device: Harmonize 'libgomp.oacc-fortran/acc_on_device-1-*'
      
      The test case 'libgomp.oacc-fortran/acc_on_device-1-1.f90' added in
      commit 3269a722
      "Fortran: Use OpenACC's acc_on_device builtin, fix OpenMP' __builtin_is_initial_device"
      was missing '-fno-builtin-acc_on_device', and all
      'libgomp.oacc-fortran/acc_on_device-1-*' need comments, why that option is
      specified.
      
      	PR testsuite/82250
      	libgomp/
      	* testsuite/libgomp.oacc-fortran/acc_on_device-1-1.f90: Add
      	'-fno-builtin-acc_on_device'.
      	* testsuite/libgomp.oacc-fortran/acc_on_device-1-2.f: Comment.
      	* testsuite/libgomp.oacc-fortran/acc_on_device-1-3.f: Comment.
      9f549d21
    • Thomas Schwinge's avatar
      Fortran: Use OpenACC's acc_on_device builtin, fix OpenMP'... · c3774b2e
      Thomas Schwinge authored
      Fortran: Use OpenACC's acc_on_device builtin, fix OpenMP' __builtin_is_initial_device: Fix effective-target keyword in 'libgomp.oacc-fortran/acc_on_device-2.f90'
      
      The test case 'libgomp.oacc-fortran/acc_on_device-2.f90' added in
      commit 3269a722
      "Fortran: Use OpenACC's acc_on_device builtin, fix OpenMP' __builtin_is_initial_device"
      had a mismatch between dump file production and its scanning; the former needs
      to use 'offload_target_nvptx' (like 'offload_target_amdgcn'), not
      'offload_device_nvptx'.
      
      	PR testsuite/82250
      	libgomp/
      	* testsuite/libgomp.oacc-fortran/acc_on_device-2.f90: Fix
      	effective-target keyword.
      c3774b2e
    • GCC Administrator's avatar
      Daily bump. · c21402eb
      GCC Administrator authored
      c21402eb
  3. Oct 13, 2024
    • Tobias Burnus's avatar
      Fortran: Use OpenACC's acc_on_device builtin, fix OpenMP' __builtin_is_initial_device · 3269a722
      Tobias Burnus authored
      It turned out that 'if (omp_is_initial_device() .eqv. true)' gave an ICE
      due to comparing 'int' with 'logical(4)'. When digging deeper, it also
      turned out that when the procedure pointer is needed, the builtin cannot
      be used, either.  (Follow up to r15-2799-gf1bfba3a9b3f31 )
      
      Extend the code to also use the builtin acc_on_device with OpenACC,
      which was previously only used in C/C++.  Additionally, fix folding
      when offloading is not enabled.
      
      Fixes additionally the BT_BOOL data type, which was 'char'/integer(1)
      instead of bool, backing the booleaness; use bool_type_node as the rest
      of GCC.
      
      gcc/fortran/ChangeLog:
      
      	* gfortran.h (gfc_option_t): Add disable_acc_on_device.
      	* options.cc (gfc_handle_option): Handle -fno-builtin-acc_on_device.
      	* trans-decl.cc (gfc_get_extern_function_decl): Move
      	__builtin_omp_is_initial_device handling to ...
      	* trans-expr.cc (get_builtin_fn): ... this new function.
      	(conv_function_val): Call it.
      	(update_builtin_function): New.
      	(gfc_conv_procedure_call): Call it.
      	* types.def (BT_BOOL): Fix type by using bool_type_node.
      
      gcc/ChangeLog:
      
      	* gimple-fold.cc (gimple_fold_builtin_acc_on_device): Also fold
      	when offloading is not configured.
      
      libgomp/ChangeLog:
      
      	* libgomp.texi (TR13): Fix minor typos.
      	(omp_is_initial_device): Improve wording.
      	(acc_on_device): Note how to disable the builtin.
      	* testsuite/libgomp.oacc-fortran/acc_on_device-1-1.f90: Remove TODO.
      	* testsuite/libgomp.oacc-fortran/acc_on_device-1-2.f: Likewise.
      	Add -fno-builtin-acc_on_device.
      	* testsuite/libgomp.oacc-fortran/acc_on_device-1-3.f: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/routine-nohost-1.c: Update
      	dg- as !offloading_enabled now compile-time expands acc_on_device.
      	* testsuite/libgomp.fortran/target-is-initial-device-3.f90: New test.
      	* testsuite/libgomp.oacc-fortran/acc_on_device-2.f90: New test.
      3269a722
  4. Oct 08, 2024
  5. Oct 07, 2024
    • Tobias Burnus's avatar
      Move gfortran.dg/gomp/allocate-static.f90 to libgomp.fortran/ · b95ad25f
      Tobias Burnus authored
      The testcase was turned into a 'dg-do run' check to check for the alignment,
      but this only works in testsuite/gfortran.dg, causing link errors for
      out-of-tree testing. The test was added in r15-4104-ga8caeaacf499d5.
      
      gcc/testsuite/:
      
      	* gfortran.dg/gomp/allocate-static.f90: Move to libgomp/testsuite/.
      
      libgomp/:
      
      	* testsuite/libgomp.fortran/allocate-static.f90: Moved from
      	gcc/testsuite/ as it is a dg-do run test; use real omp_lib_kinds
      	instead of local definition
      b95ad25f
    • Tobias Burnus's avatar
      libgomp.texi: Update and cleanup of Impl. Status of OpenMP TR13 · e2039386
      Tobias Burnus authored
      libgomp/ChangeLog:
      
      	* libgomp.texi (OpenMP Technical Report 13): Wording cleanup;
      	sort as in Appendix B; add missing items; remove duplicates.
      e2039386
    • Tobias Burnus's avatar
      OpenMP: Allocate directive for static vars, clean up · a8caeaac
      Tobias Burnus authored
      For the 'allocate' directive, remove the sorry for static variables and
      just keep using normal memory, but honor the requested alignment and set
      a DECL_ATTRIBUTE in case a target may want to make use of this later on.
      The documentation is updated accordingly.
      
      The C diagnostic to check for predefined allocators (req. for static vars)
      failed to accept GCC's ompx_gnu_... allocator, now fixed. (Fortran was
      already okay; but both now use new common #defined value for checking.)
      And while Fortran common block variables are still rejected, the check
      has been improved as before the sorry diagnostic did not work for
      common blocks in modules.
      
      Finally, for 'allocate' clause on the target/task/taskloop directives,
      there is now a warning for omp_thread_mem_alloc (i.e. predefined allocator
      with access = thread), which is undefined behavior according to the
      OpenMP specification.
      
      And, last, testing showed that var decl + static_assert sets TREE_USED
      but does not produce a statement list in C, which did run into an assert
      in gimplify. This special case is now also handled.
      
      gcc/c/ChangeLog:
      
      	* c-parser.cc (c_parser_omp_allocate): Set alignment for alignof;
      	accept static variables and fix predef allocator check.
      
      gcc/fortran/ChangeLog:
      
      	* openmp.cc (is_predefined_allocator): Use gomp-constants.h consts.
      	* trans-common.cc (translate_common): Reject OpenMP allocate directives.
      	* trans-decl.cc (gfc_finish_var_decl): Handle allocate directive
      	for static variables.
      	(gfc_trans_deferred_vars): Update for the latter.
      
      gcc/ChangeLog:
      
      	* gimplify.cc (gimplify_bind_expr): Fix corner case for OpenMP
      	allocate directive.
      	(gimplify_scan_omp_clauses): Warn if omp_thread_mem_alloc is used
      	as allocator with the target/task/taskloop directive.
      
      include/ChangeLog:
      
      	* gomp-constants.h (GOMP_OMP_PREDEF_ALLOC_MAX,
      	GOMP_OMPX_PREDEF_ALLOC_MIN, GOMP_OMPX_PREDEF_ALLOC_MAX,
      	GOMP_OMP_PREDEF_ALLOC_THREADS): New defines.
      
      libgomp/ChangeLog:
      
      	* allocator.c: Add static asserts for news
      	GOMP_OMP{,X}_PREDEF_ALLOC_{MIN,MAX} range values.
      	* libgomp.texi (OpenMP Impl. Status): Allocate directive for
      	static vars is now supported. Refer to PR for allocate clause.
      	(Memory allocation): Update for static vars; minor word tweaking.
      
      gcc/testsuite/ChangeLog:
      
      	* c-c++-common/gomp/allocate-9.c: Update for removed sorry.
      	* gfortran.dg/gomp/allocate-15.f90: Likewise.
      	* gfortran.dg/gomp/allocate-pinned-1.f90: Likewise.
      	* gfortran.dg/gomp/allocate-4.f90: Likewise; add dg-error for
      	previously missing diagnostic.
      	* c-c++-common/gomp/allocate-18.c: New test.
      	* c-c++-common/gomp/allocate-19.c: New test.
      	* gfortran.dg/gomp/allocate-clause.f90: New test.
      	* gfortran.dg/gomp/allocate-static-2.f90: New test.
      	* gfortran.dg/gomp/allocate-static.f90: New test.
      a8caeaac
  6. Sep 28, 2024
  7. Sep 27, 2024
  8. Sep 26, 2024
  9. Sep 25, 2024
  10. Sep 24, 2024
    • Jakub Jelinek's avatar
      c++: Implement C++23 P2718R0 - Wording for P2644R1 Fix for Range-based for Loop [PR107637] · 650e9156
      Jakub Jelinek authored
      The following patch implements the C++23 P2718R0 paper
      - Wording for P2644R1 Fix for Range-based for Loop.
      The patch introduces a new option, -f{,no-}range-for-ext-temps so that
      user can control the behavior even in older C++ versions.
      The option is on by default in C++23 and later (-fno-range-for-ext-temps
      is an error in that case) and in the -std=gnu++11 ... -std=gnu++20 modes
      (one can use -fno-range-for-ext-temps to request previous behavior in that
      case), and is not enabled by default in -std=c++11 ... -std=c++20 modes
      but one can explicitly enable it with -frange-for-ext-temps.
      As all the temporaries from __for_range initialization should have life
      extended until the end of __for_range scope, this patch disables (for
      -frange-for-ext-temps and if !processing_template_decl) CLEANUP_POINT_EXPR wrapping
      of the __for_range declaration, also disables -Wdangling-reference warning
      as well as the rest of extend_ref_init_temps (we know the __for_range temporary
      is not TREE_STATIC and as all the temporaries from the initializer will be life
      extended, we shouldn't try to handle temporaries referenced by references any
      differently) and adds an extra push_stmt_list/pop_stmt_list before
      cp_finish_decl of __for_range and after end of the for body and wraps all
      that into CLEANUP_POINT_EXPR.
      I had to repeat that also for OpenMP range loops because those are handled
      differently.
      
      2024-09-24  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c++/107637
      gcc/
      	* omp-general.cc (find_combined_omp_for, find_nested_loop_xform):
      	Handle CLEANUP_POINT_EXPR like TRY_FINALLY_EXPR.
      	* doc/invoke.texi (frange-for-ext-temps): Document.  Add
      	-fconcepts to the C++ option list.
      gcc/c-family/
      	* c.opt (frange-for-ext-temps): New option.
      	* c-opts.cc (c_common_post_options): Set flag_range_for_ext_temps
      	for C++23 or later or for C++11 or later in !flag_iso mode if
      	the option wasn't set by user.
      	* c-cppbuiltin.cc (c_cpp_builtins): Change __cpp_range_based_for
      	value for flag_range_for_ext_temps from 201603L to 202212L in C++17
      	or later.
      	* c-omp.cc (c_find_nested_loop_xform_r): Handle CLEANUP_POINT_EXPR
      	like TRY_FINALLY_EXPR.
      gcc/cp/
      	* cp-tree.h: Implement C++23 P2718R0 - Wording for P2644R1 Fix for
      	Range-based for Loop.
      	(cp_convert_omp_range_for): Add bool tmpl_p argument.
      	(find_range_for_decls): Declare.
      	* parser.cc (cp_convert_range_for): For flag_range_for_ext_temps call
      	push_stmt_list () before cp_finish_decl for range_temp and save it
      	temporarily to FOR_INIT_STMT.
      	(cp_convert_omp_range_for): Add tmpl_p argument.  If set, remember
      	DECL_NAME of range_temp and for cp_finish_decl call restore it before
      	clearing it again, if unset, don't adjust DECL_NAME of range_temp at
      	all.
      	(cp_parser_omp_loop_nest): For flag_range_for_ext_temps range for add
      	CLEANUP_POINT_EXPR around sl.  Call find_range_for_decls and adjust
      	DECL_NAMEs for range fors if not processing_template_decl.  Adjust
      	cp_convert_omp_range_for caller.  Remove superfluous backslash at the
      	end of line.
      	* decl.cc (initialize_local_var): For flag_range_for_ext_temps
      	temporarily clear stmts_are_full_exprs_p rather than set for
      	for_range__identifier decls.
      	* call.cc (extend_ref_init_temps): For flag_range_for_ext_temps return
      	init early for for_range__identifier decls.
      	* semantics.cc (find_range_for_decls): New function.
      	(finish_for_stmt): Use it.  For flag_range_for_ext_temps if
      	cp_convert_range_for set FOR_INIT_STMT, pop_stmt_list it and wrap
      	into CLEANUP_POINT_EXPR.
      	* pt.cc (tsubst_omp_for_iterator): Adjust tsubst_omp_for_iterator
      	caller.
      	(tsubst_stmt) <case OMP_FOR>: For flag_range_for_ext_temps if there
      	are any range fors in the loop nest, add push_stmt_list starting
      	before the initializations, pop_stmt_list it after the body and wrap
      	into CLEANUP_POINT_EXPR.  Change DECL_NAME of range for temps from
      	NULL to for_range_identifier.
      gcc/testsuite/
      	* g++.dg/cpp23/range-for1.C: New test.
      	* g++.dg/cpp23/range-for2.C: New test.
      	* g++.dg/cpp23/range-for3.C: New test.
      	* g++.dg/cpp23/range-for4.C: New test.
      	* g++.dg/cpp23/range-for5.C: New test.
      	* g++.dg/cpp23/range-for6.C: New test.
      	* g++.dg/cpp23/range-for7.C: New test.
      	* g++.dg/cpp23/range-for8.C: New test.
      	* g++.dg/cpp23/feat-cxx2b.C (__cpp_range_based_for): Check for
      	202212L rather than 201603L.
      	* g++.dg/cpp26/feat-cxx26.C (__cpp_range_based_for): Likewise.
      	* g++.dg/warn/Wdangling-reference4.C: Don't expect warning for C++23
      	or newer.  Use dg-additional-options rather than dg-options.
      libgomp/
      	* testsuite/libgomp.c++/range-for-1.C: New test.
      	* testsuite/libgomp.c++/range-for-2.C: New test.
      	* testsuite/libgomp.c++/range-for-3.C: New test.
      	* testsuite/libgomp.c++/range-for-4.C: New test.
      	* testsuite/libgomp.c++/range-for-5.C: New test.
      650e9156
    • Tobias Burnus's avatar
      libgomp: with USM, init 'link' variables with host address · 4cb20dc0
      Tobias Burnus authored
      If requires unified_shared_memory or self_maps is set, make
      'declare target link' variables to point initially to the host pointer.
      
      libgomp/ChangeLog:
      
      	* target.c (gomp_load_image_to_device): For requires
      	unified_shared_memory, update 'link' vars to point to the host var.
      	* testsuite/libgomp.c-c++-common/target-link-3.c: New test.
      	* testsuite/libgomp.c-c++-common/target-link-4.c: New test.
      4cb20dc0
    • Tobias Burnus's avatar
      OpenMP: Add support for 'self_maps' to the 'require' directive · b752eed3
      Tobias Burnus authored
      'self_maps' implies 'unified_shared_memory', except that the latter
      also permits that explicit maps copy data to device memory while
      self_maps does not. In GCC, currently, both are handled identical.
      
      gcc/c/ChangeLog:
      
      	* c-parser.cc (c_parser_omp_requires): Handle self_maps clause.
      
      gcc/cp/ChangeLog:
      
      	* parser.cc (cp_parser_omp_requires): Handle self_maps clause.
      
      gcc/fortran/ChangeLog:
      
      	* gfortran.h (enum gfc_omp_requires_kind): Add OMP_REQ_SELF_MAPS.
      	(gfc_namespace): Enlarge omp_requires bitfield.
      	* module.cc (enum ab_attribute, attr_bits): Add AB_OMP_REQ_SELF_MAPS.
      	(mio_symbol_attribute): Handle it.
      	* openmp.cc (gfc_check_omp_requires, gfc_match_omp_requires): Handle
      	self_maps clause.
      	* parse.cc (gfc_parse_file): Handle self_maps clause.
      
      gcc/ChangeLog:
      
      	* lto-cgraph.cc (output_offload_tables, omp_requires_to_name): Handle
      	self_maps clause.
      	* omp-general.cc (struct omp_ts_info, omp_context_selector_matches):
      	Likewise for the associated trait.
      	* omp-general.h (enum omp_requires): Add OMP_REQUIRES_SELF_MAPS.
      	* omp-selectors.h (enum omp_ts_code): Add
      	OMP_TRAIT_IMPLEMENTATION_SELF_MAPS.
      
      include/ChangeLog:
      
      	* gomp-constants.h (GOMP_REQUIRES_SELF_MAPS): #define.
      
      libgomp/ChangeLog:
      
      	* plugin/plugin-gcn.c (GOMP_OFFLOAD_get_num_devices):
      	Accept self_maps clause.
      	* plugin/plugin-nvptx.c (GOMP_OFFLOAD_get_num_devices):
      	Likewise.
      	* libgomp.texi (TR13 Impl. Status): Set to 'Y'.
      	* target.c (gomp_requires_to_name, GOMP_offload_register_ver,
      	gomp_target_init): Handle self_maps clause.
      	* testsuite/libgomp.fortran/self_maps.f90: New test.
      
      gcc/testsuite/ChangeLog:
      
      	* c-c++-common/gomp/declare-variant-1.c: Add self_maps test.
      	* c-c++-common/gomp/requires-4.c: Likewise.
      	* gfortran.dg/gomp/declare-variant-3.f90:  Likewise.
      	* c-c++-common/gomp/requires-2.c: Update dg-error msg.
      	* gfortran.dg/gomp/requires-2.f90: Likewise.
      	* gfortran.dg/gomp/requires-self-maps-aux.f90: New.
      	* gfortran.dg/gomp/requires-self-maps.f90: New.
      b752eed3
    • GCC Administrator's avatar
      Daily bump. · 4d6fa5b7
      GCC Administrator authored
      4d6fa5b7
  11. Sep 23, 2024
    • Tobias Burnus's avatar
      OpenMP: Fix omp_get_device_from_uid, minor cleanup · cdb9aa0f
      Tobias Burnus authored
      In Fortran, omp_get_device_from_uid can also accept substrings, which are
      then not NUL terminated.  Fixed by introducing a fortran.c wrapper function.
      Additionally, in case of a fail the plugin functions now return NULL instead
      of failing fatally such that a fall-back UID is generated.
      
      gcc/ChangeLog:
      
      	* omp-general.cc (omp_runtime_api_procname): Strip "omp_" from
      	string; move get_device_from_uid as now a '_' suffix exists.
      
      libgomp/ChangeLog:
      
      	* fortran.c (omp_get_device_from_uid_): New function.
      	* libgomp.map (GOMP_6.0): Add it.
      	* oacc-host.c (host_dispatch): Init '.uid' and '.get_uid_func'.
      	* omp_lib.f90.in: Make it used by removing bind(C).
      	* omp_lib.h.in: Likewise.
      	* target.c (omp_get_device_from_uid): Ensure the device is initialized.
      	* plugin/plugin-gcn.c (GOMP_OFFLOAD_get_uid): Add function comment;
      	return NULL in case of an error.
      	* plugin/plugin-nvptx.c (GOMP_OFFLOAD_get_uid): Likewise.
      	* testsuite/libgomp.fortran/device_uid.f90: Update to test substrings.
      cdb9aa0f
  12. Sep 20, 2024
    • GCC Administrator's avatar
      Daily bump. · 442db842
      GCC Administrator authored
      442db842
    • Tobias Burnus's avatar
      OpenMP: Add get_device_from_uid/omp_get_uid_from_device routines · bf4a5efa
      Tobias Burnus authored
      Those TR13/OpenMP 6.0 routines permit a reproducible offloading to
      a specific device by mapping an OpenMP device number to a
      unique ID (UID). The GPU device UIDs should be universally unique,
      the one for the host is not.
      
      gcc/ChangeLog:
      
      	* omp-general.cc (omp_runtime_api_procname): Add
      	get_device_from_uid and omp_get_uid_from_device routines.
      
      include/ChangeLog:
      
      	* cuda/cuda.h (cuDeviceGetUuid): Declare.
      	(cuDeviceGetUuid_v2): Add prototype.
      
      libgomp/ChangeLog:
      
      	* config/gcn/target.c (omp_get_uid_from_device,
      	omp_get_device_from_uid): Add stub implementation.
      	* config/nvptx/target.c (omp_get_uid_from_device,
      	omp_get_device_from_uid): Likewise.
      	* fortran.c (omp_get_uid_from_device_,
      	omp_get_uid_from_device_8_): New functions.
      	* libgomp-plugin.h (GOMP_OFFLOAD_get_uid): Add prototype.
      	* libgomp.h (struct gomp_device_descr): Add 'uid' and 'get_uid_func'.
      	* libgomp.map (GOMP_6.0): New, includind the new UID routines.
      	* libgomp.texi (OpenMP Technical Report 13): Mark UID routines as 'Y'.
      	(Device Information Routines): Document new UID routines.
      	(Offload-Target Specifics): Document UID format.
      	* omp.h.in (omp_get_device_from_uid, omp_get_uid_from_device):
      	New prototype.
      	* omp_lib.f90.in (omp_get_device_from_uid, omp_get_uid_from_device):
      	New interface.
      	* omp_lib.h.in: Likewise.
      	* plugin/cuda-lib.def: Add cuDeviceGetUuid and cuDeviceGetUuid_v2 via
      	CUDA_ONE_CALL_MAYBE_NULL.
      	* plugin/plugin-gcn.c (GOMP_OFFLOAD_get_uid): New.
      	* plugin/plugin-nvptx.c (GOMP_OFFLOAD_get_uid): New.
      	* target.c (str_omp_initial_device): New static var.
      	(STR_OMP_DEV_PREFIX): Define.
      	(gomp_get_uid_for_device, omp_get_uid_from_device,
      	omp_get_device_from_uid): New.
      	(gomp_load_plugin_for_device): DLSYM_OPT the function 'get_uid'.
      	(gomp_target_init): Set the device's 'uid' field to NULL.
      	* testsuite/libgomp.c/device_uid.c: New test.
      	* testsuite/libgomp.fortran/device_uid.f90: New test.
      bf4a5efa
  13. Sep 03, 2024
  14. Sep 02, 2024
    • Andrew Stubbs's avatar
      amdgcn: remove gfx803 "Fiji" support · 57af0022
      Andrew Stubbs authored
      The gfx803 "Fiji" device was deprecated in GCC 14, removed from LLVM 18, and
      hasn't worked properly with the drivers since about ROCm 4.
      
      This patch removes the device from GCC options and documentation, and removes
      the direct mentions from the internals.
      
      The TARGET_GCN3 support in the back-end is now unused and can be removed (in a
      follow-up patch).
      
      gcc/ChangeLog:
      
      	* config.gcc (amdgcn-*-*): Remove "fiji" from with_arch checks.
      	* config/gcn/gcn-hsa.h (ABI_VERSION_SPEC): Remove fiji alternative.
      	(NO_XNACK): Likewise.
      	(NO_SRAM_ECC): Likewise.
      	(ASM_SPEC): Remove "%{}" around ABI_VERSION_SPEC.
      	* config/gcn/gcn-opts.h (enum processor_type): Remove PROCESSOR_FIJI.
      	(TARGET_FIJI): Delete.
      	* config/gcn/gcn.cc (gcn_option_override): Remove Fiji.
      	(gcn_omp_device_kind_arch_isa): Likewise.
      	(output_file_start): Likewise.
      	* config/gcn/gcn.h (TARGET_CPU_CPP_BUILTINS): Likewise.
      	* config/gcn/gcn.opt (gpu_type): Likewise.
      	(march, mtune): Change default to PROCESSOR_VEGA10.
      	* config/gcn/mkoffload.cc (EF_AMDGPU_MACH_AMDGCN_GFX803): Delete.
      	(copy_early_debug_info): Remove elf_flags_actual.
      	Use ELFABIVERSION_AMDGPU_HSA_V4 unconditionally.
      	(get_arch): Remove Fiji.
      	(main): Remove gfx803.
      	* config/gcn/t-omp-device
      	(omp-device-properties-gcn): Remove fiji and gfx803.
      	* doc/install.texi (amdgcn*-*-*): Remove fiji and special instructions.
      	* doc/invoke.texi: Remove fiji.
      
      libgomp/ChangeLog:
      
      	* libgomp.texi: Remove fiji and gfx803.
      	* testsuite/libgomp.c/declare-variant-4.h: Remove fiji and gfx803.
      	* testsuite/libgomp.c/declare-variant-4-fiji.c: Removed.
      	* testsuite/libgomp.c/declare-variant-4-gfx803.c: Removed.
      57af0022
    • Alex Coplan's avatar
      testsuite: Rename scanltranstree.exp -> scanltrans.exp · e4d3e7f9
      Alex Coplan authored
      Since r15-3254-g3f51f0dc88ec21c1ec79df694200f10ef85915f4
      added scan-ltrans-rtl* variants to scanltranstree.exp, it no longer
      makes sense to have "tree" in the name.  This renames the file
      accordingly and updates users.
      
      libatomic/ChangeLog:
      
      	* testsuite/lib/libatomic.exp: Load scanltrans.exp instead of
      	scanltranstree.exp.
      
      libgomp/ChangeLog:
      
      	* testsuite/lib/libgomp.exp: Load scanltrans.exp instead of
      	scanltranstree.exp.
      
      libitm/ChangeLog:
      
      	* testsuite/lib/libitm.exp: Load scanltrans.exp instead of
      	scanltranstree.exp.
      
      libphobos/ChangeLog:
      
      	* testsuite/lib/libphobos-dg.exp: Load scanltrans.exp instead of
      	scanltranstree.exp.
      
      libvtv/ChangeLog:
      
      	* testsuite/lib/libvtv.exp: Load scanltrans.exp instead of
      	scanltranstree.exp.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.dg-selftests/dg-final.exp: Load scanltrans.exp instead of
      	scanltranstree.exp.
      	* lib/gcc-dg.exp: Likewise.
      	* lib/scanltranstree.exp: Rename to ...
      	* lib/scanltrans.exp: ... this.
      e4d3e7f9
  15. Aug 29, 2024
  16. Aug 28, 2024
    • Tobias Burnus's avatar
      libgomp: Add interop types and routines to OpenMP's headers and module · 0beac1db
      Tobias Burnus authored
      This commit adds OpenMP 5.1+'s interop enumeration, type and routine
      declarations to the C/C++ header file and, new in OpenMP TR13, also to
      the Fortran module and omp_lib.h header file.
      
      While a stub implementation is provided, only with foreign runtime
      support by the libgomp GPU plugins and with the 'interop' directive,
      this becomes really useful.
      
      libgomp/ChangeLog:
      
      	* fortran.c (omp_get_interop_str_, omp_get_interop_name_,
      	omp_get_interop_type_desc_, omp_get_interop_rc_desc_): Add.
      	* libgomp.map (GOMP_5.1.3): New; add interop routines.
      	* omp.h.in: Add interop typedefs, enum and prototypes.
      	(__GOMP_DEFAULT_NULL): Define.
      	(omp_target_memcpy_async, omp_target_memcpy_rect_async):
      	Use it for the optional depend argument.
      	* omp_lib.f90.in: Add paramters and interfaces for interop.
      	* omp_lib.h.in: Likewise; move F90 '&' to column 81 for
      	-ffree-length-80.
      	* target.c (omp_get_num_interop_properties, omp_get_interop_int,
      	omp_get_interop_ptr, omp_get_interop_str, omp_get_interop_name,
      	omp_get_interop_type_desc, omp_get_interop_rc_desc): Add.
      	* config/gcn/target.c (omp_get_num_interop_properties,
      	omp_get_interop_int, omp_get_interop_ptr, omp_get_interop_str,
      	omp_get_interop_name, omp_get_interop_type_desc,
      	omp_get_interop_rc_desc): Add.
      	* config/nvptx/target.c (omp_get_num_interop_properties,
      	omp_get_interop_int, omp_get_interop_ptr, omp_get_interop_str,
      	omp_get_interop_name, omp_get_interop_type_desc,
      	omp_get_interop_rc_desc): Add.
      	* testsuite/libgomp.c-c++-common/interop-routines-1.c: New test.
      	* testsuite/libgomp.c-c++-common/interop-routines-2.c: New test.
      	* testsuite/libgomp.fortran/interop-routines-1.F90: New test.
      	* testsuite/libgomp.fortran/interop-routines-2.F90: New test.
      	* testsuite/libgomp.fortran/interop-routines-3.F: New test.
      	* testsuite/libgomp.fortran/interop-routines-4.F: New test.
      	* testsuite/libgomp.fortran/interop-routines-5.F: New test.
      	* testsuite/libgomp.fortran/interop-routines-6.F: New test.
      	* testsuite/libgomp.fortran/interop-routines-7.F90: New test.
      0beac1db
  17. Aug 10, 2024
  18. Aug 09, 2024
    • Thomas Schwinge's avatar
      OpenMP: Constructors and destructors for "declare target" static aggregates:... · 9f5d22e3
      Thomas Schwinge authored
      OpenMP: Constructors and destructors for "declare target" static aggregates: Fix effective-target keyword in test cases
      
      (Most of) the tests added in commit f1bfba3a
      "OpenMP: Constructors and destructors for "declare target" static aggregates"
      had a mismatch between dump file production and its scanning; the former needs
      to use 'offload_target_nvptx' (like 'offload_target_amdgcn'), not
      'offload_device_nvptx'.
      
      	libgomp/
      	* testsuite/libgomp.c++/static-aggr-constructor-destructor-1.C:
      	Fix effective-target keyword.
      	* testsuite/libgomp.c++/static-aggr-constructor-destructor-2.C:
      	Likewise.
      	* testsuite/libgomp.c-c++-common/target-is-initial-host-2.c:
      	Likewise.
      	* testsuite/libgomp.c-c++-common/target-is-initial-host.c:
      	Likewise.
      	* testsuite/libgomp.fortran/target-is-initial-host-2.f90:
      	Likewise.
      	* testsuite/libgomp.fortran/target-is-initial-host.f: Likewise.
      	* testsuite/libgomp.fortran/target-is-initial-host.f90: Likewise.
      9f5d22e3
    • GCC Administrator's avatar
      Daily bump. · 77ccfa6a
      GCC Administrator authored
      77ccfa6a
  19. Aug 08, 2024
  20. Aug 07, 2024
    • Tobias Burnus's avatar
      OpenMP: Constructors and destructors for "declare target" static aggregates · f1bfba3a
      Tobias Burnus authored
      
      This commit also compile-time expands (__builtin_)omp_is_initial_device for
      both Fortran and C/C++ (unless, -fno-builtin-omp_is_initial_device is used).
      But the main change is:
      
      This commit adds support for running constructors and destructors for
      static (file-scope) aggregates for C++ objects which are marked with
      "declare target" directives on OpenMP offload targets.
      
      Before this commit, space is allocated on the target for such aggregates,
      but nothing ever constructs them properly, so they end up zero-initialised.
      
      (See the new test static-aggr-constructor-destructor-3.C for a reason
      why running constructors on the target is preferable to e.g. constructing
      on the host and then copying the resulting object to the target.)
      
      2024-08-07  Julian Brown  <julian@codesourcery.com>
      	    Tobias Burnus  <tobias@baylibre.com>
      
      gcc/ChangeLog:
      
      	* builtins.def (DEF_GOMP_BUILTIN_COMPILER): Define
      	DEF_GOMP_BUILTIN_COMPILER to handle the non-prefix version.
      	* gimple-fold.cc (gimple_fold_builtin_omp_is_initial_device): New.
      	(gimple_fold_builtin): Call it.
      	* omp-builtins.def (BUILT_IN_OMP_IS_INITIAL_DEVICE): Define.
      	* tree.cc (get_file_function_name): Support names for on-target
      	constructor/destructor functions.
      
      gcc/cp/
      	* decl2.cc (tree-inline.h): Include.
      	(static_init_fini_fns): Bump to four entries. Update comment.
      	(start_objects, start_partial_init_fini_fn): Add 'omp_target'
      	parameter. Support "declare target" decls. Update forward declaration.
      	(emit_partial_init_fini_fn): Add 'host_fn' parameter. Return tree for
      	the created function. Support "declare target".
      	(OMP_SSDF_IDENTIFIER): New macro.
      	(partition_vars_for_init_fini): Support partitioning "declare target"
      	variables also.
      	(generate_ctor_or_dtor_function): Add 'omp_target' parameter. Support
      	"declare target" decls.
      	(c_parse_final_cleanups): Support constructors/destructors on OpenMP
      	offload targets.
      
      gcc/fortran/ChangeLog:
      
      	* gfortran.h (gfc_option_t): Add disable_omp_is_initial_device.
      	* lang.opt (fbuiltin-): Add.
      	* options.cc (gfc_handle_option): Handle
      	-fno-builtin-omp_is_initial_device.
      	* f95-lang.cc (gfc_init_builtin_functions): Handle
      	DEF_GOMP_BUILTIN_COMPILER.
      	* trans-decl.cc (gfc_get_extern_function_decl): Add code to use
      	DEF_GOMP_BUILTIN_COMPILER for 'omp_is_initial_device'.
      
      libgomp/ChangeLog:
      
      	* testsuite/libgomp.c++/static-aggr-constructor-destructor-1.C: New test.
      	* testsuite/libgomp.c++/static-aggr-constructor-destructor-2.C: New test.
      	* testsuite/libgomp.c++/static-aggr-constructor-destructor-3.C: New test.
      	* testsuite/libgomp.c-c++-common/target-is-initial-host.c: New test.
      	* testsuite/libgomp.c-c++-common/target-is-initial-host-2.c: New test.
      	* testsuite/libgomp.fortran/target-is-initial-host.f: New test.
      	* testsuite/libgomp.fortran/target-is-initial-host.f90: New test.
      	* testsuite/libgomp.fortran/target-is-initial-host-2.f90: New test.
      
      Co-authored-by: default avatarTobias Burnus <tobias@baylibre.com>
      f1bfba3a
    • Tobias Burnus's avatar
      libgomp.c-c++-common/target-link-2.c: Fix test on multi-device systems · aa689684
      Tobias Burnus authored
      libgomp/ChangeLog:
      
      	* testsuite/libgomp.c-c++-common/target-link-2.c: Reset variable
      	value to handle multi-device tests.
      aa689684
    • GCC Administrator's avatar
      Daily bump. · b120ca0c
      GCC Administrator authored
      b120ca0c
  21. Aug 06, 2024
    • Tobias Burnus's avatar
      libgomp: Device load_image - improve minor num-funcs/vars check · 0c56fd6a
      Tobias Burnus authored
      The run time library loads the offload functions and variable and optionally
      the ICV variable and returns the number of loaded items, which has to match
      the host side. The plugin returns "+1" (since GCC 12) for the ICV variable
      entry, independently whether it was loaded or not, but the var's value
      (start == end == 0) can be used to detect when this failed.
      
      Thus, we can tighten the assert check - which this commit does together with
      making the output less surprising - and simplify the condition further below.
      
      libgomp/ChangeLog:
      
      	* target.c (gomp_load_image_to_device): Extend fatal-error message;
      	simplify a condition.
      0c56fd6a
Loading