Commit graph

190372 commits

Author SHA1 Message Date
Bill Schmidt
74aeb97267 rs6000: Some builtins require IBM-128 long double format (PR103623)
2021-12-14  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
	PR target/103623
	* config/rs6000/rs6000-builtin-new.def (__builtin_pack_longdouble): Add
	ibmld attribute.
	(__builtin_unpack_longdouble): Likewise.
	* config/rs6000/rs6000-call.c (rs6000_expand_new_builtin): Add special
	handling for ibmld attribute.
	* config/rs6000/rs6000-gen-builtins.c (attrinfo): Add isibmld.
	(parse_bif_attrs): Handle ibmld.
	(write_decls): Likewise.
	(write_bif_static_init): Likewise.
2021-12-14 11:20:11 -06:00
Petter Tomner
3736837806 Add support for global rvalue initialization and constructors
This patch adds support for initialization of global variables
with rvalues and creating constructors for array, struct and
union types which can be used as rvalues.

Signed-off-by:
2021-12-14	Petter Tomner	<tomner@kth.se>

gcc/jit/
	* jit-common.h: New enum
	* jit-playback.c : Folding an setting intitial
	(global_new_decl) : Handle const global generation
	(new_global) : New flag
	(global_set_init_rvalue) : New
	(new_ctor) : New
	(new_global_initialized) : Flag
	(as_truth_value) : Fold
	(new_unary_op) : Fold
	(new_binary_op) : Fold
	(new_comparison) : Fold
	(new_array_access) : Fold
	(new_dereference) : Fold
	(get_address) : Fold
	* jit-playback.h :
	(global_set_init_rvalue) : New
	(new_ctor) : New
	* jit-recording.c :
	* jit-recording.h :
	(new_global_init_rvalue) : New
	(new_ctor) : New
	(ctor) : New, inherits rvalue
	(global_init_rvalue) : New, inherits memento
	(type::is_union) : New
	* libgccjit++.h : New entrypoints, see C-header
	* libgccjit.c : See .h
	* libgccjit.h : New entrypoints
	(gcc_jit_context_new_array_constructor) : New
	(gcc_jit_context_new_struct_constructor) : New
	(gcc_jit_context_new_union_constructor) : New
	(gcc_jit_global_set_initializer_rvalue) : New
	(LIBGCCJIT_HAVE_CTORS) : New feuture macro
	* libgccjit.map : New entrypoints added to ABI 19
	* docs/topics/expressions.rst : Updated docs

gcc/testsuite/
	* jit.dg/all-non-failing-tests.h: Added two tests
	* jit.dg/test-error-ctor-array-wrong-obj.c: New
	* jit.dg/test-error-ctor-struct-too-big.c: New
	* jit.dg/test-error-ctor-struct-wrong-field-obj.c: New
	* jit.dg/test-error-ctor-struct-wrong-type.c: New
	* jit.dg/test-error-ctor-struct-wrong-type2.c
	* jit.dg/test-error-ctor-union-wrong-field-name.c: New
	* jit.dg/test-error-global-already-init.c: New
	* jit.dg/test-error-global-common-section.c: New
	* jit.dg/test-error-global-init-too-small-array.c: New
	* jit.dg/test-error-global-lvalue-init.c: New
	* jit.dg/test-error-global-nonconst-init.c: New
	* jit.dg/test-global-init-rvalue.c: New
	* jit.dg/test-local-init-rvalue.c: New
2021-12-14 18:18:07 +01:00
Harald Anlauf
1c613165a5 Fortran: PACK intrinsic should not try to read from zero-sized array
libgfortran/ChangeLog:

	PR libfortran/103634
	* intrinsics/pack_generic.c (pack_internal): Handle case when the
	array argument of PACK has one or more extents of size zero to
	avoid invalid reads.

gcc/testsuite/ChangeLog:

	PR libfortran/103634
	* gfortran.dg/intrinsic_pack_6.f90: New test.
2021-12-14 16:56:50 +01:00
Jan Hubicka
3305135c29 Determine global memory accesses in ipa-modref
As discussed in PR103585, fatigue2 is now only benchmark from my usual testing
set (SPEC2k6, SPEC2k17, CPP benchmarks, polyhedron, Firefox, clang) which sees
important regression when inlining functions called once is limited.  This
prevents us from solving runtime issues in roms benchmarks and elsewhere.

The problem is that there is perdida function that takes many arguments and
some of them are array descriptors.  We constant propagate most of their fields
but still keep their initialization. Because perdida is quite fast, the call
overhead dominates, since we need over 100 memory stores consuing about 35%
of the overall benchmark runtime.

The memory stores would be eliminated if perdida did not call fortran I/O which
makes modref to thin that the array descriptors could be accessed. We are
quite close discovering that they can't becuase they are non-escaping from
function.  This patch makes modref to distingush between global memory access
(only things that escapes) and unkonwn accesss (that may access also
nonescaping things reaching the function).  This makes disambiguation for
functions containing error handling better.

Unfortunately the patch hits two semi-latent issues in Fortran frontned.
First is wrong code in gfortran.dg/unlimited_polymorphic_3.f03. This can be
turned into wrong code testcase on both mainline and gcc11 if the runtime
call is removed, so I filled PR 103662 for it. There is TBAA mismatch for
structure produced in FE.

Second is issue with GOMP where Fortran marks certain parameters as non-escaping
and then makes them escape via GOMP_parallel.  For this I disabled the use of
escape info in verify_arg which also disables the useful transform on perdida
but still does useful work for e.g. GCC error handling.  I will work on this
incrementally.

Bootstrapped/regtested x86_64-linux, lto-bootstrapped and also tested with
clang build.  I plan to commit this tomorrow if there are no complains
(the patch is not completely short but conceptualy simple and handles a lot
of common cases).

gcc/ChangeLog:

2021-12-12  Jan Hubicka  <hubicka@ucw.cz>

	PR ipa/103585
	* ipa-modref-tree.c (modref_access_node::range_info_useful_p): Handle
	MODREF_GLOBAL_MEMORY_PARM.
	(modref_access_node::dump): Likewise.
	(modref_access_node::get_call_arg): Likewise.
	* ipa-modref-tree.h (enum modref_special_parms): Add
	MODREF_GLOBAL_MEMORY_PARM.
	(modref_access_node::useful_for_kill): Handle
	MODREF_GLOBAL_MEMORY_PARM.
	(modref:tree::merge): Add promote_unknown_to_global.
	* ipa-modref.c (verify_arg):New function.
	(may_access_nonescaping_parm_p): New function.
	(modref_access_analysis::record_global_memory_load): New member
	function.
	(modref_access_analysis::record_global_memory_store): Likewise.
	(modref_access_analysis::process_fnspec): Distingush global and local
	memory.
	(modref_access_analysis::analyze_call): Likewise.
	* tree-ssa-alias.c (ref_may_access_global_memory_p): New function.
	(modref_may_conflict): Use it.

