Skip to content
Snippets Groups Projects
  1. Nov 28, 2023
    • Jakub Jelinek's avatar
      libiberty: Use x86 HW optimized sha1 · bf4f40cc
      Jakub Jelinek authored
      Nick has approved this patch (+ small ld change to use it for --build-id=),
      so I'm commiting it to GCC as master as well.
      
      If anyone from ARM would be willing to implement it similarly with
      vsha1{cq,mq,pq,h,su0q,su1q}_u32 intrinsics, it could be a useful linker
      speedup on those hosts as well, the intent in sha1.c was that
      sha1_hw_process_bytes, sha1_hw_process_block functions
      would be defined whenever
      defined (HAVE_X86_SHA1_HW_SUPPORT) || defined (HAVE_WHATEVERELSE_SHA1_HW_SUPPORT)
      but the body of sha1_hw_process_block and sha1_choose_process_bytes
      would then have #elif defined (HAVE_WHATEVERELSE_SHA1_HW_SUPPORT) for
      the other arch support, similarly for any target attributes on
      sha1_hw_process_block if needed.
      
      2023-11-28  Jakub Jelinek  <jakub@redhat.com>
      
      include/
      	* sha1.h (sha1_process_bytes_fn): New typedef.
      	(sha1_choose_process_bytes): Declare.
      libiberty/
      	* configure.ac (HAVE_X86_SHA1_HW_SUPPORT): New check.
      	* sha1.c: If HAVE_X86_SHA1_HW_SUPPORT is defined, include x86intrin.h
      	and cpuid.h.
      	(sha1_hw_process_bytes, sha1_hw_process_block,
      	sha1_choose_process_bytes): New functions.
      	* config.in: Regenerated.
      	* configure: Regenerated.
      bf4f40cc
  2. Nov 08, 2023
  3. Nov 07, 2023
    • Kwok Cheung Yeung's avatar
      openmp: Add support for the 'indirect' clause in C/C++ · a49c7d31
      Kwok Cheung Yeung authored
      This adds support for the 'indirect' clause in the 'declare target'
      directive.  Functions declared as indirect may be called via function
      pointers passed from the host in offloaded code.
      
      Virtual calls to member functions via the object pointer in C++ are
      currently not supported in target regions.
      
      2023-11-07  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      gcc/c-family/
      	* c-attribs.cc (c_common_attribute_table): Add attribute for
      	indirect functions.
      	* c-pragma.h (enum parma_omp_clause): Add entry for indirect clause.
      
      gcc/c/
      	* c-decl.cc (c_decl_attributes): Add attribute for indirect
      	functions.
      	* c-lang.h (c_omp_declare_target_attr): Add indirect field.
      	* c-parser.cc (c_parser_omp_clause_name): Handle indirect clause.
      	(c_parser_omp_clause_indirect): New.
      	(c_parser_omp_all_clauses): Handle indirect clause.
      	(OMP_DECLARE_TARGET_CLAUSE_MASK): Add indirect clause to mask.
      	(c_parser_omp_declare_target): Handle indirect clause.  Emit error
      	message if device_type or indirect clauses used alone.  Emit error
      	if indirect clause used with device_type that is not 'any'.
      	(OMP_BEGIN_DECLARE_TARGET_CLAUSE_MASK): Add indirect clause to mask.
      	(c_parser_omp_begin): Handle indirect clause.
      	* c-typeck.cc (c_finish_omp_clauses): Handle indirect clause.
      
      gcc/cp/
      	* cp-tree.h (cp_omp_declare_target_attr): Add indirect field.
      	* decl2.cc (cplus_decl_attributes): Add attribute for indirect
      	functions.
      	* parser.cc (cp_parser_omp_clause_name): Handle indirect clause.
      	(cp_parser_omp_clause_indirect): New.
      	(cp_parser_omp_all_clauses): Handle indirect clause.
      	(handle_omp_declare_target_clause): Add extra parameter.  Add
      	indirect attribute for indirect functions.
      	(OMP_DECLARE_TARGET_CLAUSE_MASK): Add indirect clause to mask.
      	(cp_parser_omp_declare_target): Handle indirect clause.  Emit error
      	message if device_type or indirect clauses used alone.  Emit error
      	if indirect clause used with device_type that is not 'any'.
      	(OMP_BEGIN_DECLARE_TARGET_CLAUSE_MASK): Add indirect clause to mask.
      	(cp_parser_omp_begin): Handle indirect clause.
      	* semantics.cc (finish_omp_clauses): Handle indirect clause.
      
      gcc/
      	* lto-cgraph.cc (enum LTO_symtab_tags): Add tag for indirect
      	functions.
      	(output_offload_tables): Write indirect functions.
      	(input_offload_tables): read indirect functions.
      	* lto-section-names.h (OFFLOAD_IND_FUNC_TABLE_SECTION_NAME): New.
      	* omp-builtins.def (BUILT_IN_GOMP_TARGET_MAP_INDIRECT_PTR): New.
      	* omp-offload.cc (offload_ind_funcs): New.
      	(omp_discover_implicit_declare_target): Add functions marked with
      	'omp declare target indirect' to indirect functions list.
      	(omp_finish_file): Add indirect functions to section for offload
      	indirect functions.
      	(execute_omp_device_lower): Redirect indirect calls on target by
      	passing function pointer to BUILT_IN_GOMP_TARGET_MAP_INDIRECT_PTR.
      	(pass_omp_device_lower::gate): Run pass_omp_device_lower if
      	indirect functions are present on an accelerator device.
      	* omp-offload.h (offload_ind_funcs): New.
      	* tree-core.h (omp_clause_code): Add OMP_CLAUSE_INDIRECT.
      	* tree.cc (omp_clause_num_ops): Add entry for OMP_CLAUSE_INDIRECT.
      	(omp_clause_code_name): Likewise.
      	* tree.h (OMP_CLAUSE_INDIRECT_EXPR): New.
      	* config/gcn/mkoffload.cc (process_asm): Process offload_ind_funcs
      	section.  Count number of indirect functions.
      	(process_obj): Emit number of indirect functions.
      	* config/nvptx/mkoffload.cc (ind_func_ids, ind_funcs_tail): New.
      	(process): Emit offload_ind_func_table in PTX code.  Emit indirect
      	function names and count in image.
      	* config/nvptx/nvptx.cc (nvptx_record_offload_symbol): Mark
      	indirect functions in PTX code with IND_FUNC_MAP.
      
      gcc/testsuite/
      	* c-c++-common/gomp/declare-target-7.c: Update expected error message.
      	* c-c++-common/gomp/declare-target-indirect-1.c: New.
      	* c-c++-common/gomp/declare-target-indirect-2.c: New.
      	* g++.dg/gomp/attrs-21.C (v12): Update expected error message.
      	* g++.dg/gomp/declare-target-indirect-1.C: New.
      	* gcc.dg/gomp/attrs-21.c (v12): Update expected error message.
      
      include/
      	* gomp-constants.h (GOMP_VERSION): Increment to 3.
      	(GOMP_VERSION_SUPPORTS_INDIRECT_FUNCS): New.
      
      libgcc/
      	* offloadstuff.c (OFFLOAD_IND_FUNC_TABLE_SECTION_NAME): New.
      	(__offload_ind_func_table): New.
      	(__offload_ind_funcs_end): New.
      	(__OFFLOAD_TABLE__): Add entries for indirect functions.
      
      libgomp/
      	* Makefile.am (libgomp_la_SOURCES): Add target-indirect.c.
      	* Makefile.in: Regenerate.
      	* libgomp-plugin.h (GOMP_INDIRECT_ADDR_MAP): New define.
      	(GOMP_OFFLOAD_load_image): Add extra argument.
      	* libgomp.h (struct indirect_splay_tree_key_s): New.
      	(indirect_splay_tree_node, indirect_splay_tree,
      	indirect_splay_tree_key): New.
      	(indirect_splay_compare): New.
      	* libgomp.map (GOMP_5.1.1): Add GOMP_target_map_indirect_ptr.
      	* libgomp.texi (OpenMP 5.1): Update documentation on indirect
      	calls in target region and on indirect clause.
      	(Other new OpenMP 5.2 features): Add entry for virtual function calls.
      	* libgomp_g.h (GOMP_target_map_indirect_ptr): Add prototype.
      	* oacc-host.c (host_load_image): Add extra argument.
      	* target.c (gomp_load_image_to_device): If the GOMP_VERSION is high
      	enough, read host indirect functions table and pass to
      	load_image_func.
      	* config/accel/target-indirect.c: New.
      	* config/linux/target-indirect.c: New.
      	* config/gcn/team.c (build_indirect_map): Add prototype.
      	(gomp_gcn_enter_kernel): Initialize support for indirect
      	function calls on GCN target.
      	* config/nvptx/team.c (build_indirect_map): Add prototype.
      	(gomp_nvptx_main): Initialize support for indirect function
      	calls on NVPTX target.
      	* plugin/plugin-gcn.c (struct gcn_image_desc): Add field for
      	indirect functions count.
      	(GOMP_OFFLOAD_load_image): Add extra argument.  If the GOMP_VERSION
      	is high enough, build address translation table and copy it to target
      	memory.
      	* plugin/plugin-nvptx.c (nvptx_tdata): Add field for indirect
      	functions count.
      	(GOMP_OFFLOAD_load_image): Add extra argument.  If the GOMP_VERSION
      	is high enough, Build address translation table and copy it to target
      	memory.
      	* testsuite/libgomp.c-c++-common/declare-target-indirect-1.c: New.
      	* testsuite/libgomp.c-c++-common/declare-target-indirect-2.c: New.
      	* testsuite/libgomp.c++/declare-target-indirect-1.C: New.
      a49c7d31
  4. Oct 26, 2023
  5. Oct 25, 2023
    • Chung-Lin Tang's avatar
      OpenACC 2.7: Implement self clause for compute constructs · 3a359638
      Chung-Lin Tang authored
      This patch implements the 'self' clause for compute constructs: parallel,
      kernels, and serial. This clause conditionally uses the local device
      (the host mult-core CPU) as the executing device of the compute region.
      
      The actual implementation of the "local device" device type inside libgomp
      (presumably using pthreads) is still not yet completed, so the libgomp
      side is still implemented the exact same as host-fallback mode. (so as of now,
      it essentially behaves like the 'if' clause with the condition inverted)
      
      gcc/c/ChangeLog:
      
      	* c-parser.cc (c_parser_oacc_compute_clause_self): New function.
      	(c_parser_oacc_all_clauses): Add new 'bool compute_p = false'
      	parameter, add parsing of self clause when compute_p is true.
      	(OACC_KERNELS_CLAUSE_MASK): Add PRAGMA_OACC_CLAUSE_SELF.
      	(OACC_PARALLEL_CLAUSE_MASK): Likewise,
      	(OACC_SERIAL_CLAUSE_MASK): Likewise.
      	(c_parser_oacc_compute): Adjust call to c_parser_oacc_all_clauses to
      	set compute_p argument to true.
      	* c-typeck.cc (c_finish_omp_clauses): Add OMP_CLAUSE_SELF case.
      
      gcc/cp/ChangeLog:
      
      	* parser.cc (cp_parser_oacc_compute_clause_self): New function.
      	(cp_parser_oacc_all_clauses): Add new 'bool compute_p = false'
      	parameter, add parsing of self clause when compute_p is true.
      	(OACC_KERNELS_CLAUSE_MASK): Add PRAGMA_OACC_CLAUSE_SELF.
      	(OACC_PARALLEL_CLAUSE_MASK): Likewise,
      	(OACC_SERIAL_CLAUSE_MASK): Likewise.
      	(cp_parser_oacc_compute): Adjust call to c_parser_oacc_all_clauses to
      	set compute_p argument to true.
      	* pt.cc (tsubst_omp_clauses): Add OMP_CLAUSE_SELF case.
      	* semantics.cc (c_finish_omp_clauses): Add OMP_CLAUSE_SELF case, merged
      	with OMP_CLAUSE_IF case.
      
      gcc/fortran/ChangeLog:
      
      	* gfortran.h (typedef struct gfc_omp_clauses): Add self_expr field.
      	* openmp.cc (enum omp_mask2): Add OMP_CLAUSE_SELF.
      	(gfc_match_omp_clauses): Add handling for OMP_CLAUSE_SELF.
      	(OACC_PARALLEL_CLAUSES): Add OMP_CLAUSE_SELF.
      	(OACC_KERNELS_CLAUSES): Likewise.
      	(OACC_SERIAL_CLAUSES): Likewise.
      	(resolve_omp_clauses): Add handling for omp_clauses->self_expr.
      	* trans-openmp.cc (gfc_trans_omp_clauses): Add handling of
      	clauses->self_expr and building of OMP_CLAUSE_SELF tree clause.
      	(gfc_split_omp_clauses): Add handling of self_expr field copy.
      
      gcc/ChangeLog:
      
      	* gimplify.cc (gimplify_scan_omp_clauses): Add OMP_CLAUSE_SELF case.
      	(gimplify_adjust_omp_clauses): Likewise.
      	* omp-expand.cc (expand_omp_target): Add OMP_CLAUSE_SELF expansion code,
      	* omp-low.cc (scan_sharing_clauses): Add OMP_CLAUSE_SELF case.
      	* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_SELF enum.
      	* tree-nested.cc (convert_nonlocal_omp_clauses): Add OMP_CLAUSE_SELF
      	case.
      	(convert_local_omp_clauses): Likewise.
      	* tree-pretty-print.cc (dump_omp_clause): Add OMP_CLAUSE_SELF case.
      	* tree.cc (omp_clause_num_ops): Add OMP_CLAUSE_SELF entry.
      	(omp_clause_code_name): Likewise.
      	* tree.h (OMP_CLAUSE_SELF_EXPR): New macro.
      
      gcc/testsuite/ChangeLog:
      
      	* c-c++-common/goacc/self-clause-1.c: New test.
      	* c-c++-common/goacc/self-clause-2.c: New test.
      	* gfortran.dg/goacc/self.f95: New test.
      
      include/ChangeLog:
      
      	* gomp-constants.h (GOACC_FLAG_LOCAL_DEVICE): New flag bit value.
      
      libgomp/ChangeLog:
      
      	* oacc-parallel.c (GOACC_parallel_keyed): Add code to handle
      	GOACC_FLAG_LOCAL_DEVICE case.
      	* testsuite/libgomp.oacc-c-c++-common/self-1.c: New test.
      3a359638
  6. Oct 13, 2023
  7. Oct 12, 2023
    • Zhang, Jun's avatar
      x86: set spincount 1 for x86 hybrid platform · e1e127de
      Zhang, Jun authored
      By test, we find in hybrid platform spincount 1 is better.
      
      Use '-march=native -Ofast -funroll-loops -flto',
      results as follows:
      
      spec2017 speed   RPL     ADL
      657.xz_s         0.00%   0.50%
      603.bwaves_s     10.90%  26.20%
      607.cactuBSSN_s  5.50%   72.50%
      619.lbm_s        2.40%   2.50%
      621.wrf_s        -7.70%  2.40%
      627.cam4_s       0.50%   0.70%
      628.pop2_s       48.20%  153.00%
      638.imagick_s    -0.10%  0.20%
      644.nab_s        2.30%   1.40%
      649.fotonik3d_s  8.00%   13.80%
      654.roms_s       1.20%   1.10%
      Geomean-int      0.00%   0.50%
      Geomean-fp       6.30%   21.10%
      Geomean-all      5.70%   19.10%
      
      omp2012          RPL     ADL
      350.md           -1.81%  -1.75%
      351.bwaves       7.72%   12.50%
      352.nab          14.63%  19.71%
      357.bt331        -0.20%  1.77%
      358.botsalgn     0.00%   0.00%
      359.botsspar     0.00%   0.65%
      360.ilbdc        0.00%   0.25%
      362.fma3d        2.66%   -0.51%
      363.swim         10.44%  0.00%
      367.imagick      0.00%   0.12%
      370.mgrid331     2.49%   25.56%
      371.applu331     1.06%   4.22%
      372.smithwa      0.74%   3.34%
      376.kdtree       10.67%  16.03%
      GEOMEAN          3.34%   5.53%
      
      include/ChangeLog:
      
      	PR target/109812
      	* spincount.h: New file.
      
      libgomp/ChangeLog:
      
      	* env.c (initialize_env): Use do_adjust_default_spincount.
      	* config/linux/x86/spincount.h: New file.
      e1e127de
  8. Aug 23, 2023
  9. Aug 22, 2023
    • Jason Merrill's avatar
      c++: constrained hidden friends [PR109751] · 810bcc00
      Jason Merrill authored
      r13-4035 avoided a problem with overloading of constrained hidden friends by
      checking satisfaction, but checking satisfaction early is inconsistent with
      the usual late checking and can lead to hard errors, so let's not do that
      after all.
      
      We were wrongly treating the different instantiations of the same friend
      template as the same function because maybe_substitute_reqs_for was failing
      to actually substitute in the case of a non-template friend.  But we don't
      actually need to do the substitution anyway, because [temp.friend] says that
      such a friend can't be the same as any other declaration.
      
      After fixing that, instead of a redefinition error we got an ambiguous
      overload error, fixed by allowing constrained hidden friends to coexist
      until overload resolution, at which point they probably won't be in the same
      ADL overload set anyway.
      
      And we avoid mangling collisions by following the proposed mangling for
      these friends as a member function with an extra 'F' before the name.  I
      demangle this by just adding [friend] to the name of the function because
      it's not feasible to reconstruct the actual scope of the function since the
      mangling ABI doesn't distinguish between class and namespace scopes.
      
      	PR c++/109751
      
      gcc/cp/ChangeLog:
      
      	* cp-tree.h (member_like_constrained_friend_p): Declare.
      	* decl.cc (member_like_constrained_friend_p): New.
      	(function_requirements_equivalent_p): Check it.
      	(duplicate_decls): Check it.
      	(grokfndecl): Check friend template constraints.
      	* mangle.cc (decl_mangling_context): Check it.
      	(write_unqualified_name): Check it.
      	* pt.cc (uses_outer_template_parms_in_constraints): Fix for friends.
      	(tsubst_friend_function): Don't check satisfaction.
      
      include/ChangeLog:
      
      	* demangle.h (enum demangle_component_type): Add
      	DEMANGLE_COMPONENT_FRIEND.
      
      libiberty/ChangeLog:
      
      	* cp-demangle.c (d_make_comp): Handle DEMANGLE_COMPONENT_FRIEND.
      	(d_count_templates_scopes): Likewise.
      	(d_print_comp_inner): Likewise.
      	(d_unqualified_name): Handle member-like friend mangling.
      	* testsuite/demangle-expected: Add test.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp2a/concepts-friend11.C: Now works.  Add template.
      	* g++.dg/cpp2a/concepts-friend15.C: New test.
      810bcc00
  10. Aug 08, 2023
  11. Aug 07, 2023
    • Vladimir Mezentsev's avatar
      gprofng: a new GNU profiler · 24552056
      Vladimir Mezentsev authored
      ChangeLog:
      
      	* Makefile.def: Add gprofng module.
      	* configure.ac: Add --enable-gprofng option.
      	* Makefile.in: Regenerate.
      	* configure: Regenerate.
      
      include/ChangeLog:
      
      	* collectorAPI.h: New file.
      	* libcollector.h: New file.
      	* libfcollector.h: New file.
      24552056
    • Alan Modra's avatar
      gcc-4.5 build fixes · 432c6f05
      Alan Modra authored
      Trying to build binutils with an older gcc currently fails.  Working
      around these gcc bugs is not onerous so let's fix them.
      
      include/ChangeLog:
      
      	* xtensa-dynconfig.h (xtensa_isa_internal): Delete unnecessary
      	forward declaration.
      432c6f05
    • Alan Modra's avatar
      PR29961, plugin-api.h: "Could not detect architecture endianess" · 24f5a73a
      Alan Modra authored
      Found when attempting to build binutils on sparc sunos-5.8 where
      sys/byteorder.h defines _BIG_ENDIAN but not any of the BYTE_ORDER
      variants.  This patch adds the extra tests to cope with the old
      machine, and tidies the header a little.
      
      include/ChangeLog:
      
      	* plugin-api.h: When handling non-gcc or gcc < 4.6.0 include
      	necessary header files before testing macros.  Make more use
      	of #elif.  Test _LITTLE_ENDIAN and _BIG_ENDIAN in final tests.
      24f5a73a
  12. Jul 30, 2023
  13. 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
  14. Jul 27, 2023
  15. 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
  16. Jun 13, 2023
  17. 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
  18. Jun 07, 2023
  19. 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
  20. May 12, 2023
  21. 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
  22. Apr 29, 2023
  23. 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
  24. Apr 20, 2023
  25. 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
  26. Feb 28, 2023
  27. 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
  28. Feb 03, 2023
  29. 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
  30. Jan 16, 2023
  31. Dec 22, 2022
  32. 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
  33. Dec 15, 2022
  34. 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
  35. Dec 08, 2022
  36. 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
  37. Nov 16, 2022
Loading