Skip to content
Snippets Groups Projects
  1. Jul 30, 2023
  2. Jul 29, 2023
    • Tobias Burnus's avatar
      libgomp: cuda.h and omp_target_memcpy_rect cleanup · 8b9e559f
      Tobias Burnus authored
      Fixes for commit r14-2792-g25072a477a56a727b369bf9b20f4d18198ff5894
      "OpenMP: Call cuMemcpy2D/cuMemcpy3D for nvptx for omp_target_memcpy_rect",
      namely:
      
      In that commit, the code was changed to handle shared-memory devices;
      however, as pointed out, omp_target_memcpy_check already set the pointer
      to NULL in that case.  Hence, this commit reverts to the prior version.
      
      In cuda.h, it adds cuMemcpyPeer{,Async} for symmetry for cuMemcpy3DPeer
      (all currently unused) and in three structs, fixes reserved-member names
      and remove a bogus 'const' in three structs.
      
      And it changes a DLSYM to DLSYM_OPT as not all plugins support the new
      functions, yet.
      
      include/ChangeLog:
      
      	* cuda/cuda.h (CUDA_MEMCPY2D, CUDA_MEMCPY3D, CUDA_MEMCPY3D_PEER):
      	Remove bogus 'const' from 'const void *dst' and fix reserved-name
      	name in those structs.
      	(cuMemcpyPeer, cuMemcpyPeerAsync): Add.
      
      libgomp/ChangeLog:
      
      	* target.c (omp_target_memcpy_rect_worker): Undo dim=1 change for
      	GOMP_OFFLOAD_CAP_SHARED_MEM.
      	(omp_target_memcpy_rect_copy): Likewise for lock condition.
      	(gomp_load_plugin_for_device): Use DLSYM_OPT not DLSYM for
      	memcpy3d/memcpy2d.
      	* plugin/plugin-nvptx.c (GOMP_OFFLOAD_memcpy2d,
      	GOMP_OFFLOAD_memcpy3d): Use memset 0 to nullify reserved and
      	unused src/dst fields for that mem type; remove '{src,dst}LOD = 0'.
      8b9e559f
  3. Jul 27, 2023
  4. Jul 26, 2023
    • Tobias Burnus's avatar
      OpenMP: Call cuMemcpy2D/cuMemcpy3D for nvptx for omp_target_memcpy_rect · 25072a47
      Tobias Burnus authored
      When copying a 2D or 3D rectangular memmory block, the performance is
      better when using CUDA's cuMemcpy2D/cuMemcpy3D instead of copying the
      data one by one. That's what this commit does.
      
      Additionally, it permits device-to-device copies, if neccessary using a
      temporary variable on the host.
      
      include/ChangeLog:
      
      	* cuda/cuda.h (CUlimit): Add CUDA_ERROR_NOT_INITIALIZED,
      	CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_INVALID_HANDLE.
      	(CUarray, CUmemorytype, CUDA_MEMCPY2D, CUDA_MEMCPY3D,
      	CUDA_MEMCPY3D_PEER): New typdefs.
      	(cuMemcpy2D, cuMemcpy2DAsync, cuMemcpy2DUnaligned,
      	cuMemcpy3D, cuMemcpy3DAsync, cuMemcpy3DPeer,
      	cuMemcpy3DPeerAsync): New prototypes.
      
      libgomp/ChangeLog:
      
      	* libgomp-plugin.h (GOMP_OFFLOAD_memcpy2d,
      	GOMP_OFFLOAD_memcpy3d): New prototypes.
      	* libgomp.h (struct gomp_device_descr): Add memcpy2d_func
      	and memcpy3d_func.
      	* libgomp.texi (nvtpx): Document when cuMemcpy2D/cuMemcpy3D is used.
      	* oacc-host.c (memcpy2d_func, .memcpy3d_func): Init with NULL.
      	* plugin/cuda-lib.def (cuMemcpy2D, cuMemcpy2DUnaligned,
      	cuMemcpy3D): Invoke via CUDA_ONE_CALL.
      	* plugin/plugin-nvptx.c (GOMP_OFFLOAD_memcpy2d,
      	GOMP_OFFLOAD_memcpy3d): New.
      	* target.c (omp_target_memcpy_rect_worker):
      	(omp_target_memcpy_rect_check, omp_target_memcpy_rect_copy):
      	Permit all device-to-device copyies; invoke new plugins for
      	2D and 3D copying when available.
      	(gomp_load_plugin_for_device): DLSYM the new plugin functions.
      	* testsuite/libgomp.c/target-12.c: Fix dimension bug.
      	* testsuite/libgomp.fortran/target-12.f90: Likewise.
      	* testsuite/libgomp.fortran/target-memcpy-rect-1.f90: New test.
      25072a47
  5. Jun 13, 2023
  6. Jun 12, 2023
    • Tobias Burnus's avatar
      OpenMP: Cleanups related to the 'present' modifier · 38944ec2
      Tobias Burnus authored
      Reduce number of enum values passed to libgomp as
      GOMP_MAP_PRESENT_{TO,TOFROM,FROM,ALLOC} have the same semantic as
      GOMP_MAP_FORCE_PRESENT (i.e. abort if not present, otherwise ignore);
      that's different to GOMP_MAP_ALWAYS_PRESENT_{TO,TOFROM,FROM} which also
      abort if not present but copy data when present. This is is a follow-up to
      the commit r14-1579-g4ede915d5dde93 done 6 days ago.
      
      Additionally, the commit improves a libgomp run-time and a C/C++ compile-time
      error wording and extends testcases a tiny bit.
      
      gcc/c/ChangeLog:
      
      	* c-parser.cc (c_parser_omp_clause_map): Reword error message for
      	clearness especially with 'omp target (enter/exit) data.'
      
      gcc/cp/ChangeLog:
      
      	* parser.cc (cp_parser_omp_clause_map): Reword error message for
      	clearness especially with 'omp target (enter/exit) data.'
      	* semantics.cc (handle_omp_array_sections): Handle
      	GOMP_MAP_{ALWAYS_,}PRESENT_{TO,TOFROM,FROM,ALLOC} enum values.
      
      gcc/ChangeLog:
      
      	* gimplify.cc (gimplify_adjust_omp_clauses_1): Use
      	GOMP_MAP_FORCE_PRESENT for 'present alloc' implicit mapping.
      	(gimplify_adjust_omp_clauses): Change
      	GOMP_MAP_PRESENT_{TO,TOFROM,FROM,ALLOC} to the equivalent
      	GOMP_MAP_FORCE_PRESENT.
      	* omp-low.cc (lower_omp_target): Remove handling of no-longer valid
      	GOMP_MAP_PRESENT_{TO,TOFROM,FROM,ALLOC}; update map kinds used for
      	to/from clauses with present modifier.
      
      include/ChangeLog:
      
      	* gomp-constants.h (enum gomp_map_kind): Change the enum values
      	GOMP_MAP_PRESENT_{TO,TOFROM,FROM,ALLOC} to be compiler only.
      	(GOMP_MAP_PRESENT_P): Update to include also GOMP_MAP_FORCE_PRESENT.
      
      libgomp/ChangeLog:
      
      	* target.c (gomp_to_device_kind_p, gomp_map_vars_internal): Replace
      	GOMP_MAP_PRESENT_{FROM,TO,TOFROM,ACLLOC} by GOMP_MAP_FORCE_PRESENT.
      	(gomp_map_vars_internal, gomp_update): Likewise; unify and improve
      	error message.
      	* testsuite/libgomp.c-c++-common/target-present-2.c: Update for
      	changed error message.
      	* testsuite/libgomp.fortran/target-present-1.f90: Likewise.
      	* testsuite/libgomp.fortran/target-present-2.f90: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/present-1.c: Likewise.
      	* testsuite/libgomp.c-c++-common/target-present-1.c: Likewise and
      	extend testcase to check that data is copied when needed.
      	* testsuite/libgomp.c-c++-common/target-present-3.c: Likewise.
      	* testsuite/libgomp.fortran/target-present-3.f90: Likewise.
      
      gcc/testsuite/ChangeLog:
      
      	* c-c++-common/gomp/defaultmap-4.c: Update scan-tree-dump.
      	* c-c++-common/gomp/map-9.c: Likewise.
      	* gfortran.dg/gomp/defaultmap-8.f90: Likewise.
      	* gfortran.dg/gomp/map-11.f90: Likewise.
      	* gfortran.dg/gomp/target-update-1.f90: Likewise.
      	* gfortran.dg/gomp/map-12.f90: Likewise; also check original dump.
      	* c-c++-common/gomp/map-6.c: Update dg-error and also check
      	clause error with 'target (enter/exit) data'.
      38944ec2
  7. Jun 07, 2023
  8. Jun 06, 2023
    • Tobias Burnus's avatar
      openmp: Add support for the 'present' modifier · 4ede915d
      Tobias Burnus authored
      This implements support for the OpenMP 5.1 'present' modifier, which can be
      used in map clauses in the 'target', 'target data', 'target data enter' and
      'target data exit' constructs, and in the 'to' and 'from' clauses of the
      'target update' construct.  It is also supported in defaultmap.
      
      The modifier triggers a fatal runtime error if the data specified by the
      clause is not already present on the target device.  It can also be combined
      with 'always' in map clauses.
      
      2023-06-06  Kwok Cheung Yeung  <kcy@codesourcery.com>
      	    Tobias Burnus  <tobias@codesourcery.com>
      
      gcc/c/
      	* c-parser.cc (c_parser_omp_clause_defaultmap,
      	c_parser_omp_clause_map): Parse 'present'.
      	(c_parser_omp_clause_to, c_parser_omp_clause_from): Remove.
      	(c_parser_omp_clause_from_to): New; parse to/from clauses with
      	optional present modifer.
      	(c_parser_omp_all_clauses): Update call.
      	(c_parser_omp_target_data, c_parser_omp_target_enter_data,
      	c_parser_omp_target_exit_data): Handle new map enum values
      	for 'present' mapping.
      
      gcc/cp/
      	* parser.cc (cp_parser_omp_clause_defaultmap,
      	cp_parser_omp_clause_map): Parse 'present'.
      	(cp_parser_omp_clause_from_to): New; parse to/from
      	clauses with optional 'present' modifier.
      	(cp_parser_omp_all_clauses): Update call.
      	(cp_parser_omp_target_data, cp_parser_omp_target_enter_data,
      	cp_parser_omp_target_exit_data): Handle new enum value for
      	'present' mapping.
      	* semantics.cc (finish_omp_target): Likewise.
      
      gcc/fortran/
      	* dump-parse-tree.cc (show_omp_namelist): Display 'present' map
      	modifier.
      	(show_omp_clauses): Display 'present' motion modifier for 'to'
      	and 'from' clauses.
      
      	* gfortran.h (enum gfc_omp_map_op): Add entries with 'present'
      	modifiers.
      	(struct gfc_omp_namelist): Add 'present_modifer'.
      	* openmp.cc (gfc_match_motion_var_list): New, handles optional
      	'present' modifier for to/from clauses.
      	(gfc_match_omp_clauses): Call it for to/from clauses; parse 'present'
      	in defaultmap and map clauses.
      	(resolve_omp_clauses): Allow 'present' modifiers on 'target',
      	'target data', 'target enter' and 'target exit'	directives.
      	* trans-openmp.cc (gfc_trans_omp_clauses): Apply 'present' modifiers
      	to tree node for 'map', 'to' and 'from'	clauses.  Apply 'present' for
      	defaultmap.
      
      gcc/
      	* gimplify.cc (omp_notice_variable): Apply GOVD_MAP_ALLOC_ONLY flag
      	and defaultmap flags if the defaultmap has GOVD_MAP_FORCE_PRESENT flag
      	set.
      	(omp_get_attachment): Handle map clauses with 'present' modifier.
      	(omp_group_base): Likewise.
      	(gimplify_scan_omp_clauses): Reorder present maps to come first.
      	Set GOVD flags for present defaultmaps.
      	(gimplify_adjust_omp_clauses_1): Set map kind for present defaultmaps.
      	* omp-low.cc (scan_sharing_clauses): Handle 'always, present' map
      	clauses.
      	(lower_omp_target): Handle map clauses with 'present' modifier.
      	Handle 'to' and 'from' clauses with 'present'.
      	* tree-core.h (enum omp_clause_defaultmap_kind): Add
      	OMP_CLAUSE_DEFAULTMAP_PRESENT defaultmap kind.
      	* tree-pretty-print.cc (dump_omp_clause): Handle 'map', 'to' and
      	'from' clauses with 'present' modifier.  Handle present defaultmap.
      	* tree.h (OMP_CLAUSE_MOTION_PRESENT): New #define.
      
      include/
      	* gomp-constants.h (GOMP_MAP_FLAG_SPECIAL_5): New.
      	(GOMP_MAP_FLAG_FORCE): Redefine.
      	(GOMP_MAP_FLAG_PRESENT, GOMP_MAP_FLAG_ALWAYS_PRESENT): New.
      	(enum gomp_map_kind): Add map kinds with 'present' modifiers.
      	(GOMP_MAP_COPY_TO_P, GOMP_MAP_COPY_FROM_P): Evaluate to true for
      	map variants with 'present'
      	(GOMP_MAP_ALWAYS_TO_P, GOMP_MAP_ALWAYS_FROM_P): Evaluate to true
      	for map variants with 'always, present' modifiers.
      	(GOMP_MAP_ALWAYS): Redefine.
      	(GOMP_MAP_FORCE_P, GOMP_MAP_PRESENT_P): New.
      
      libgomp/
      	* libgomp.texi (OpenMP 5.1 Impl. status): Set 'present' support for
      	defaultmap to 'Y', add 'Y' entry for 'present' on to/from/map clauses.
      	* target.c (gomp_to_device_kind_p): Add map kinds with 'present'
      	modifier.
      	(gomp_map_vars_existing): Use new GOMP_MAP_FORCE_P macro.
      	(gomp_map_vars_internal, gomp_update, gomp_target_rev):
      	Emit runtime error if memory region not present.
      	* testsuite/libgomp.c-c++-common/target-present-1.c: New test.
      	* testsuite/libgomp.c-c++-common/target-present-2.c: New test.
      	* testsuite/libgomp.c-c++-common/target-present-3.c: New test.
      	* testsuite/libgomp.fortran/target-present-1.f90: New test.
      	* testsuite/libgomp.fortran/target-present-2.f90: New test.
      	* testsuite/libgomp.fortran/target-present-3.f90: New test.
      
      gcc/testsuite/
      
      	* c-c++-common/gomp/map-6.c: Update dg-error, extend to test for
      	duplicated 'present' and extend scan-dump tests for 'present'.
      	* gfortran.dg/gomp/defaultmap-1.f90: Update dg-error.
      	* gfortran.dg/gomp/map-7.f90: Extend parse and dump test for
      	'present'.
      	* gfortran.dg/gomp/map-8.f90: Extend for duplicate 'present'
      	modifier checking.
      	* c-c++-common/gomp/defaultmap-4.c: New test.
      	* c-c++-common/gomp/map-9.c: New test.
      	* c-c++-common/gomp/target-update-1.c: New test.
      	* gfortran.dg/gomp/defaultmap-8.f90: New test.
      	* gfortran.dg/gomp/map-11.f90: New test.
      	* gfortran.dg/gomp/map-12.f90: New test.
      	* gfortran.dg/gomp/target-update-1.f90: New test.
      4ede915d
  9. May 12, 2023
  10. May 11, 2023
    • Joseph Myers's avatar
      Implement LDPT_REGISTER_CLAIM_FILE_HOOK_V2 linker plugin hook [PR109128] · c49d51fa
      Joseph Myers authored
      This is one part of the fix for PR109128, along with a corresponding
      binutils's linker change.  Without this patch, what happens in the
      linker, when an unused object in a .a file has offload data, is that
      elf_link_is_defined_archive_symbol calls bfd_link_plugin_object_p,
      which ends up calling the plugin's claim_file_handler, which then
      records the object as one with offload data. That is, the linker never
      decides to use the object in the first place, but use of this _p
      interface (called as part of trying to decide whether to use the
      object) results in the plugin deciding to use its offload data (and a
      consequent mismatch in the offload data present at runtime).
      
      The new hook allows the linker plugin to distinguish calls to
      claim_file_handler that know the object is being used by the linker
      (from ldmain.c:add_archive_element), from calls that don't know it's
      being used by the linker (from elf_link_is_defined_archive_symbol); in
      the latter case, the plugin should avoid recording the object as one
      with offload data.
      
      	PR middle-end/109128
      
      	include/
      	* plugin-api.h (ld_plugin_claim_file_handler_v2)
      	(ld_plugin_register_claim_file_v2)
      	(LDPT_REGISTER_CLAIM_FILE_HOOK_V2): New.
      	(struct ld_plugin_tv): Add tv_register_claim_file_v2.
      
      	lto-plugin/
      	* lto-plugin.c (register_claim_file_v2): New.
      	(claim_file_handler_v2): New.
      	(claim_file_handler): Wrap claim_file_handler_v2.
      	(onload): Handle LDPT_REGISTER_CLAIM_FILE_HOOK_V2.
      c49d51fa
  11. Apr 29, 2023
  12. Apr 28, 2023
    • Roger Sayle's avatar
      Synchronize include/ctf.h with upstream binutils/libctf. · fde00589
      Roger Sayle authored
      This patch updates include/ctf.h to match the current libctf version in
      binutils' include/.  I recently attempted to build a uber tree (following
      some notes that are so old they used CVS) and noticed that binutils won't
      build with gcc's top-level include, due to CTF_F_IDXSORTED not being
      defined in ctf.h.
      
      2023-04-28  Roger Sayle  <roger@nextmovesoftware.com>
      
      include/ChangeLog
      	* ctf.h: Import latest version from binutils/libctf.
      fde00589
  13. Apr 20, 2023
  14. Apr 19, 2023
    • Max Filippov's avatar
      gcc: xtensa: add data alignment properties to dynconfig · ec9b3087
      Max Filippov authored
      gcc/
      	* config/xtensa/xtensa-dynconfig.cc (xtensa_get_config_v4): New
      	function.
      
      include/
      	* xtensa-dynconfig.h (xtensa_config_v4): New struct.
      	(XCHAL_DATA_WIDTH, XCHAL_UNALIGNED_LOAD_EXCEPTION)
      	(XCHAL_UNALIGNED_STORE_EXCEPTION, XCHAL_UNALIGNED_LOAD_HW)
      	(XCHAL_UNALIGNED_STORE_HW, XTENSA_CONFIG_V4_ENTRY_LIST): New
      	definitions.
      	(XTENSA_CONFIG_INSTANCE_LIST): Add xtensa_config_v4 instance.
      	(XTENSA_CONFIG_ENTRY_LIST): Add XTENSA_CONFIG_V4_ENTRY_LIST.
      ec9b3087
  15. Feb 28, 2023
  16. Feb 27, 2023
    • Max Filippov's avatar
      gcc: xtensa: add XCHAL_HAVE_{CLAMPS,DEPBITS,EXCLUSIVE,XEA3} to dynconfig · 999b7aab
      Max Filippov authored
      gcc/
      	* config/xtensa/xtensa-dynconfig.cc (xtensa_get_config_v2)
      	(xtensa_get_config_v3): New functions.
      
      include/
      	* xtensa-dynconfig.h (xtensa_config_v3): New struct.
      	(xtensa_get_config_v3): New declaration.
      	(XCHAL_HAVE_CLAMPS, XCHAL_HAVE_DEPBITS, XCHAL_HAVE_EXCLUSIVE)
      	(XCHAL_HAVE_XEA3, XTENSA_CONFIG_V3_ENTRY_LIST): New definitions.
      	(XTENSA_CONFIG_INSTANCE_LIST): Add xtensa_config_v3 instance.
      	(XTENSA_CONFIG_ENTRY_LIST): Add XTENSA_CONFIG_V3_ENTRY_LIST.
      999b7aab
  17. Feb 03, 2023
  18. Feb 02, 2023
    • Andrew Stubbs's avatar
      amdgcn, libgomp: Manually allocated stacks · f6fff8a6
      Andrew Stubbs authored
      Switch from using stacks in the "private segment" to using a memory block
      allocated on the host side.  The primary reason is to permit the reverse
      offload implementation to access values located on the device stack, but
      there may also be performance benefits, especially with repeated kernel
      invocations.
      
      This implementation unifies the stacks with the "team arena" optimization
      feature, and now allows both to have run-time configurable sizes.
      
      A new ABI is needed, so all libraries must be rebuilt, and newlib must be
      version 4.3.0.20230120 or newer.
      
      gcc/ChangeLog:
      
      	* config/gcn/gcn-run.cc: Include libgomp-gcn.h.
      	(struct kernargs): Replace the common content with kernargs_abi.
      	(struct heap): Delete.
      	(main): Read GCN_STACK_SIZE envvar.
      	Allocate space for the device stacks.
      	Write the new kernargs fields.
      	* config/gcn/gcn.cc (gcn_option_override): Remove stack_size_opt.
      	(default_requested_args): Remove PRIVATE_SEGMENT_BUFFER_ARG and
      	PRIVATE_SEGMENT_WAVE_OFFSET_ARG.
      	(gcn_addr_space_convert): Mask the QUEUE_PTR_ARG content.
      	(gcn_expand_prologue): Move the TARGET_PACKED_WORK_ITEMS to the top.
      	Set up the stacks from the values in the kernargs, not private.
      	(gcn_expand_builtin_1): Match the stack configuration in the prologue.
      	(gcn_hsa_declare_function_name): Turn off the private segment.
      	(gcn_conditional_register_usage): Ensure QUEUE_PTR is fixed.
      	* config/gcn/gcn.h (FIXED_REGISTERS): Fix the QUEUE_PTR register.
      	* config/gcn/gcn.opt (mstack-size): Change the description.
      
      include/ChangeLog:
      
      	* gomp-constants.h (GOMP_VERSION_GCN): Bump.
      
      libgomp/ChangeLog:
      
      	* config/gcn/libgomp-gcn.h (DEFAULT_GCN_STACK_SIZE): New define.
      	(DEFAULT_TEAM_ARENA_SIZE): New define.
      	(struct heap): Move to this file.
      	(struct kernargs_abi): Likewise.
      	* config/gcn/team.c (gomp_gcn_enter_kernel): Use team arena size from
      	the kernargs.
      	* libgomp.h: Include libgomp-gcn.h.
      	(TEAM_ARENA_SIZE): Remove.
      	(team_malloc): Update the error message.
      	* plugin/plugin-gcn.c (struct kernargs): Move common content to
      	struct kernargs_abi.
      	(struct agent_info): Rename team arenas to ephemeral memories.
      	(struct team_arena_list): Rename ....
      	(struct ephemeral_memories_list): to this.
      	(struct heap): Delete.
      	(team_arena_size): New variable.
      	(stack_size): New variable.
      	(print_kernel_dispatch): Update debug messages.
      	(init_environment_variables): Read GCN_TEAM_ARENA_SIZE.
      	Read GCN_STACK_SIZE.
      	(get_team_arena): Rename ...
      	(configure_ephemeral_memories): ... to this, and set up stacks.
      	(release_team_arena): Rename ...
      	(release_ephemeral_memories): ... to this.
      	(destroy_team_arenas): Rename ...
      	(destroy_ephemeral_memories): ... to this.
      	(create_kernel_dispatch): Add num_threads parameter.
      	Adjust for kernargs_abi refactor and ephemeral memories.
      	(release_kernel_dispatch): Adjust for ephemeral memories.
      	(run_kernel): Pass thread-count to create_kernel_dispatch.
      	(GOMP_OFFLOAD_init_device): Adjust for ephemeral memories.
      	(GOMP_OFFLOAD_fini_device): Adjust for ephemeral memories.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.c-torture/execute/pr47237.c: Xfail on amdgcn.
      	* gcc.dg/builtin-apply3.c: Xfail for amdgcn.
      	* gcc.dg/builtin-apply4.c: Xfail for amdgcn.
      	* gcc.dg/torture/stackalign/builtin-apply-3.c: Xfail for amdgcn.
      	* gcc.dg/torture/stackalign/builtin-apply-4.c: Xfail for amdgcn.
      f6fff8a6
  19. Jan 16, 2023
  20. Dec 22, 2022
  21. Dec 21, 2022
    • Jason Merrill's avatar
      c++: source position of lambda captures [PR84471] · 302485a7
      Jason Merrill authored
      If the DECL_VALUE_EXPR of a VAR_DECL has EXPR_LOCATION set, then any use of
      that variable looks like it has that location, which leads to the debugger
      jumping back and forth for both lambdas and structured bindings.
      
      Rather than fix all the uses, it seems simplest to remove any EXPR_LOCATION
      when setting DECL_VALUE_EXPR.  So the cp/ hunks aren't necessary, but they
      avoid the need to unshare to remove the location.
      
      	PR c++/84471
      	PR c++/107504
      
      gcc/cp/ChangeLog:
      
      	* coroutines.cc (transform_local_var_uses): Don't
      	specify a location for DECL_VALUE_EXPR.
      	* decl.cc (cp_finish_decomp): Likewise.
      
      gcc/ChangeLog:
      
      	* fold-const.cc (protected_set_expr_location_unshare): Not static.
      	* tree.h: Declare it.
      	* tree.cc (decl_value_expr_insert): Use it.
      
      include/ChangeLog:
      
      	* ansidecl.h (ATTRIBUTE_WARN_UNUSED_RESULT): Add __.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/tree-ssa/value-expr1.C: New test.
      	* g++.dg/tree-ssa/value-expr2.C: New test.
      	* g++.dg/analyzer/pr93212.C: Move warning.
      302485a7
  22. Dec 15, 2022
  23. Dec 14, 2022
    • David Faust's avatar
      btf: correct generation for extern funcs [PR106773] · 70b30304
      David Faust authored
      The eBPF loader expects to find entries for functions declared as extern
      in the corresponding BTF_KIND_DATASEC record, but we were not generating
      these entries.
      
      This patch adds support for the 'extern' linkage of function types in
      BTF, and creates entries for for them BTF_KIND_DATASEC records as needed.
      
      	PR target/106773
      
      gcc/
      
      	* btfout.cc (get_section_name): New function.
      	(btf_collect_datasec): Use it here. Process functions, marking them
      	'extern' and generating DATASEC entries for them as appropriate. Move
      	creation of BTF_KIND_FUNC records to here...
      	(btf_dtd_emit_preprocess_cb): ... from here.
      
      gcc/testsuite/
      
      	* gcc.dg/debug/btf/btf-datasec-2.c: New test.
      	* gcc.dg/debug/btf/btf-function-6.c: New test.
      
      include/
      
      	* btf.h (enum btf_func_linkage): New.
      	(struct btf_var_secinfo): Update comments with notes about extern
      	functions.
      70b30304
    • David Faust's avatar
      btf: add 'extern' linkage for variables [PR106773] · 2bce22e8
      David Faust authored
      Add support for the 'extern' linkage value for BTF_KIND_VAR records,
      which is used for variables declared as extern in the source file.
      
      This also fixes a bug with BTF generation for extern variables which
      have both a non-defining declaration and a defining declaration in the
      same CU.
      
      	PR target/106773
      
      gcc/
      
      	* btfout.cc (btf_collect_datasec): Mark extern variables as such.
      	(btf_dvd_emit_preprocess_cb): Skip non-defining extern variable decl
      	if there is a defining decl for the same variable.
      	(btf_asm_varent): Accomodate 'extern' linkage.
      
      gcc/testsuite/
      
      	* gcc.dg/debug/btf/btf-variables-4.c: New test.
      	* gcc.dg/debug/btf/btf-variables-5.c: New test.
      
      include/
      
      	* btf.h (enum btf_var_linkage): New.
      	(struct btf_var): Update comment to note 'extern' linkage.
      2bce22e8
  24. Dec 08, 2022
  25. Dec 07, 2022
    • Max Filippov's avatar
      gcc: xtensa: allow dynamic configuration · ecb575d0
      Max Filippov authored
      Import include/xtensa-dynconfig.h that defines XCHAL_* macros as fields
      of a structure returned from the xtensa_get_config_v<x> function call.
      Define that structure and fill it with default parameter values
      specified in the include/xtensa-config.h.
      Define reusable function xtensa_load_config that tries to load
      configuration and return an address of an exported object from it.
      Define the function xtensa_get_config_v1 that uses xtensa_load_config
      to get structure xtensa_config_v1, either dynamically configured or the
      default.
      
      Provide essential XCHAL_* configuration parameters as __XCHAL_* built-in
      macros. This way it will be possible to use them in libgcc and libc
      without need to patch libgcc or libc source for the specific xtensa core
      configuration.
      
      gcc/
      	* config.gcc (xtensa*-*-*): Add xtensa-dynconfig.o to extra_objs.
      	* config/xtensa/t-xtensa (TM_H): Add xtensa-dynconfig.h.
      	(xtensa-dynconfig.o): New rule.
      	* config/xtensa/xtensa-dynconfig.c: New file.
      	* config/xtensa/xtensa-protos.h (xtensa_get_config_strings): New
      	declaration.
      	* config/xtensa/xtensa.h (xtensa-config.h): Replace #include
      	with xtensa-dynconfig.h
      	(XCHAL_HAVE_MUL32_HIGH, XCHAL_HAVE_RELEASE_SYNC)
      	(XCHAL_HAVE_S32C1I, XCHAL_HAVE_THREADPTR)
      	(XCHAL_HAVE_FP_POSTINC): Drop definitions.
      	(TARGET_DIV32): Replace with __XCHAL_HAVE_DIV32.
      	(TARGET_CPU_CPP_BUILTINS): Add new 'builtin' variable and loop
      	through string array returned by the xtensa_get_config_strings
      	function call.
      
      include/
      	* xtensa-dynconfig.h: New file.
      ecb575d0
  26. Nov 16, 2022
  27. Nov 15, 2022
    • Nathan Sidwell's avatar
      demangler: Templated lambda demangling · 46c3d9c8
      Nathan Sidwell authored
      Templated lambdas have a template-head, which is part of their
      signature.  GCC ABI 18 mangles that into the lambda name.  This adds
      support to the demangler.  We have to introduce artificial template
      parameter names, as we need to refer to them from later components of
      the lambda signature. We use $T:n, $N:n and $TT:n for type, non-type
      and template parameters.  Non-type parameter names are not shown in
      the strictly correct location -- for instance 'int (&NT) ()' would be
      shown as 'int (&) $N:n'.  That's unfortunate, but an orthogonal issue.
      The 'is_lambda_arg' field is now repurposed as indicating the number
      of explicit template parameters (1-based).
      
      	include/
      	* demangle.h (enum demangle_component_type): Add
      	DEMANGLE_COMPONENT_TEMPLATE_HEAD,
      	DEMANGLE_COMPONENT_TEMPLATE_TYPE_PARM,
      	DEMANGLE_COMPONENT_TEMPLATE_NON_TYPE_PARM,
      	DEMANGLE_COMPONENT_TEMPLATE_TEMPLATE_PARM,
      	DEMANGLE_COMPONENT_TEMPLATE_PACK_PARM.
      	libiberty/
      	* cp-demangle.c (struct d_print_info): Rename is_lambda_arg to
      	lambda_tpl_parms.  Augment semantics.
      	(d_make_comp): Add checks for new components.
      	(d_template_parm, d_template_head): New.
      	(d_lambda): Add templated lambda support.
      	(d_print_init): Adjust.
      	(d_print_lambda_parm_name): New.
      	(d_print_comp_inner): Support templated lambdas,
      	* testsuite/demangle-expected: Add testcases.
      46c3d9c8
  28. Nov 06, 2022
  29. Nov 04, 2022
    • Thomas Schwinge's avatar
      Remove support for Intel MIC offloading · e4cba494
      Thomas Schwinge authored
      ... after its deprecation in GCC 12.
      
      	* Makefile.def: Remove module 'liboffloadmic'.
      	* Makefile.in: Regenerate.
      	* configure.ac: Remove 'liboffloadmic' handling.
      	* configure: Regenerate.
      	contrib/
      	* gcc-changelog/git_commit.py (default_changelog_locations):
      	Remove 'liboffloadmic'.
      	* gcc_update (files_and_dependencies): Remove 'liboffloadmic'
      	files.
      	* update-copyright.py (GCCCmdLine): Remove 'liboffloadmic'
      	comment.
      	gcc/
      	* config.gcc [target *-intelmic-* | *-intelmicemul-*]: Remove.
      	* config/i386/i386-options.cc (ix86_omp_device_kind_arch_isa)
      	[ACCEL_COMPILER]: Remove.
      	* config/i386/intelmic-mkoffload.cc: Remove.
      	* config/i386/intelmic-offload.h: Likewise.
      	* config/i386/t-intelmic: Likewise.
      	* config/i386/t-omp-device: Likewise.
      	* configure.ac [target *-intelmic-* | *-intelmicemul-*]: Remove.
      	* configure: Regenerate.
      	* doc/install.texi (--enable-offload-targets=[...]): Update.
      	* doc/sourcebuild.texi: Remove 'liboffloadmic' documentation.
      	include/
      	* gomp-constants.h (GOMP_DEVICE_INTEL_MIC): Comment out.
      	(GOMP_VERSION_INTEL_MIC): Remove.
      	libgomp/
      	* libgomp-plugin.h (OFFLOAD_TARGET_TYPE_INTEL_MIC): Remove.
      	* libgomp.texi (OpenMP Context Selectors): Remove Intel MIC
      	documentation.
      	* plugin/configfrag.ac <enable_offload_targets>
      	[*-intelmic-* | *-intelmicemul-*]: Remove.
      	* configure: Regenerate.
      	* testsuite/lib/libgomp.exp (libgomp_init): Remove 'liboffloadmic'
      	handling.
      	(offload_target_to_openacc_device_type)
      	[$offload_target = *-intelmic*]: Remove.
      	(check_effective_target_offload_device_intel_mic)
      	(check_effective_target_offload_device_any_intel_mic): Remove.
      	* testsuite/libgomp.c-c++-common/on_device_arch.h
      	(device_arch_intel_mic, on_device_arch_intel_mic, any_device_arch)
      	(any_device_arch_intel_mic): Remove.
      	* testsuite/libgomp.c-c++-common/target-45.c: Remove
      	'offload_device_any_intel_mic' XFAIL.
      	* testsuite/libgomp.fortran/target10.f90: Likewise.
      	liboffloadmic/
      	* ChangeLog: Remove.
      	* Makefile.am: Likewise.
      	* Makefile.in: Likewise.
      	* aclocal.m4: Likewise.
      	* configure: Likewise.
      	* configure.ac: Likewise.
      	* configure.tgt: Likewise.
      	* doc/doxygen/config: Likewise.
      	* doc/doxygen/header.tex: Likewise.
      	* include/coi/common/COIEngine_common.h: Likewise.
      	* include/coi/common/COIEvent_common.h: Likewise.
      	* include/coi/common/COIMacros_common.h: Likewise.
      	* include/coi/common/COIPerf_common.h: Likewise.
      	* include/coi/common/COIResult_common.h: Likewise.
      	* include/coi/common/COISysInfo_common.h: Likewise.
      	* include/coi/common/COITypes_common.h: Likewise.
      	* include/coi/sink/COIBuffer_sink.h: Likewise.
      	* include/coi/sink/COIPipeline_sink.h: Likewise.
      	* include/coi/sink/COIProcess_sink.h: Likewise.
      	* include/coi/source/COIBuffer_source.h: Likewise.
      	* include/coi/source/COIEngine_source.h: Likewise.
      	* include/coi/source/COIEvent_source.h: Likewise.
      	* include/coi/source/COIPipeline_source.h: Likewise.
      	* include/coi/source/COIProcess_source.h: Likewise.
      	* liboffloadmic_host.spec.in: Likewise.
      	* liboffloadmic_target.spec.in: Likewise.
      	* plugin/Makefile.am: Likewise.
      	* plugin/Makefile.in: Likewise.
      	* plugin/aclocal.m4: Likewise.
      	* plugin/configure: Likewise.
      	* plugin/configure.ac: Likewise.
      	* plugin/libgomp-plugin-intelmic.cpp: Likewise.
      	* plugin/offload_target_main.cpp: Likewise.
      	* runtime/cean_util.cpp: Likewise.
      	* runtime/cean_util.h: Likewise.
      	* runtime/coi/coi_client.cpp: Likewise.
      	* runtime/coi/coi_client.h: Likewise.
      	* runtime/coi/coi_server.cpp: Likewise.
      	* runtime/coi/coi_server.h: Likewise.
      	* runtime/compiler_if_host.cpp: Likewise.
      	* runtime/compiler_if_host.h: Likewise.
      	* runtime/compiler_if_target.cpp: Likewise.
      	* runtime/compiler_if_target.h: Likewise.
      	* runtime/dv_util.cpp: Likewise.
      	* runtime/dv_util.h: Likewise.
      	* runtime/emulator/coi_common.h: Likewise.
      	* runtime/emulator/coi_device.cpp: Likewise.
      	* runtime/emulator/coi_device.h: Likewise.
      	* runtime/emulator/coi_host.cpp: Likewise.
      	* runtime/emulator/coi_host.h: Likewise.
      	* runtime/emulator/coi_version_asm.h: Likewise.
      	* runtime/emulator/coi_version_linker_script.map: Likewise.
      	* runtime/liboffload_error.c: Likewise.
      	* runtime/liboffload_error_codes.h: Likewise.
      	* runtime/liboffload_msg.c: Likewise.
      	* runtime/liboffload_msg.h: Likewise.
      	* runtime/mic_lib.f90: Likewise.
      	* runtime/offload.h: Likewise.
      	* runtime/offload_common.cpp: Likewise.
      	* runtime/offload_common.h: Likewise.
      	* runtime/offload_engine.cpp: Likewise.
      	* runtime/offload_engine.h: Likewise.
      	* runtime/offload_env.cpp: Likewise.
      	* runtime/offload_env.h: Likewise.
      	* runtime/offload_host.cpp: Likewise.
      	* runtime/offload_host.h: Likewise.
      	* runtime/offload_iterator.h: Likewise.
      	* runtime/offload_omp_host.cpp: Likewise.
      	* runtime/offload_omp_target.cpp: Likewise.
      	* runtime/offload_orsl.cpp: Likewise.
      	* runtime/offload_orsl.h: Likewise.
      	* runtime/offload_table.cpp: Likewise.
      	* runtime/offload_table.h: Likewise.
      	* runtime/offload_target.cpp: Likewise.
      	* runtime/offload_target.h: Likewise.
      	* runtime/offload_target_main.cpp: Likewise.
      	* runtime/offload_timer.h: Likewise.
      	* runtime/offload_timer_host.cpp: Likewise.
      	* runtime/offload_timer_target.cpp: Likewise.
      	* runtime/offload_trace.cpp: Likewise.
      	* runtime/offload_trace.h: Likewise.
      	* runtime/offload_util.cpp: Likewise.
      	* runtime/offload_util.h: Likewise.
      	* runtime/ofldbegin.cpp: Likewise.
      	* runtime/ofldend.cpp: Likewise.
      	* runtime/orsl-lite/include/orsl-lite.h: Likewise.
      	* runtime/orsl-lite/lib/orsl-lite.c: Likewise.
      	* runtime/orsl-lite/version.txt: Likewise.
      e4cba494
  30. Nov 01, 2022
  31. Oct 31, 2022
    • Guillermo E. Martinez's avatar
      btf: Add support to BTF_KIND_ENUM64 type · 8422861b
      Guillermo E. Martinez authored
      BTF supports 64-bits enumerators with following encoding:
      
        struct btf_type:
          name_off: 0 or offset to a valid C identifier
          info.kind_flag: 0 for unsigned, 1 for signed
          info.kind: BTF_KIND_ENUM64
          info.vlen: number of enum values
          size: 1/2/4/8
      
      The btf_type is followed by info.vlen number of:
      
          struct btf_enum64
          {
            uint32_t name_off;   /* Offset in string section of enumerator name.  */
            uint32_t val_lo32;   /* lower 32-bit value for a 64-bit value Enumerator */
            uint32_t val_hi32;   /* high 32-bit value for a 64-bit value Enumerator */
          };
      
      So, a new btf_enum64 structure was added to represent BTF_KIND_ENUM64
      and a new field dtd_enum_unsigned in ctf_dtdef structure to distinguish
      when CTF enum is a signed or unsigned type, later that information is
      used to encode the BTF enum type.
      
      gcc/ChangeLog:
      
      	* btfout.cc (btf_calc_num_vbytes): Compute enumeration size depending of
      	enumerator type btf_enum{,64}.
      	(btf_asm_type): Update btf_kflag according to enumeration type sign
      	using dtd_enum_unsigned field for both:  BTF_KIND_ENUM{,64}.
      	(btf_asm_enum_const): New argument to represent the size of
      	the BTF enum type, writing the enumerator constant value for
      	32 bits, if it's 64 bits then explicitly writes lower 32-bits
      	value and higher 32-bits value.
      	(output_asm_btf_enum_list): Add enumeration size argument.
      	* ctfc.cc (ctf_add_enum): New argument to represent CTF enum
      	basic information.
      	(ctf_add_generic): Use of ei_{name. size, unsigned} to build the
      	dtd structure containing enumeration information.
      	(ctf_add_enumerator): Update comment mention support for BTF
      	enumeration in 64-bits.
      	* dwarf2ctf.cc (gen_ctf_enumeration_type): Extract signedness
      	for enumeration type and use it in ctf_add_enum.
      	* ctfc.h (ctf_dmdef): Update dmd_value to HOST_WIDE_INT to allow
      	use 32/64 bits enumerators.
      	information.
      	(ctf_dtdef): New field to describe enum signedness.
      
      include/
      	* btf.h (btf_enum64): Add new definition and new symbolic
      	constant to BTF_KIND_ENUM64 and BTF_KF_ENUM_{UN,}SIGNED.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.dg/debug/btf/btf-enum-1.c: Update testcase, with correct
      	info.kflags encoding.
      	* gcc.dg/debug/btf/btf-enum64-1.c: New testcase.
      8422861b
    • Lulu Cheng's avatar
      Libvtv: Add loongarch support. · 27b9e115
      Lulu Cheng authored
      
      The loongarch64 specification permits page sizes of 4KiB, 16KiB and 64KiB,
      but only 16KiB pages are supported for now.
      
      Co-Authored-By: default avatarqijingwen <qijingwen@loongson.cn>
      
      include/ChangeLog:
      
      	* vtv-change-permission.h (defined): Determines whether the macro
      	__loongarch_lp64 is defined
      	(VTV_PAGE_SIZE): Set VTV_PAGE_SIZE to 16KiB for loongarch64.
      
      libvtv/ChangeLog:
      
      	* configure.tgt: Add loongarch support.
      27b9e115
  32. Oct 25, 2022
  33. Oct 24, 2022
    • Tobias Burnus's avatar
      libgomp/nvptx: Prepare for reverse-offload callback handling · 131d18e9
      Tobias Burnus authored
      This patch adds a stub 'gomp_target_rev' in the host's target.c, which will
      later handle the reverse offload.
      For nvptx, it adds support for forwarding the offload gomp_target_ext call
      to the host by setting values in a struct on the device and querying it on
      the host - invoking gomp_target_rev on the result.
      
      include/ChangeLog:
      
      	* cuda/cuda.h (enum CUdevice_attribute): Add
      	CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING.
      	(CU_MEMHOSTALLOC_DEVICEMAP): Define.
      	(cuMemHostAlloc): Add prototype.
      
      libgomp/ChangeLog:
      
      	* config/nvptx/icv-device.c (GOMP_DEVICE_NUM_VAR): Remove
      	'static' for this variable.
      	* config/nvptx/libgomp-nvptx.h: New file.
      	* config/nvptx/target.c: Include it.
      	(GOMP_ADDITIONAL_ICVS): Declare extern var.
      	(GOMP_REV_OFFLOAD_VAR): Declare var.
      	(GOMP_target_ext): Handle reverse offload.
      	* libgomp-plugin.h (GOMP_PLUGIN_target_rev): New prototype.
      	* libgomp-plugin.c (GOMP_PLUGIN_target_rev): New, call ...
      	* target.c (gomp_target_rev): ... this new stub function.
      	* libgomp.h (gomp_target_rev): Declare.
      	* libgomp.map (GOMP_PLUGIN_1.4): New; add GOMP_PLUGIN_target_rev.
      	* plugin/cuda-lib.def (cuMemHostAlloc): Add.
      	* plugin/plugin-nvptx.c: Include libgomp-nvptx.h.
      	(struct ptx_device): Add rev_data member.
      	(nvptx_open_device): Remove async_engines query, last used in
      	r10-304-g1f4c5b9b; add unified-address assert check.
      	(GOMP_OFFLOAD_get_num_devices): Claim unified address
      	support.
      	(GOMP_OFFLOAD_load_image): Free rev_fn_table if no
      	offload functions exist. Make offload var available
      	on host and device.
      	(rev_off_dev_to_host_cpy, rev_off_host_to_dev_cpy): New.
      	(GOMP_OFFLOAD_run): Handle reverse offload.
      131d18e9
  34. Oct 21, 2022
  35. Oct 20, 2022
    • Tobias Burnus's avatar
      libgomp: Add offload_device_gcn check, add requires-4a.c test · 12d9f5af
      Tobias Burnus authored
      Duplicate libgomp.c-c++-common/requires-4.c (as ...-4a.c) but
      with using a heap-allocated instead of static memory for a variable.
      
      This change and the added offload_device_gcn check prepare for
      pseudo-USM, where the device hardware cannot access all host
      memory but only managed and pinned memory; for those, requires-4.c
      will fail and the new check permits to add
        target { ! { offload_device_nvptx || offload_device_gcn } }
      to requires-4.c; however, it has not been added yet as pseuo-USM
      support is not yet on mainline. (Review is pending for the USM
      patches.)
      
      include/ChangeLog:
      
      	* gomp-constants.h (GOMP_DEVICE_HSA): Comment out unused define.
      
      libgomp/ChangeLog:
      
      	* testsuite/lib/libgomp.exp (check_effective_target_offload_device_gcn):
      	New.
      	* testsuite/libgomp.c-c++-common/on_device_arch.h (device_arch_gcn,
      	on_device_arch_gcn): New.
      	* testsuite/libgomp.c-c++-common/requires-4a.c: New test; copied from
      	requires-4.c but using heap-allocated memory.
      12d9f5af
  36. Oct 14, 2022
  37. Oct 13, 2022
    • Xi Ruoyao's avatar
      LoongArch: implement count_{leading,trailing}_zeros · 6f653a2c
      Xi Ruoyao authored
      LoongArch always support clz and ctz instructions, so we can always use
      __builtin_{clz,ctz} for count_{leading,trailing}_zeros.  This improves
      the code of libgcc, and also benefits Glibc once we merge longlong.h
      there.
      
      Bootstrapped and regtested on loongarch64-linux-gnu.
      
      include/ChangeLog:
      
      	* longlong.h [__loongarch__] (count_leading_zeros): Define.
      	[__loongarch__] (count_trailing_zeros): Likewise.
      	[__loongarch__] (COUNT_LEADING_ZEROS_0): Likewise.
      6f653a2c
  38. Sep 28, 2022
Loading