gcc/testsuite/ChangeLog:

2021-12-12  Jan Hubicka  <hubicka@ucw.cz>

	* gcc.dg/analyzer/data-model-1.c: Disable ipa-modref.
	* gcc.dg/uninit-38.c: Likewise.
	* gcc.dg/uninit-pr98578.c: Liewise.
2021-12-14 16:50:27 +01:00
Manfred Schwarb
44aa890d8f testsuite: Silence conversion warnings for MIN1 and MAX1
gcc/testsuite/ChangeLog:

	PR fortran/91497
	* gfortran.dg/pr91497.f90: Adjust test to use
	dg-require-effective-target directive.
	* gfortran.dg/pr91497_2.f90: New test to cover all targets.
	Cover MAX1 and MIN1 intrinsics.
2021-12-14 16:31:29 +01:00
Manfred Schwarb
f1215db081 fortran: Silence conversion warnings for MIN1 and MAX1
gcc/fortran/ChangeLog:

	PR fortran/91497
	* simplify.c (simplify_min_max): Disable conversion warnings for
	MIN1 and MAX1.
2021-12-14 16:30:07 +01:00
Vladimir N. Makarov
973f6aedeb [PR99531] Do not scan push insn for ia32 in the test
The patch prohibits scanning push insn for ia32 as push are expected not to be generated only for x86_64 Linux ABI.

gcc/testsuite/ChangeLog:

	PR target/99531
	* gcc.target/i386/pr99531.c: Do not scan for ia32.
2021-12-14 10:04:28 -05:00
Marc Poulhiès
81fdb5d4ad MAINTAINERS: Add myself to write after approval
Changelog:

	* MAINTAINERS: Add myself to write after approval.
2021-12-14 15:59:29 +01:00
Przemyslaw Wirkus
fdcddba8f2 aarch64: Add LS64 extension and intrinsics
This patch is adding support for LS64 (Armv8.7-A Load/Store 64 Byte extension)
which is part of Armv8.7-A architecture. Changes include missing plumbing for
TARGET_LS64, LS64 data structure and intrinsics defined in ACLE. Machine
description of intrinsics is using new V8DI mode added in a separate patch.
__ARM_FEATURE_LS64 is defined if the Armv8.7-A LS64 instructions for atomic
64-byte access to device memory are supported.

New compiler internal type is added wrapping ACLE struct data512_t:

typedef struct {
  uint64_t val[8];
} __arm_data512_t;

gcc/ChangeLog:

	* config/aarch64/aarch64-builtins.c (enum aarch64_builtins):
	Define AARCH64_LS64_BUILTIN_LD64B, AARCH64_LS64_BUILTIN_ST64B,
	AARCH64_LS64_BUILTIN_ST64BV, AARCH64_LS64_BUILTIN_ST64BV0.
	(aarch64_init_ls64_builtin_decl): Helper function.
	(aarch64_init_ls64_builtins): Helper function.
	(aarch64_init_ls64_builtins_types): Helper function.
	(aarch64_general_init_builtins): Init LS64 intrisics for
	TARGET_LS64.
	(aarch64_expand_builtin_ls64): LS64 intrinsics expander.
	(aarch64_general_expand_builtin): Handle aarch64_expand_builtin_ls64.
	(ls64_builtins_data): New helper struct.
	(v8di_UP): New define.
	* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins): Define
	__ARM_FEATURE_LS64.
	* config/aarch64/aarch64.c (aarch64_classify_address): Enforce the
	V8DI range (7-bit signed scaled) for both ends of the range.
	* config/aarch64/aarch64-simd.md (movv8di): New pattern.
	(aarch64_movv8di): New pattern.
	* config/aarch64/aarch64.h (AARCH64_ISA_LS64): New define.
	(TARGET_LS64): New define.
	* config/aarch64/aarch64.md: Add UNSPEC_LD64B, UNSPEC_ST64B,
	UNSPEC_ST64BV and UNSPEC_ST64BV0.
	(ld64b): New define_insn.
	(st64b): New define_insn.
	(st64bv): New define_insn.
	(st64bv0): New define_insn.
	* config/aarch64/arm_acle.h (data512_t): New type derived from
	__arm_data512_t.
	(__arm_data512_t): New internal type.
	(__arm_ld64b): New intrinsic.
	(__arm_st64b): New intrinsic.
	(__arm_st64bv): New intrinsic.
	(__arm_st64bv0): New intrinsic.
	* config/arm/types.md: Add new type ls64.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/acle/ls64_asm.c: New test.
	* gcc.target/aarch64/acle/ls64_ld64b.c: New test.
	* gcc.target/aarch64/acle/ls64_ld64b-2.c: New test.
	* gcc.target/aarch64/acle/ls64_ld64b-3.c: New test.
	* gcc.target/aarch64/acle/ls64_st64b.c: New test.
	* gcc.target/aarch64/acle/ls64_ld_st_o0.c: New test.
	* gcc.target/aarch64/acle/ls64_st64b-2.c: New test.
	* gcc.target/aarch64/acle/ls64_st64bv.c: New test.
	* gcc.target/aarch64/acle/ls64_st64bv-2.c: New test.
	* gcc.target/aarch64/acle/ls64_st64bv-3.c: New test.
	* gcc.target/aarch64/acle/ls64_st64bv0.c: New test.
	* gcc.target/aarch64/acle/ls64_st64bv0-2.c: New test.
	* gcc.target/aarch64/acle/ls64_st64bv0-3.c: New test.
	* gcc.target/aarch64/pragma_cpp_predefs_2.c: Add checks
	for __ARM_FEATURE_LS64.
2021-12-14 14:52:27 +00:00
Martin Liska
0dfb1bd944 testsuite: fix ASAN errors
The tests failed on my machine as they contain out-of-bounds
access.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx2-psraq-1.c: Use ARRAY_SIZE.
	* gcc.target/i386/m128-check.h: Move it to the top-level
	context.
	* gcc.target/i386/sse2-psraq-1.c: Use ARRAY_SIZE.
	* gcc.target/i386/sse4_2-check.h: Include the header with
	ARRAY_SIZE definition.
2021-12-14 15:49:30 +01:00
Jonathan Wakely
b0e6a257f1 libstdc++: Fix non-reserved name in <regex> header
libstdc++-v3/ChangeLog:

	* include/bits/regex_compiler.tcc (_Compiler::_M_match_token):
	Use reserved name for parameter.
	* testsuite/17_intro/names.cc: Check "token".
2021-12-14 14:23:55 +00:00
Patrick Palka
561414cdf8 c++: processing_template_decl vs template depth [PR103408]
We use processing_template_decl in two slightly different ways: as a
flag to signal that we're dealing with templated trees, and as a measure
of the current syntactic template nesting depth.  This overloaded
meaning of p_t_d is conceptually confusing and leads to bugs that we end
up working around in an ad-hoc fashion.

This patch replaces all uses of processing_template_decl that care about
its magnitude to instead look at the depth of current_template_parms
via a new macro current_template_depth.  This allows us to eliminate 3
workarounds in the concepts code: two about non-templated
requires-expressions (in constraint.cc) and one about lambdas inside
constraints (in cp_parser_requires_clause_expression etc).  This also
fixes the testcase in PR103408 about auto(x) used inside a non-templated
requires-expression.

The replacement was mostly mechanical, aside from two issues:

  * In synthesize_implicit_template_parm, when introducing a new template
    parameter list for an abbreviated function template, we need to add
    the new level of current_template_parms sooner, before calling
    process_template_parm, since this latter function now looks at
    current_template_depth to determine the level of the new parameter.

  * In instantiate_class_template_1 after substituting a template
    friend declaration, we currently increment processing_template_decl
    around the call to make_friend_class so that the friend_depth
    computation within this subroutine yields a nonzero value.  We could
    just replace this with an equivalent manipulation of
    current_template_depth, but this patch instead rewrites the
    friend_depth calculation within make_friend_class to not depend on
    p_t_d / c_t_d at all when called from instantiate_class_template_1.

	PR c++/103408

gcc/cp/ChangeLog:

	* constraint.cc (type_deducible_p): Remove workaround for
	non-templated requires-expressions.
	(normalize_placeholder_type_constraints): Likewise.
	* cp-tree.h (current_template_depth): Define.
	(PROCESSING_REAL_TEMPLATE_DECL): Inspect current_template_depth
	instead of the magnitude of processing_template_decl.
	* decl.c (start_decl): Likewise.
	(grokfndecl): Likewise.
	(grokvardecl): Likewise.
	(grokdeclarator): Likewise.
	* friend.c (make_friend_class): Likewise.  Calculate
	friend_depth differently when called at instantiation time
	instead of parse time.
	(do_friend): Likewise.
	* parser.c (cp_parser_requires_clause_expression): Remove
	workaround for lambdas inside constraints.
	(cp_parser_constraint_expression): Likewise.
	(cp_parser_requires_expression): Likewise.
	(synthesize_implicit_template_parm): Add to current_template_parms
	before calling process_template_parm.
	* pt.c (inline_needs_template_parms): Inspect
	current_template_depth instead of the magnitude of
	processing_template_decl.
	(push_inline_template_parms_recursive): Likewise.
	(maybe_begin_member_template_processing): Likewise.
	(begin_template_parm_list): Likewise.
	(process_template_parm): Likewise.
	(end_template_parm_list): Likewise.
	(push_template_decl): Likewise.
	(add_inherited_template_parms): Likewise.
	(instantiate_class_template_1): Don't adjust
	processing_template_decl around the call to make_friend_class.
	adjust_processing_template_decl to adjust_template_depth.  Set
	current_template_parms instead of processing_template_decl when
	adjust_template_depth.
	(make_auto_1): Inspect current_template_depth instead of the
	magnitude of processing_template_decl.
	(splice_late_return_type): Likewise.
	* semantics.c (fixup_template_type): Likewise.

gcc/testsuite/ChangeLog:

	* g++.dg/concepts/diagnostic18.C: Expect a "constraints on a
	non-templated function" error.
	* g++.dg/cpp23/auto-fncast11.C: New test.
2021-12-14 08:15:52 -05:00
Olivier Hainque
d8eae5abf3 Remove fpic multilib on x86_64-vxworks
The addition of fPIC for shared libraries is performed
independently from multilibs and fpic multilibs have
no other particular purpose for VxWorks at this stage.

They incur extra build time, complexify the install tree
and are a bit tricky because -fpic is not supported for kernel
mode.

2021-12-14  Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/i386/t-vxworks: Drop the fPIC multilibs.
2021-12-14 12:56:56 +00:00
Patrick Palka
336dc544eb c++: don't leak 'arglist' in build_new_op
gcc/cp/ChangeLog:

	* call.c (build_new_op): Use releasing_vec for arglist.  Declare
	conv in the scope it's used.
2021-12-14 07:48:54 -05:00
Patrick Palka
c5ef950d0b c++: remove COMPOUND_EXPR_OVERLOADED flag
This flag is never set because non-dependent COMPOUND_EXPRs that resolve
to an overload are expressed as a CALL_EXPR at template definition time
(in build_x_compound_expr) ever since r6-5772.

gcc/cp/ChangeLog:

	* cp-tree.h (COMPOUND_EXPR_OVERLOADED): Remove.
	* pt.c (build_non_dependent_expr): Don't inspect the flag.
	* tree.c (build_min_non_dep): Don't set the flag.
2021-12-14 07:48:05 -05:00
Frederic Konrad
dff8ae8e83 Drop the fpic multilib for powerpc*-vxworks*
The addition of fPIC for shared libraries is performed
independently from multilibs and the fpic multilibs have
no other particular purpose. They incur extra build time,
complexify the install tree and are a bit tricky because
-fpic is not supported for kernel mode.

2020-11-06  Fred Konrad  <konrad@adacore.com>

gcc/
	* config/rs6000/t-vxworks: Drop the fPIC multilib.
2021-12-14 12:28:07 +00:00
Jakub Jelinek
e163dbbc44 c: Fix ICE on deferred pragma in unknown attribute arguments [PR103587]
We ICE on the following testcase, because c_parser_balanced_token_sequence
when encountering a deferred pragma will just use c_parser_consume_token
which the FE doesn't allow for CPP_PRAGMA tokens (and if that wasn't
the case, it could ICE on CPP_PRAGMA_EOL similarly).
We don't know in what exact context the pragma appears when we don't
know what those arguments semantically mean, so I think we should just
skip over them, like e.g. the C++ FE does.  And, I think (/[/{ vs. )/]/}
from outside of the pragma shouldn't be paired with those inside of
the pragma and it doesn't seem to be necessary to check that inside of
the pragma line itself all the paren kinds are balanced.

2021-12-14  Jakub Jelinek  <jakub@redhat.com>

	PR c/103587
	* c-parser.c (c_parser_balanced_token_sequence): For CPP_PRAGMA,
	consume the pragma and silently skip to the pragma eol.

	* gcc.dg/pr103587.c: New test.
2021-12-14 12:02:55 +01:00
Thomas Schwinge
228d64af4e Adjust 'gfortran.dg/goacc/privatization-1-*' [PR103576, PR103697]
... for the recent commit 494ebfa7c9
"Fortran: Handle compare in OpenMP atomic", which changes the GIMPLE IR
such that a temporary is no longer used; 'original' dump:

             x = *a;
    -        {
    -          integer(kind=4) D.4237;
    -
    -          D.4237 = *a;
               #pragma omp atomic relaxed
    -            &y = D.4237;
    -        }
    +          &y = *a;
           }

(I'm not familiar to comment whether that's correct; but it appears that the
difference again disappears in later compiler passes.)

These OpenACC test cases verify behavior re OpenACC privatization levels, and
have to be adjusted accordingly.

	gcc/testsuite/
	PR fortran/103576
	PR testsuite/103697
	* gfortran.dg/goacc/privatization-1-compute-loop.f90: Adjust.
	* gfortran.dg/goacc/privatization-1-compute.f90: Likewise.
	* gfortran.dg/goacc/privatization-1-routine_gang-loop.f90:
	Likewise.
	* gfortran.dg/goacc/privatization-1-routine_gang.f90: Likewise.
2021-12-14 07:17:18 +01:00
GCC Administrator
7f1239cb43 Daily bump. 2021-12-14 00:16:25 +00:00
Vladimir N. Makarov
a7acb6dca9 [PR99531] Modify pseudo class cost calculation when processing move involving the pseudo and a hard register
Pseudo class calculated on the 1st iteration should not have a
special treatment in cost calculation when processing move involving
the pseudo and a hard register.

gcc/ChangeLog:

	PR target/99531
	* ira-costs.c (record_operand_costs): Do not take pseudo class
	calculated on the 1st iteration into account when processing move
	involving the pseudo and a hard register.

gcc/testsuite/ChangeLog:

	PR target/99531
	* gcc.target/i386/pr99531.c: New test.
2021-12-13 14:10:03 -05:00
Roger Sayle
149739c394 x86: Avoid generating orb $0, %ah
I'll post my proposed fix for PR target/103611 shortly, but this patch
fixes another missed optimization opportunity revealed by that PR.
Occasionally, reload materializes integer constants during register
allocation sometimes resulting in unnecessary instructions such as:

(insn 23 31 24 2 (parallel [
            (set (reg:SI 0 ax [99])
                (ior:SI (reg:SI 0 ax [99])
                    (const_int 0 [0])))
            (clobber (reg:CC 17 flags))
        ]) "pr103611.c":18:73 550 {*iorsi_1}
     (nil))

These then get "optimized" during the split2 pass, which realizes that
no bits outside of 0xff00 are set, so this operation can be implemented
by operating on just the highpart of a QIreg_operand, i.e. %ah, %bh, %ch
etc., which leads to the useless "orb $0, %ah" seen in the reported PR.

This fix catches the case of const0_rtx in relevant splitter, either
eliminating the instruction or turning it into a simple move.

2021-12-13  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	* config/i386/i386.md (define_split any_or:SWI248 -> orb %?h):
	Optimize the case where the integer constant operand is zero.

gcc/testsuite/ChangeLog
	* gcc.target/i386/pr103611-1.c: New test case.
2021-12-13 18:51:00 +00:00
Douglas B Rupp
fc4a93eb41 Rework VXWORKS_LINK_SPEC for shared objects support
Split LINK_SPEC as BASE_LINK_SPEC + EXTRA_LINK_SPEC,
with an overridable LINK_OS component that cpu ports may
redefine.

Leverage the latter on powerpc for VxWorks 7, where we incorporate
our specific bits in the linux os configuration as the system compiler
is now very close to a standard linux one.

The split allows supporting shared objects (shared libs and
non-static rtps) on recent versions of VxWorks while retaining
compatibility with older VxWorks targets which could link with
shared libraries but not build them.

2021-12-07  Doug Rupp  <rupp@adacore.com>
	    Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/vxworks.h (VXWORKS_LINK_OS_SPEC): New spec.
	(VXWORKS_BASE_LINK_SPEC): New spec, using the former.
	(VXWORKS_EXTRA_LINK_SPEC): New spec for old and new VxWorks.
	(VXWORKS_LINK_SPEC): Combo of BASE and EXTRA specs.
	* config/rs6000/vxworks.h (VXWORKS_LINK_OS_SPEC): Empty.
	(LINK_OS_EXTRA_SPEC32): Use VXWORKS_LINK_SPEC.
	(LINK_OS_EXTRA_SPEC64): Likewise.
2021-12-13 18:03:26 +00:00
Olivier Hainque
04577ac084 Remove ppc*-vxworks7* inadequate libgcc Makefile fragments
t-linux assigns .so version numbers to a set of
symbols, some of which aren't included the VxWorks libgcc
on powerpc (from ibm-ldouble.c, in particular).

t-slibgcc-libgcc yields a kind of .so file that the default
loader can't handle. This sort of extension to tmake_file for
shared libs will be better handled in a grouped fashion for
all targets anyway.

2021-12-13  Olivier Hainque  <hainque@adacore.com>

	* config.host (powerpc*-*-vxworks7*): Remove
	rs6000/t-linux and t-slibgcc-libgcc from tmake_file.
2021-12-13 18:03:21 +00:00
Olivier Hainque
20a0e2721a Remove special case for arm-vxworks on the use of vxcrtstuff
Not needed any more after the recent cleanups issued for the
support of shared libraries.

2021-12-13  Olivier Hainque  <hainque@adacore.com>

libgcc/
	* config.host (*vxworks*): Remove special case for
	arm on the use of vxcrtstuff.
2021-12-13 18:03:17 +00:00
Frederic Konrad
4099d6501e Tigthen libc_internal and crtstuff for VxWorks shared objects
This change tightens and documents the use of libc_internal, then
strengthens the VxWorks crtstuff objects for the support of shared
libraries. In particular:

- Define __dso_handle, which libstdc++.so requires,

- Provide _init and _fini functions to run through the init/fini arrays
  for shared libs in configurations which HAVE_INITFINI_ARRAY_SUPPORT.

The init/fini functions are provided by libc_internal.a for static links
but with slightly different names and we don't want to risk dragging other
libc_internal contents in the closure accidentally so make sure we don't
link with it.

As for the !vxworks crtstuff, the new shared libs specific bits are
conditioned by a CRTSTUFFS_O macro, for which we provide new Makefile
fragment.

The bits to actually use the fragment and the shared objects will
be added by a forthcoming change, as part of a more general configury
update for shared libs.

The change also adds guards the eh table registration code
in vxcrtstuff so the objects can be used for either init/fini
or eh tables independently.

2021-12-07  Fred Konrad  <konrad@adacore.com>
	    Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/vxworks.h (VXWORKS_BASE_LIBS_RTP): Guard -lc_internal
	on !shared+!non-static and document.
	(VXWORKS_LIB_SPEC): Remove the bits intended to drag the
	init/fini functions from libc_internal in the shared lib case.
	(VX_CRTBEGIN_SPEC/VX_CRTEND_SPEC): Use vxcrtstuff objects also in
	configurations with shared lib and INITFINI_ARRAY support.

libgcc/
	* config/t-vxcrtstuffS: New Makefile fragment.
	* config/vxcrtstuff.c: Provide __dso_handle. Provide _init/_fini
	functions for INITFINI_ARRAY support in shared libs and guard
	the definition of eh table registration functions on conditions
	indicating they are needed.
2021-12-13 18:03:03 +00:00
Frederic Konrad
0515c95d5f VxWorks config fixes for shared objects
This strengthens the VxWorks configuration files for the support
of shared objects, which encompasses a VxWorks specific "non-static"
mode for RTPs (in addition to -static and -shared).

2020-11-06  Fred Konrad  <konrad@adacore.com>
	    Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/vx-common.h: Define REAL_LIBGCC_SPEC since the
	'-non-static' option is not standard.
	* config/vxworks.h (VXWORKS_LIBGCC_SPEC): Implement the LIBGCC_SPEC
	since REAL_LIBGCC_SPEC is used now.
	(STARTFILE_PREFIX_SPEC): Use the PIC VSB when building shared libraries
	or non-static binaries.
2021-12-13 18:02:22 +00:00
Olivier Hainque
0ecb48d753 Preserve cpu specific CRTSTUFF_T_CFLAGS on powerpc-vxworks7
The unconditional assignment performed in t-vxworks to handle
include flags currently overrides what specific cpu ports had
for the regular (!vxworks) crtstuff objects.

This was not done on purpose and the proposed change adjusts the
configuration bits to apply the vxworks specific flags on top of
the cpu ones instead.

2021-12-07  Olivier Hainque  <hainque@adacore.com>

	* config.host (powerpc*-wrs-vxworks7*): Place t-crtstuff
	ahead of the other files in tmake_files.
	* config/t-vxworks: Add to CRTSTUFF_T_CFLAGS instead of
	overriding it.
2021-12-13 17:59:54 +00:00
Jan Hubicka
16c848090f Add -fipa-strict-aliasing
gcc/ChangeLog:

2021-12-13  Jan Hubicka  <hubicka@ucw.cz>

	* common.opt: Add -fipa-strict-aliasing.
	* doc/invoke.texi: Document -fipa-strict-aliasing.
	* ipa-modref.c (modref_access_analysis::record_access): Honor
	-fipa-strict-aliasing.
	(modref_access_analysis::record_access_lto): Likewise.
2021-12-13 17:30:13 +01:00
Kyrylo Tkachov
5954b4d415 aarch64: Add command-line support for Armv8.8-a
This final patch in the series is much simpler and adds command-line support for -march=armv8.8-a,
making use of the +mops features added in the previous patches.

Bootstrapped and tested on aarch64-none-linux-gnu.

gcc/ChangeLog:

	* config/aarch64/aarch64-arches.def (armv8.8-a): Define.
	* config/aarch64/aarch64.h (AARCH64_FL_V8_8): Define.
	(AARCH64_FL_FOR_ARCH8_8): Define.
	* doc/invoke.texi: Document -march=armv8.8-a.
2021-12-13 15:16:59 +00:00
Kyrylo Tkachov
d3bd985e79 aarch64: Use +mops to inline memset operations
This 3rd patch in the series adds an inline sequence for the memset operation.
The aarch64-mops-memset-size-threshold param is added to control the size threshold for the sequence.
Its default setting is 256, which may seem a bit high, but it is consistent with the current
SIMD memset inline sequence limit, and future CPU tunings can override it easily as needed.

Bootstrapped and tested on aarch64-none-linux-gnu.

gcc/ChangeLog:

	* config/aarch64/aarch64.c (aarch64_expand_setmem_mops): Define.
	(aarch64_expand_setmem): Adjust for TARGET_MOPS.
	* config/aarch64/aarch64.h (CLEAR_RATIO): Adjust for TARGET_MOPS.
	(SET_RATIO): Likewise.
	* config/aarch64/aarch64.md ("unspec"): Add UNSPEC_SETMEM.
	(aarch64_setmemdi): Define.
	(setmemdi): Adjust for TARGET_MOPS.
	* config/aarch64/aarch64.opt (aarch64-mops-memset-size-threshold):
	New param.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/mops_3.c: New test.
2021-12-13 15:16:32 +00:00
Kyrylo Tkachov
bb768f8b45 aarch64: Add memmove expansion for +mops
This second patch in the series adds an inline movmem expansion for TARGET_MOPS
that emits the recommended sequence.

A new param aarch64-mops-memmove-size-threshold is added to control the memmove size threshold
for this expansion. Its default value is zero to be consistent with the current behaviour where
we always emit a libcall, as we don't currently have a movmem inline expansion
(we should add a compatible-everywhere inline expansion, but that's for the future), so we should
always prefer to emit the MOPS sequence when available in lieu of a libcall.

Bootstrapped and tested on aarch64-none-linux-gnu.

gcc/ChangeLog:

	* config/aarch64/aarch64.md (aarch64_movmemdi): Define.
	(movmemdi): Define.
	(unspec): Add UNSPEC_MOVMEM.
	* config/aarch64/aarch64.opt (aarch64-mops-memmove-size-threshold):
	New param.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/mops_2.c: New test.
2021-12-13 15:16:28 +00:00
Kyrylo Tkachov
0caf592d6a aarch64: Add support for Armv8.8-a memory operations and memcpy expansion
This patch adds the +mops architecture extension flag from the 2021 Arm Architecture extensions, Armv8.8-a.
The +mops extensions introduce instructions to accelerate the memcpy, memset, memmove standard functions.
The first patch here uses the instructions in the inline memcpy expansion.
Further patches in the series will use similar instructions to inline memmove and memset.

A new param, aarch64-mops-memcpy-size-threshold, is introduced to control the size threshold above which to
emit the new sequence. Its default setting is 256 bytes, which is the same as the current threshold above
which we'd emit a libcall.

Bootstrapped and tested on aarch64-none-linux-gnu.

gcc/ChangeLog:

	* config/aarch64/aarch64-option-extensions.def (mops): Define.
	* config/aarch64/aarch64.c (aarch64_expand_cpymem_mops): Define.
	(aarch64_expand_cpymem): Define.
	* config/aarch64/aarch64.h (AARCH64_FL_MOPS): Define.
	(AARCH64_ISA_MOPS): Define.
	(TARGET_MOPS): Define.
	(MOVE_RATIO): Adjust for TARGET_MOPS.
	* config/aarch64/aarch64.md ("unspec"): Add UNSPEC_CPYMEM.
	(aarch64_cpymemdi): New pattern.
	(cpymemdi): Adjust for TARGET_MOPS.
	* config/aarch64/aarch64.opt (aarch64-mops-memcpy-size-threshol):
	New param.
	* doc/invoke.texi (AArch64 Options): Document +mops.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/mops_1.c: New test.
2021-12-13 15:16:22 +00:00
Martin Liska
9eb8785b3f inline: fix ICE with -fprofile-generate
PR ipa/103636

gcc/ChangeLog:

	* ipa-inline.c (can_inline_edge_p): Move logic checking
	no_profile_instrument_function logic to ...
	(can_early_inline_edge_p): ... here.
2021-12-13 14:58:34 +01:00
Olivier Hainque
55fb12f12f Include yvals.h for VxWorks < 7 RTPs as well
For -mrtp on VxWorks 6.9, at least inttypes.h ends up #including
system headers checking that _BITS_BYTES is 8, which the system yvals.h
defines. We do pre-include _yvals.h ahead of inttypes.h for this kind of
purpose, but it currently assumes that only VxWorks >= 7 provides yvals.h.

This results in unexpected configure checks failures, complaining about
_BITS_BYTES not being 8, spotted while inspecting libstdc++ config.log for
unrelated reasons.

This change relaxes the guard in _yvals.h to include yvals.h for
__RTP__ in addition to version >= 7.

2021-12-13  Olivier Hainque  <hainque@adacore.com>

	* config/vxworks/_yvals.h: #include yvals.h also if
	defined(__RTP__).
2021-12-13 13:54:11 +00:00
Olivier Hainque
b80e6d97a9 Ensure VxWorks headers expose C99 features for C++
C++ relies on C99 features since C++11 and libstdc++ down to c++98
checks for C99 features at configure time. Simpler is to request C99
features from system headers unconditionally.

2021-12-11  Olivier Hainque  <hainque@adacore.com>

	* config/vxworks.h (VXWORKS_OS_CPP_BUILTINS): Define
	_C99 for C++.
2021-12-13 13:54:11 +00:00
Olivier Hainque
f3f923e513 Leverage sysroot for VxWorks
The build of a VxWorks toolchain relies a lot on system headers
and VxWorks has a few very specific features that require special
processing. For example, different sets of headers for the kernel
vs the rtp modes, which the compiler knows about by way of -mrtp
on the command line.

If we manage to avoid the need for fixincludes on recent versions
of VxWorks (>= 7), we still need to handle at least VxWorks 6.9 at
this stage.

We sort of get away with locating the correct headers at
run-time thanks to environment variables and various tests for
-mrtp in cpp specs, but getting fixincludes to work for old
configurations has always been tricky and getting a toolchain
to build with c++/libstdc++ support gets trickier with every
move to a more recent release.

sysroot_headers_suffix_spec is a pretty powerful device to help
address such issues, and this patch introduces changes that let
us get advantage of it.

The general idea is to leverage the assumption that compilations
occur with --sysroot=$VSB_DIR on vx7 or --sysroot=$WIND_BASE/target
prior to that.

For the toolchains we build, this is achieved with a few
configure options like:

  --with-sysroot
  --with-build-sysroot=${WIND_BASE}/target
  --with-specs=%{!sysroot=*:--sysroot=%:getenv(WIND_BASE /target)}

This also allows simplifying the libgcc compilation flags control
and we take the opportunity to merge t-vxworks7 into t-vxworks as
the two files were differing only on the libgcc2 flags part.

2021-12-09  Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/t-vxworks: Clear NATIVE_SYSTEM_HEADER_DIR.
	* config/vxworks.h (SYSROOT_HEADERS_SUFFIX_SPEC): Define, for
	VxWorks 7 and earlier.
	(VXWORKS_ADDITIONAL_CPP_SPEC): Simplify accordingly.
	(STARTFILE_PREFIX_SPEC): Adjust accordingly.
	* config/rs6000/vxworks.h (STARTFILE_PREFIX_SPEC): Adjust.

libgcc/
	* config/t-vxworks (LIBGCC2_INCLUDES): Simplify and handle
	both VxWorks7 and earlier.
	* config/t-vxworks7: Remove.
	* config.host: Remove special case for vxworks7.
2021-12-13 13:54:01 +00:00
Jonathan Wakely
7bf710b511 libstdc++: Add support for '?' in linker script globs
The scripts/make_exports.pl script used for darwin only replaces '*'
wildcards in globs, it doesn't handle '?'. This means the recent changes
to std::__timepunct exports broke darwin.

Rather than use mangled names in the linker script, this adds support
for '?' to the perl script.

This also removes some unnecessary escaping of the replacement strings
in s// substitutions.

libstdc++-v3/ChangeLog:

	* scripts/make_exports.pl: Replace '?' with '.' when turning
	a glob into a regex.
2021-12-13 13:14:51 +00:00
Tobias Burnus
494ebfa7c9 Fortran: Handle compare in OpenMP atomic
gcc/fortran/ChangeLog:

	PR fortran/103576
	* openmp.c (is_scalar_intrinsic_expr): Fix condition.
	(resolve_omp_atomic): Fix/update checks, accept compare.
	* trans-openmp.c (gfc_trans_omp_atomic): Handle compare.

libgomp/ChangeLog:

	* libgomp.texi (OpenMP 5.1): Set Fortran support for atomic to 'Y'.
	* testsuite/libgomp.fortran/atomic-19.f90: New test.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/atomic-25.f90: Remove sorry, fix + add checks.
	* gfortran.dg/gomp/atomic-26.f90: Likewise.
	* gfortran.dg/gomp/atomic-21.f90: New test.
2021-12-13 12:38:26 +01:00
Jonathan Wakely
55823c5a0b libstdc++: Make ranges::size and ranges::empty check for unbounded arrays
Passing IncompleteType(&)[] to ranges::begin produces an error outside
the immediate context, which is fine for ranges::begin, but it means
that we fail to enforce the SFINAE-able constraints for ranges::size and
ranges::size. They should not be callable for any array of unknown
bound, whether the type is complete or not. Because we don't enforce
that in their constraints, we get a hard error when they try to use
ranges::begin.

This simply adds explicit checks for arrays of unknown bound to the
constraints for ranges::size and ranges::empty. We only need to check it
for the __sentinel_size and __eq_iter_empty concepts, because those are
the ones that are relevant to arrays, and which try to use
ranges::begin.

libstdc++-v3/ChangeLog:

	* include/bits/ranges_base.h (ranges::size, ranges::empty): Add
	explicit check for unbounded arrays before using ranges::begin.
	* testsuite/std/ranges/access/empty.cc: Check handling of unbounded
	arrays.
	* testsuite/std/ranges/access/size.cc: Likewise.
2021-12-13 11:15:41 +00:00
Jonathan Wakely
ef5d671cd8 libstdc++: Fix std::regex_replace for strings with embedded null [PR103664]
The overload of std::regex_replace that takes a std::basic_string as the
fmt argument (for the replacement string) is implemented in terms of the
one taking a const C*, which uses std::char_traits to find the length.
That means it stops at a null character, even though the basic_string
might have additional characters beyond that.

Rather than duplicate the implementation of the const C* one for the
std::basic_string case, this moves that implementation to a new
__regex_replace function which takes a const C* and a length. Then both
the std::basic_string and const C* overloads can call that (with the
latter using char_traits to find the length to pass to the new
function).

libstdc++-v3/ChangeLog:

	PR libstdc++/103664
	* include/bits/regex.h (__regex_replace): Declare.
	(regex_replace): Use it.
	* include/bits/regex.tcc (__regex_replace): Replace regex_replace
	definition with __regex_replace.
	* testsuite/28_regex/algorithms/regex_replace/char/103664.cc: New test.
2021-12-13 11:11:30 +00:00
Martin Liska
3788c4ed2c docs: add missing @item for the first item
gcc/ChangeLog:

	* doc/extend.texi: Use @item for the first @itemx entry.
2021-12-13 11:56:24 +01:00
Jakub Jelinek
7ed58b4274 pch: Small cleanup
> Fixed thusly, compile tested on x86_64-linux, committed to trunk.

Here is a small cleanup.  IMHO we should use gt_pointer_operator instead of
specifying manually void (*) (void *, void *) or
void (*) (void *, void *, void *) so that next time we want to change it,
we don't have to trace all the spots.  I was afraid it wouldn't work due to
header dependencies, but it works well.  gengtype generated files also
use gt_pointer_operator.

2021-12-13  Jakub Jelinek  <jakub@redhat.com>

	* machmode.h (gt_pch_nx): Use gt_pointer_operator as type of second
	argument instead of equivalent void (*) (void *, void *, void *).
	* poly-int.h (gt_pch_nx): Likewise.
	* wide-int.h (gt_pch_nx): Likewise.
	* config/aarch64/aarch64-sve-builtins.cc (gt_pch_nx): Likewise.
2021-12-13 09:51:17 +01:00
Jan Hubicka
3b61f06b2e Do not ICE on ternary expressions when calculating value ranges
gcc/ChangeLog:

2021-12-12  Jan Hubicka  <hubicka@ucw.cz>

	PR ipa/103513
	* ipa-fnsummary.c (evaluate_conditions_for_known_args): Do not ICE
	on ternary expression.

gcc/testsuite/ChangeLog:

2021-12-12  Jan Hubicka  <hubicka@ucw.cz>

	PR ipa/103513
	* gcc.c-torture/compile/pr103513.c: New test.
2021-12-13 09:38:53 +01:00
Kewen Lin
01ad8c54fd pragma: Update target option node when optimization changes [PR103515]
For a function with optimize pragma, it's possible that the target
options change as optimization options change.  Now we create one
optimization option node when optimize pragma parsing, but don't
create target option node for possible target option changes.  It
makes later processing not detect the target options can actually
change and further doesn't update the target options accordingly.

This patch is to check whether target options have changed when
creating one optimization option node for pragma optimize, and
make one target option node if needed.  The associated test case
shows the difference.  Without this patch, the function foo1 will
perform unrolling which is unexpected.  The reason is that flag
unroll_only_small_loops isn't correctly set for it.  The value
is updated after parsing function foo2, but doesn't get restored
later since both decls don't have DECL_FUNCTION_SPECIFIC_TARGET
set and the hook thinks we don't need to switch.  With this patch,
there is no unrolling for foo1, which is also consistent with the
behavior by replacing pragma by attribute whether w/ and w/o this
patch.

As Martin noted, this change does the similar thing like what his
previous commit r12-1039 did.

gcc/ChangeLog:

	PR target/103515
	* attribs.c (decl_attributes): Check if target options change and
	create one node if so.

gcc/testsuite/ChangeLog:

	PR target/103515
	* gcc.target/powerpc/pr103515.c: New test.
2021-12-12 23:27:51 -06:00
GCC Administrator
c8dcf64b31 Daily bump. 2021-12-13 00:16:28 +00:00
Jonathan Wakely
b8f7ff76d6 Replace gnu::unique_ptr with std::unique_ptr
Now that GCC is compiled as C++11 there is no need to keep the C++03
implementation of gnu::unique_ptr.

This removes the unique-ptr.h header and replaces it with <memory> in
system.h, and changes the INCLUDE_UNIQUE_PTR macro to INCLUDE_MEMORY.
Uses of gnu::unique_ptr and gnu::move can be replaced with
std::unique_ptr and std::move. There are no uses of unique_xmalloc_ptr
or xmalloc_deleter in GCC.

gcc/analyzer/ChangeLog:

	* engine.cc: Define INCLUDE_MEMORY instead of INCLUDE_UNIQUE_PTR.

gcc/c-family/ChangeLog:

	* known-headers.cc: Define INCLUDE_MEMORY instead of
	INCLUDE_UNIQUE_PTR.
	* name-hint.h: Likewise.
	(class name_hint): Use std::unique_ptr instead of gnu::unique_ptr.

gcc/c/ChangeLog:

	* c-decl.c: Define INCLUDE_MEMORY instead of INCLUDE_UNIQUE_PTR.
	* c-parser.c: Likewise.

gcc/cp/ChangeLog:

	* error.c: Define INCLUDE_MEMORY instead of
	INCLUDE_UNIQUE_PTR.
	* lex.c: Likewise.
	* name-lookup.c: Likewise.
	(class namespace_limit_reached): Use std::unique_ptr instead of
	gnu::unique_ptr.
	(suggest_alternatives_for): Use std::move instead of gnu::move.
	(suggest_alternatives_in_other_namespaces): Likewise.
	* parser.c: Define INCLUDE_MEMORY instead of INCLUDE_UNIQUE_PTR.

gcc/ChangeLog:

	* Makefile.in: Remove unique-ptr-tests.o.
	* selftest-run-tests.c (selftest::run_tests): Remove
	unique_ptr_tests_cc_tests.
	* selftest.h (unique_ptr_tests_cc_tests): Remove.
	* system.h: Check INCLUDE_MEMORY instead of INCLUDE_UNIQUE_PTR
	and include <memory> instead of "unique-ptr.h".
	* unique-ptr-tests.cc: Removed.

include/ChangeLog:

	* unique-ptr.h: Removed.
2021-12-12 22:51:12 +00:00
Antoni Boucher
0b52083ea2 libgccjit: Add support for setting the link section of global variables [PR100688]
2021-12-12  Antoni Boucher  <bouanto@zoho.com>

gcc/jit/
	PR target/100688
	* docs/topics/compatibility.rst (LIBGCCJIT_ABI_18): New ABI
	tag.
	* docs/topics/expressions.rst: Add documentation for the
	function gcc_jit_lvalue_set_link_section.
	* jit-playback.h: New function (set_link_section).
	* jit-recording.c: New function (set_link_section) and
	support for setting the link section.
	* jit-recording.h: New function (set_link_section) and new
	field m_link_section.
	* libgccjit.c: New function (gcc_jit_lvalue_set_link_section).
	* libgccjit.h: New function (gcc_jit_lvalue_set_link_section).
	* libgccjit.map (LIBGCCJIT_ABI_18): New ABI tag.

gcc/testsuite/
	PR target/100688
	* jit.dg/all-non-failing-tests.h: Mention new test
	link-section-assembler.
	* jit.dg/test-link-section-assembler.c: New test.
	* jit.dg/jit.exp: New helper function to test that the
	assembly contains a pattern.
2021-12-12 16:16:23 -05:00
Roger Sayle
aeedb00a1a nvptx: Add (experimental) support for HFmode with -misa=sm_53
The recent flurry of activity around HFmode on gcc-patches intrigued me
to investigate adding HFmode support to the nvptx backend.  NVidia GPUs
with an SM ISA above 5.3 support IEEE 16-bit floating point instructions.
Hence, this patch adds support for -misa=sm_53, and implements some
backend patterns/insns sufficient for a proof-of-concept prototype.

The following has been tested on nvptx-none, hosted on x86_64-pc-linux-gnu
with a "make" and "make -k check" with no new failures.

gcc/ChangeLog:

	* config/nvptx/nvptx-opts.h (ptx_isa): Add PTX_ISA_SM53 ISA level
	to enumeration.
	* config/nvptx/nvptx.opt: Add sm_53 to -misa.
	* config/nvptx/nvptx-modes.def: Add support for HFmode.
	* config/nvptx/nvptx.h (TARGET_SM53):
	New helper macro to conditionalize functionality on target ISA.
	* config/nvptx/nvptx-c.c (nvptx_cpu_cpp_builtins): Add __PTX_SM__
	support for the new ISA levels.
	* config/nvptx/nvptx.c (nvtx_ptx_type_from_mode): Support new HFmode
	with the ".f16" suffix/qualifier.
	(nvptx_file_start): Add support for TARGET_SM53.
	(nvptx_omp_device_kind_arch_isa): Add support for TARGET_SM53
	and tweak TARGET_SM35.
	(nvptx_scalar_mode_supported_p): Target hook with conditional
	HFmode support on TARGET_SM53 and higher.
	(nvptx_libgcc_floating_mode_supported_p): Likewise.
	(TARGET_SCALAR_MODE_SUPPORTED_P): Use nvptx_scalar_mode_supported_p.
	(TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P): Likewise, use new hook.
	* config/nvptx/nvptx.md (*movhf_insn): New define_insn.
	(movhf): New define_expand for HFmode moves.
	(addhf3, subhf3, mulhf, extendhf<mode>2, trunc<mode>hf2): New
	instructions conditional on TARGET_SM53 (i.e. -misa=sm_53).

gcc/testsuite/ChangeLog:

	* gcc.target/nvptx/float16-1.c: New test case.
2021-12-12 13:18:49 +01:00
Jan Hubicka
e93809f623 Terminate BB analysis on NULL memory access in ipa-pure-const and ipa-modref
As discussed in the PR, we miss some optimization becuase
gimple-ssa-isolate-paths turns NULL memory accesses to volatile and adds
__builtin_trap after them.  This is seen as a side-effect by IPA analysis
and additionally the (fully unreachable) builtin_trap is believed to load
all global memory.

I think we should think of less intrusive gimple representation of this, but
it is also easy enough to special case that in IPA analysers as done in
this patch.  This is a win even if we improve the representation since
gimple-ssa-isolate-paths is run late and this way we improve optimization
early.

This affects 1623 functions during cc1plus link.

Bootstrapped/regtested x86_64-linux, comitted.

gcc/ChangeLog:

2021-12-12  Jan Hubicka  <hubicka@ucw.cz>

	PR ipa/103665
	* ipa-modref.c (modref_access_analysis::analyze): Terminate BB
	analysis on NULL memory access.
	* ipa-pure-const.c (analyze_function): Likewise.
2021-12-12 11:38:13 +01:00
GCC Administrator
e8decbe783 Daily bump. 2021-12-12 00:16:45 +00:00