Commit Graph

192702 Commits

Author SHA1 Message Date
Iain Buclaw
31350635bf d: Merge upstream dmd 4d1bfcf14, druntime 9ba9a6ae, phobos c0cc5e917.
D front-end changes:

    - Import dmd v2.099.1.
    - Added `@mustuse' attribute, implmenting DIP 1038.
    - Added `.tupleof` property for static arrays

D runtime changes:

    - Import druntime v2.099.1.

Phobos changes:

    - Import phobos v2.099.1.
    - Zlib bindings have been updated to 1.2.12.

gcc/d/ChangeLog:

	* Make-lang.in (D_FRONTEND_OBJS): Add d/common-bitfields.o,
	d/mustuse.o.
	* d-ctfloat.cc (CTFloat::isIdentical): Don't treat NaN values as
	identical.
	* dmd/MERGE: Merge upstream dmd 4d1bfcf14.
	* expr.cc (ExprVisitor::visit (VoidInitExp *)): New.

libphobos/ChangeLog:

	* libdruntime/MERGE: Merge upstream druntime 9ba9a6ae.
	* src/MERGE: Merge upstream phobos c0cc5e917.
2022-04-13 15:02:57 +01:00
Richard Biener
ca145c6306 tree-optimization/105263 - reassoc and DFP
reassoc has certain tricks which in the end depend on the ability
to undo them.  For DFP creating a -1. constant is easy but
re-identifying is appearantly not - real_minus_onep rejects those
outright for DFP.  So we have to disable (at least) this one trick.

2022-04-13  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/105263
	* tree-ssa-reassoc.cc (try_special_add_to_ops): Do not consume
	negates in multiplication chains with DFP.

	* gcc.dg/pr105263.c: New testcase.
2022-04-13 15:59:14 +02:00
Jakub Jelinek
29c46490de tree.cc: Use useless_type_conversion_p in tree_builtin_call_types_compatible_p while in gimple form [PR105253]
tree_builtin_call_types_compatible_p uses TYPE_MAIN_VARIANT comparisons
or tree_nop_conversion_p to ensure a builtin has correct GENERIC arguments.
Unfortunately this regressed when get_call_combined_fn is called during
GIMPLE optimizations.  E.g. when number_of_iterations_popcount is called,
it doesn't ensure TYPE_MAIN_VARIABLE compatible argument type, it picks
__builtin_popcount{,l,ll} based just on types' precision and doesn't
fold_convert the arg to the right type.  We are in GIMPLE, such conversions
are useless...
So, either we'd need to fix number_of_iterations_popcount to add casts
and inspect anything else that creates CALL_EXPRs late, or we can
in tree_builtin_call_types_compatible_p just use the GIMPLE type
comparisons (useless_type_conversion_p) when we are in GIMPLE form and
the TYPE_MAIN_VARIANT comparison or tree_nop_conversion_p test otherwise.

I think especially this late in stage4 the latter seems safer to me.

2022-04-13  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/105253
	* tree.cc (tree_builtin_call_types_compatible_p): If PROP_gimple,
	use useless_type_conversion_p checks instead of TYPE_MAIN_VARIANT
	comparisons or tree_nop_conversion_p checks.

	* gcc.target/i386/pr105253.c: New test.
2022-04-13 15:44:51 +02:00
Jakub Jelinek
13c32c1984 c++: Treat alignas align_expr and aligned attribute's operand as manifestly constant evaluation [PR105233]
The following testcase fails, because we only constant evaluate the
alignas argument as non-manifestly constant-evaluated and as
__builtin_is_constant_evaluated appears, we make it non-constant
(the reason is that we often try to evaluate some expression without
manifestly_const_eval perhaps even multiple times before actually
evaluating it with manifestly_const_eval (e.g. when folding for warnings
and in many other places), and we don't want __builtin_is_constant_evaluated
to evaluate to false in those cases, because we could get a different
result from when we actually evaluate it with manifestly_const_eval
set).
Now, for alignas the standard seems to be clear, it says the
argument is constant-expression, which means we should
manifestly-constant-eval it.
Attributes are a fuzzy area, they are extensions and various attributes
take e.g. identifiers, or string literals etc. as arguments.

Either we can just treat alignas as manifestly-const-eval, for that
we'd need some way how to differentiate between alignas and gnu::aligned
or aligned attribute.

Another possibility is what the patch below implements, treat
both alignas and gnu::aligned and aligned attribute's argument as
manifestly-const-eval and not do that for other attributes.

Another is to go through all attributes and figure out for which
such treatment is useful (e.g. those that expect INTEGER_CST as argument),
and either add a new column in the attribute table or have another table
in the C++ FE to find out which attribute needs that.

Another is do that for all the attribute arguments that are EXPR_P
and see what breaks (bet that it could be quite risky this late in
GCC 12 cycle and especially for backporting).

2022-04-13  Jakub Jelinek  <jakub@redhat.com>

	PR c++/105233
	* decl2.cc (cp_check_const_attributes): For aligned attribute
	pass manifestly_const_eval=true to fold_non_dependent_expr.

	* g++.dg/cpp2a/is-constant-evaluated13.C: New test.
2022-04-13 15:43:34 +02:00
Martin Jambor
dd61ee6fde
testsuite: Increase auto-inlining param in gcc.dg/ipa/remref-7.c (PR 105183)
A scan dump of testsuite gcc.dg/ipa/remref-7.c fails on a number of
platforms.  I investigated only i?86-*-* with -mno-sse but assume the
issue is the same on all of the affected platform.

Because function bar is not inlined there even though it is only
called once, the process that is being tested is simply not triggered.
This can be "fixed" by increasing parameter max-inline-insns-auto to
something high, I randomly picked 100.

I have only manually tested the change but hopefully that is enough.

gcc/testsuite/ChangeLog:

2022-04-08  Martin Jambor  <mjambor@suse.cz>

	PR testsuite/105183
	* gcc.dg/ipa/remref-7.c: Add --param max-inline-insns-auto=100 to options.
2022-04-13 15:09:29 +02:00
Marek Polacek
85ae54e18b c++: ambiguous call not diagnosed after DR2352 [PR97296]
DR 2352 changed the definitions of reference-related (so that it uses
"similar type" instead of "same type") and of reference-compatible (use
a standard conversion sequence).  That means that reference-related is
now more broad, which means that we will be binding more things directly.

The original patch for DR 2352 caused some problems, which were fixed in
r276251 by creating a "fake" ck_qual in direct_reference_binding, so
that in

  void f(int *); // #1
  void f(const int * const &); // #2
  int *x;
  int main()
  {
    f(x); // call #1
  }

we call #1.  The extra ck_qual in #2 causes compare_ics to select #1,
which is a better match for "int *" because then we don't have to do
a qualification conversion.

Let's turn to the problem in this PR.  We have

  void f(const int * const &); // #1
  void f(const int *); // #2
  int *x;
  int main()
  {
    f(x);
  }

We arrive in compare_ics to decide which one is better. The ICS for #1
looks like

    ck_ref_bind      <-    ck_qual         <-   ck_identity
  const int *const &     const int *const         int *

and the ICS for #2 is

    ck_qual     <-  ck_rvalue   <-  ck_identity
  const int *          int *           int *

We strip the reference and then comp_cv_qual_signature when comparing two
ck_quals sees that "const int *" is a proper subset of "const int *const"
and we return -1.  But that's wrong; presumably the top-level "const"
should be ignored and the call should be ambiguous.  This patch adjust
the type of the "fake" ck_qual so that this problem doesn't arise.

	PR c++/97296

gcc/cp/ChangeLog:

	* call.cc (direct_reference_binding): strip_top_quals when creating
	a ck_qual.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/ref-bind4.C: Add dg-error.
	* g++.dg/cpp0x/ref-bind8.C: New test.
2022-04-13 08:40:02 -04:00
Richard Biener
9645279722 middle-end/105259 - adjust gcc.target/i386/auto-init-4.c
This adjusts the FAILing testcase to only check for the pieces
that work.  The bug tracks improving pattern-init for long double.

2022-04-13  Richard Biener  <rguenther@suse.de>

	PR middle-end/105259
	* gcc.target/i386/auto-init-4.c: Adjust.
2022-04-13 10:43:55 +02:00
Hongyu Wang
522f25e90c i386: Fix infinite loop under -mrelax-cmpxchg-loop [PR 103069]
For -mrelax-cmpxchg-loop which relaxes atomic_fetch_<logic> loops,
there is a missing set to %eax when compare fails, which would result
in infinite loop in some benchmark. Add set to %eax to avoid it.

gcc/ChangeLog:

	PR target/103069
	* config/i386/i386-expand.cc (ix86_expand_cmpxchg_loop):
	  Add missing set to target_val at pause label.
2022-04-13 16:17:27 +08:00
Jakub Jelinek
41f8f8b8a4 attribs: Restrict decl_attributes DECL_FUNCTION_SPECIFIC_TARGET changes to targets that care about target attributes/pragmas [PR105234]
The following code is rejected e.g. on mips64el-linux (but I think many
other targets which don't support target attribute or pragma).
The problem is that the change to decl_attributes below is done
unconditionally and with just #pragma GCC push_options/pop_options pair
we have target_option_default_node NULL, but after popping options
target_option_current_node becomes non-NULL and this decl_attribute
spot fills in DECL_FUNCTION_SPECIFIC_TARGET of a subset of a functions.
Those appearing before push_options/pop_options will have it NULL and
as target_option_default_node is also NULL on those targets, the default
can_inline_p will refuse to inline any functions defined with NULL
DECL_FUNCTION_SPECIFIC_TARGET into any function with non-NULL
DECL_FUNCTION_SPECIFIC_TARGET (even when nothing in the options really
changed).

The following patch restricts that snippet to targets that care (initialize
target_option_default_node to non-NULL to the command line options early)
which include all targets that actually implement target attribute and/or
pragma.

2022-04-13  Jakub Jelinek  <jakub@redhat.com>

	PR target/105234
	* attribs.cc (decl_attributes): Don't set
	DECL_FUNCTION_SPECIFIC_TARGET if target_option_default_node is
	NULL.

	* gcc.c-torture/compile/pr105234.c: New test.
2022-04-13 10:12:56 +02:00
Richard Biener
4e892de677 tree-optimization/105250 - adjust fold_convertible_p PR105140 fix
The following reverts the original PR105140 fix and goes for instead
applying the additional fold_convert constraint for VECTOR_TYPE
conversions also to fold_convertible_p.  I did not try sanitizing
all of this at this point.

2022-04-13  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/105250
	* fold-const.cc (fold_convertible_p): Revert
	r12-7979-geaaf77dd85c333, instead check for size equality
	of the vector types involved.

	* gcc.dg/pr105250.c: New testcase.
2022-04-13 09:55:56 +02:00
Richard Biener
6e609e0010 Revert "tree-optimization/104912 - ensure cost model is checked first"
This reverts commit ac8340ee4d.
2022-04-13 09:55:13 +02:00
Richard Biener
ac8340ee4d tree-optimization/104912 - ensure cost model is checked first
The following makes sure that when we build the versioning condition
for vectorization including the cost model check, we check for the
cost model and branch over other versioning checks.  That is what
the cost modeling assumes, since the cost model check is the only
one accounted for in the scalar outside cost.  Currently we emit
all checks as straight-line code combined with bitwise ops which
can result in surprising ordering of checks in the final assembly.

Since loop_version accepts only a single versioning condition
the splitting is done after the fact.

The result is a 1.5% speedup of 416.gamess on x86_64 when compiling
with -Ofast and tuning for generic or skylake.  That's not enough
to recover from the slowdown when vectorizing but it now cuts off
the expensive alias versioning test.

2022-03-21  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/104912
	* tree-vect-loop-manip.cc (vect_loop_versioning): Split
	the cost model check to a separate BB to make sure it is
	checked first and not combined with other version checks.
2022-04-13 09:53:53 +02:00
Jakub Jelinek
ccb5e63837 scev: Fix a comment typo
When looking at the kernel __popcountdi2 issue, I've noticed a comment typo.

2022-04-13  Jakub Jelinek  <jakub@redhat.com>

	* tree-scalar-evolution.cc (expression_expensive_p): Fix a comment typo.
2022-04-13 09:47:45 +02:00
Jakub Jelinek
db14bb4c6b libgomp: Fix a documentation typo
This fixes a typo in the 5.0 feature support table.

2022-04-13  Jakub Jelinek  <jakub@redhat.com>

	* libgomp.texi: Fix a typo - mutexinouset -> mutexinoutset.
2022-04-13 09:46:53 +02:00
Alexandre Oliva
c1ff207af6 ppc: testsuite: skip pr60203 on no ldbl128
If neither 128-bit long double format is available, skip pr60203.c.


for  gcc/testsuite/ChangeLog

	* gcc.target/powerpc/pr60203.c: Skip on no 128-bit long double.
2022-04-12 22:41:46 -03:00
Alexandre Oliva
6b7cc72947 ppc: testsuite: PROMOTE_MODE fallout pr56605 [PR102146]
The test expects a compare of DImode values, but after the removal of
PROMOTE_MODE from rs6000/, we get SImode.  Adjust the expectations.


for  gcc/testsuite/ChangeLog

	PR target/102146
	* gcc.target/powerpc/pr56605.c: Accept SImode compare operand.
2022-04-12 22:41:45 -03:00
Xi Ruoyao
bb50967fa4
mips: testsuite: enforce -ffat-lto-objects for pr102024-4.c
The body of func is optimized away with -flto -fno-fat-lto-objects, so
the psABI inform is not emitted, causing a test failure.

gcc/testsuite/

	* gcc.target/mips/pr102024-4.c (dg-options): Add
	-ffat-lto-objects.
2022-04-13 09:28:05 +08:00
GCC Administrator
504dae1d37 Daily bump. 2022-04-13 00:16:34 +00:00
Jonathan Wakely
3c742621ed libstdc++: Prefer to use mmap instead of malloc in libbacktrace
As reported in PR libbacktrace/105240, libbacktrace leaks memory when
using malloc for allocations. I originally thought it would be simpler
to just use malloc unconditionally (because it's supported on all
targets) but the leaks make that problematic.

This adds libbacktrace's detection for mmap to the libstdc++
configury, so that we use mmap.c and mmapio.c when possible. This avoids
the leaks seen previously, at least on linux.

libstdc++-v3/ChangeLog:

	* acinclude.m4 (GLIBCXX_ENABLE_BACKTRACE): Check for mmap.
	* config.h.in: Regenerate.
	* configure: Regenerate.
2022-04-12 22:38:31 +01:00
Jonathan Wakely
b2c007b87d libstdc++: shrink-to-fit in std::basic_stacktrace::current(skip, max)
If a large stacktrace is reduced to a max depth that is less than half
the capacity it will now be reallocated to remove the unused capacity.

libstdc++-v3/ChangeLog:

	* include/std/stacktrace (basic_stacktrace::current): Reallocate
	a smaller container if the unused capacity is larger than the
	used size.
2022-04-12 22:38:31 +01:00
Jonathan Wakely
7cf8875995 libstdc++: Use allocator to construct std::stacktrace_entry objects
Because std::basic_stacktrace<A> is an allocator-aware container its
elements should be initialized using allocator_traits<A>::construct and
destroyed using allocator_traits<A>::destroy.

This adds new _M_clone and _M_assign helper functions to construct
elements correctly and uses those functions instead of calling
std::uninitialized_copy_n.

The _Impl::_M_destroy function needs to be passed an allocator to
destroy the elements correctly, so is replaced by _M_resize which can
also be used to trim the container to a smaller size.

Because destroying and creating std::stacktrace_entry objects is cheap,
the copy/move assignment operators can just destroy all existing
elements and use _Impl._M_clone or _Impl._M_assign to create new ones.

libstdc++-v3/ChangeLog:

	* include/std/stacktrace (basic_stacktrace): Use _Impl::_M_clone
	or _Impl::_M_assign to initialize elements in allocated storage.
	(basic_stacktrace::_M_clear()): Use _Impl::_M_resize instead of
	_Impl::_M_destroy.
	(basic_stacktrace::_Impl::_M_destroy()): Replace with ...
	(basic_stacktrace::_Impl::_M_resize(size_type, allocator&)): New
	function.
	(basic_stacktrace::_Impl::_M_push_back): Use _M_xclone. Construct
	new element using allocator.
	(basic_stacktrace::_Impl::_M_clone): New function.
	(basic_stacktrace::_Impl::_M_xclone): New function.
	(basic_stacktrace::_Impl::_M_assign): New function.
2022-04-12 22:38:31 +01:00
Jonathan Wakely
e48933f00d libstdc++: Use nothrow new in std::stacktrace
We can avoid the overhead of handling a bad_alloc exception from
std::allocator<std::stacktrace_entry>::allocate by just calling the
nothrow operator new instead.

libstdc++-v3/ChangeLog:

	* include/std/stacktrace (basic_stacktrace::_Impl::_M_allocate):
	Use nothrow new instead of try block for std::allocator.
	(basic_stacktrace::_Impl::_M_deallocate): Use delete for
	std::allocator.
2022-04-12 22:38:31 +01:00
Jonathan Wakely
2ce0f5185b libstdc++: Reduce memory usage in std::stacktrace::current
This adds an alternative callback for use in the overload of
basic_stacktrace::current that takes a max_depth parameter. The new
callback will not allow the container to grow past the initial capacity,
which is set to the specified maximum depth.  This avoids allocating
memory for hundreds of frames only to discard them again because of a
small maximum depth limit.

For larger maximum depths the normal callback is used, with a smaller
initial capacity that can grow as needed. The container will be resized
to the given max depth after the entire backtrace has been produced
(relying on the fact that std::stacktrace_entry objects are trivially
destructible to elide their destruction).

Currently the value for "larger" limits is 128, so a max depth <= 128
will allocate capacity for exactly that many frames. A larger max depth
(or an unspecified max depth) will use an initial capacity of 64 frames
and grow as needed. Since each frame is only a uintptr_t value it might
be reasonable to increase the first value so that memory usage can be
capped for larger maximum depths.

This change also delays the creation of the libbacktrace state until we
actually need it, so that the state is not created if allocation fails.

libstdc++-v3/ChangeLog:

	* include/std/stacktrace (basic_stacktrace::current): Replace
	calls to _M_reserve and _S_curr_cb with call to _M_prepare.
	Check return value of backtrace_simple when max depth given.
	(basic_stacktrace::_M_reserve): Remove.
	(basic_stacktrace::_S_curr_cb): Remove.
	(basic_stacktrace::_M_prepare(size_type)): New function to
	reserve initial capacity and return callback.
	(basic_stacktrace::_Impl::_M_allocate): Remove check for 0 < n
	and remove redundant zeroing of _M_frames and _M_capacity.
	(basic_stacktrace::_Impl::_M_push_back): Add [[unlikely]]
	attribute. Assign _Impl instead of swapping.
	* testsuite/19_diagnostics/stacktrace/current.cc: New test.
2022-04-12 22:38:31 +01:00
Antoni Boucher
6e5ad1cc24 libgccjit: Add support for setting the alignment [PR104293]
gcc/jit/
	PR jit/104293
	* docs/_build/texinfo/libgccjit.texi: Regenerate.
	* docs/topics/compatibility.rst (LIBGCCJIT_ABI_24): New ABI tag.
	* docs/topics/expressions.rst: Add documentation for the
	functions gcc_jit_lvalue_set_alignment and
	gcc_jit_lvalue_get_alignment.
	* jit-playback.h: New function (set_alignment).
	* jit-recording.cc: New function (set_alignment).
	* jit-recording.h: New functions (set_alignment, get_alignment)
	and new field (m_alignment).
	* libgccjit.cc: New functions (gcc_jit_lvalue_get_alignment,
	gcc_jit_lvalue_set_alignment)
	* libgccjit.h: New functions (gcc_jit_lvalue_get_alignment,
	gcc_jit_lvalue_set_alignment)
	* libgccjit.map (LIBGCCJIT_ABI_24): New ABI tag.

gcc/testsuite/
	PR jit/104293
	* jit.dg/all-non-failing-tests.h: Mention
	test-setting-alignment.
	* jit.dg/test-setting-alignment.c: New test.
2022-04-12 17:25:04 -04:00
Antoni Boucher
79e1a6fb9b libgccjit: Add function to hide stderr logs [PR104073]
gcc/jit/
	PR jit/104073
	* docs/_build/texinfo/libgccjit.texi: Regenerate.
	* docs/topics/compatibility.rst (LIBGCCJIT_ABI_23): New ABI tag.
	* docs/topics/contexts.rst: Add documentation for the new
	function gcc_jit_context_set_bool_print_errors_to_stderr.
	* jit-common.h: New enum value
	(INNER_BOOL_OPTION_PRINT_ERRORS_TO_STDERR).
	* jit-recording.cc: Handle the new option
	INNER_BOOL_OPTION_PRINT_ERRORS_TO_STDERR.
	* libgccjit.cc: New function
	(gcc_jit_context_set_bool_print_errors_to_stderr).
	* libgccjit.h: New function
	(gcc_jit_context_set_bool_print_errors_to_stderr).
	* libgccjit.map (LIBGCCJIT_ABI_23): New ABI tag.
2022-04-12 17:23:18 -04:00
Antoni Boucher
5780ff348a libgccjit: Add support for register variables [PR104072]
gcc/jit/
	PR jit/104072
	* docs/_build/texinfo/libgccjit.texi: Regenerate.
	* docs/topics/compatibility.rst (LIBGCCJIT_ABI_22): New ABI tag.
	* docs/topics/expressions.rst: Add documentation for the
	function gcc_jit_lvalue_set_register_name.
	* jit-playback.h: New function (set_register_name).
	* jit-recording.cc: New function (set_register_name) and add
	support for register variables.
	* jit-recording.h: New field (m_reg_name) and new function
	(set_register_name).
	* libgccjit.cc: New function (gcc_jit_lvalue_set_register_name).
	* libgccjit.h: New function (gcc_jit_lvalue_set_register_name).
	* libgccjit.map (LIBGCCJIT_ABI_22): New ABI tag.

gcc/
	PR jit/104072
	* reginfo.cc: New functions (clear_global_regs_cache,
	reginfo_cc_finalize) to avoid an issue where compiling the same
	code multiple times gives an error about assigning the same
	register to 2 global variables.
	* rtl.h: New function (reginfo_cc_finalize).
	* toplev.cc: Call it.

gcc/testsuite/
	PR jit/104072
	* jit.dg/all-non-failing-tests.h: Add new
	test-register-variable.
	* jit.dg/harness.h: Add -fdiagnostics-color=never to context's
	command-line options.
	* jit.dg/test-error-register-variable-bad-name.c: New test.
	* jit.dg/test-error-register-variable-size-mismatch.c: New test.
	* jit.dg/test-register-variable.c: New test.
2022-04-12 17:20:30 -04:00
Antoni Boucher
30f7c83e9c libgccjit: Add support for bitcasts [PR104071]
gcc/jit/
	PR jit/104071
	* docs/_build/texinfo/libgccjit.texi: Regenerate.
	* docs/topics/compatibility.rst (LIBGCCJIT_ABI_21): New ABI tag.
	* docs/topics/expressions.rst: Add documentation for the
	function gcc_jit_context_new_bitcast.
	* jit-playback.cc: New function (new_bitcast).
	* jit-playback.h: New function (new_bitcast).
	* jit-recording.cc: New functions (new_bitcast,
	bitcast::replay_into, bitcast::visit_children,
	bitcast::make_debug_string, bitcast::write_reproducer).
	* jit-recording.h: New class (bitcast) and new function
	(new_bitcast, bitcast::replay_into, bitcast::visit_children,
	bitcast::make_debug_string, bitcast::write_reproducer,
	bitcast::get_precedence).
	* libgccjit.cc: New function (gcc_jit_context_new_bitcast)
	* libgccjit.h: New function (gcc_jit_context_new_bitcast)
	* libgccjit.map (LIBGCCJIT_ABI_21): New ABI tag.

gcc/testsuite/
	PR jit/104071
	* jit.dg/all-non-failing-tests.h: Add new test-bitcast.
	* jit.dg/test-bitcast.c: New test.
	* jit.dg/test-error-bad-bitcast.c: New test.
	* jit.dg/test-error-bad-bitcast2.c: New test.

gcc/
	PR jit/104071
	* toplev.cc: Call the new function tree_cc_finalize in
	toplev::finalize.
	* tree.cc: New functions (clear_nonstandard_integer_type_cache
	and tree_cc_finalize) to clear the cache of non-standard integer
	types to avoid having issues with some optimizations of
	bitcast where the SSA_NAME will have a size of a cached
	integer type that should have been invalidated, causing a
	comparison of integer constant to fail.
	* tree.h: New function (tree_cc_finalize).
2022-04-12 17:17:50 -04:00
Antoni Boucher
af80ea97b6 libgccjit: Add support for sized integer types, including 128-bit integers [PR95325]
gcc/jit/
	PR target/95325
	* docs/_build/texinfo/libgccjit.texi: Regenerate
	* docs/topics/compatibility.rst (LIBGCCJIT_ABI_20): New ABI tag.
	* docs/topics/types.rst: Add documentation for the new types
	GCC_JIT_TYPE_UINT8_T, GCC_JIT_TYPE_UINT16_T,
	GCC_JIT_TYPE_UINT32_T, GCC_JIT_TYPE_UINT64_T,
	GCC_JIT_TYPE_UINT128_T, GCC_JIT_TYPE_INT8_T, GCC_JIT_TYPE_INT16_T,
	GCC_JIT_TYPE_INT32_T, GCC_JIT_TYPE_INT64_T, GCC_JIT_TYPE_INT128_T and
	new functions (gcc_jit_compatible_types, gcc_jit_type_get_size).
	* jit-builtins.cc: Add support for BT_UINT128.
	* jit-common.h: Update the value of NUM_GCC_JIT_TYPES.
	* jit-playback.cc: Add support for the sized integer types.
	* jit-recording.cc: Add support for the sized integer types.
	* jit-recording.h: Add support for comparing integer types
	and new function (is_signed).
	* libgccjit.cc (gcc_jit_compatible_types): New.
	(gcc_jit_type_get_size) New.
	* libgccjit.h: New enum variants for gcc_jit_types
	(GCC_JIT_TYPE_UINT8_T, GCC_JIT_TYPE_UINT16_T,
	GCC_JIT_TYPE_UINT32_T, GCC_JIT_TYPE_UINT64_T,
	GCC_JIT_TYPE_UINT128_T, GCC_JIT_TYPE_INT8_T,
	GCC_JIT_TYPE_INT16_T, GCC_JIT_TYPE_INT32_T,
	GCC_JIT_TYPE_INT64_T, GCC_JIT_TYPE_INT128_T) and new functions
	(gcc_jit_compatible_types, gcc_jit_type_get_size).
	* libgccjit.map (LIBGCCJIT_ABI_20): New ABI tag.

gcc/testsuite/
	PR target/95325
	* jit.dg/test-types.c: Add tests for sized integer types.
2022-04-12 17:16:45 -04:00
Jason Merrill
791a968630 c++: local function versioning [PR104669]
There were two problems with this testcase: we weren't copying the target
attribute from the second declaration to the global alias for the first
one (duplicate_decls hunk), and then we were treating the third one as
matching the earlier one even though both are versioned (decls_match hunk).
The latter change required a fix to find_last_decl (used for attribute
mismatch warnings) to give up if we see a versioned function, as in that
case we can't determine whether the decls match, because we are still in the
process of setting the attributes on the new decl.

	PR c++/104669

gcc/cp/ChangeLog:

	* decl.cc (decls_match): Compare versions even if not recording.
	(duplicate_decls): Propagate attributes to alias.
	* decl2.cc (find_last_decl): Give up if versioned.

gcc/testsuite/ChangeLog:

	* g++.target/i386/mv31.C: New test.
2022-04-12 16:46:58 -04:00
Jason Merrill
164c6a1c5d c++: non-array new alignment [PR102071]
While considering the PR102071 patch for backporting, I noticed that I was
considering the alignment of the array new cookie even when there isn't one
because we aren't allocating an array.

	PR c++/102071

gcc/cp/ChangeLog:

	* init.cc (build_new_1): Check array_p for alignment.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp1z/aligned-new9.C: Add single-object test.
2022-04-12 16:45:41 -04:00
Thomas Schwinge
aa7874596b Let nvptx-as figure out the target architecture [PR97348]
... now that it has been enhanced to do so.

This is a follow-up to PR97348 commit 383400a607
"[nvptx] Set -misa=sm_35 by default".

	gcc/
	PR target/97348
	* config/nvptx/nvptx.h (ASM_SPEC): Don't set.
	* config/nvptx/nvptx.opt (misa): Adjust comment.
2022-04-12 19:02:41 +02:00
Thomas Schwinge
71863c997b Revert "[nvptx] Use --no-verify for sm_30"
This reverts commit 12fa7641ce.
2022-04-12 19:02:40 +02:00
Thomas Schwinge
0c9bc1a227 Revert "[nvptx] Fix ASM_SPEC workaround for sm_30"
This reverts commit bf4832d6fa.
2022-04-12 19:02:40 +02:00
Patrick Palka
e2c7070ac7 c++: requires-expr in pack expansion using pack [PR103105]
Here after dependent substitution of {Ts...} into the alias 'wrap',
since we never partially instantiate a requires-expr, we end up with a
requires-expr whose REQUIRES_EXPR_EXTRA_ARGS contains an
ARGUMENT_PACK_SELECT (which just resolves to the parameter pack Ts).
Then when hashing the resulting dependent specialization of A, we crash
from iterative_hash_template_arg since it deliberately doesn't handle
ARGUMENT_PACK_SELECT.

Like in r12-7102-gdb5f1c17031ad8, it seems the right fix here is to
resolve ARGUMENT_PACK_SELECT arguments before storing them into an
extra args tree (such as REQUIRES_EXPR).

	PR c++/103105

gcc/cp/ChangeLog:

	* pt.cc (build_extra_args): Call preserve_args.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/concepts-requires29.C: New test.
	* g++.dg/cpp2a/concepts-requires29a.C: New test.
2022-04-12 12:58:18 -04:00
Richard Biener
7c7e78e9c4 ipa/104303 - revert overly conservative DCE change
The following reverts the DCE change back to the original behavior
which should be handled well during the propagation stage.  That
should fix the failures Thomas Schwinge is reporting.

2022-04-12  Richard Biener  <rguenther@suse.de>

	PR ipa/104303
	* tree-ssa-dce.cc (mark_stmt_if_obviously_necessary): Do not
	include local escaped memory as obviously necessary stores.
2022-04-12 16:43:08 +02:00
Richard Earnshaw
62082d278d arm: fix testsuite failure of reg_equal_test.c [PR101755]
The test failure in PR101755 is due to the gimple optimizers getting
smarter.  But really we are just testing that RTL expansion is doing
the right thing and annotating a constant accordingly.  So rework the
test to use GIMPLE input and simplify the code entirely.  Also, this
test only ever worked on architecture versions with the MOVW/MOVT
instructions, so check for this before running.

gcc/testsuite/ChangeLog:

	PR target/101755
	* gcc.target/arm/reg_equal_test.c: Convert to gimple test.  Restrict
	to architectures with MOVW/MOVT.
2022-04-12 13:38:44 +01:00
Richard Biener
31cccadcf2 tree-optimization/105235 - clean EH in execute_cse_conv_1
When a FP conversion is removed we have to eventually clean EH.

2022-04-12  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/105235
	* tree-ssa-math-opts.cc (execute_cse_conv_1): Clean EH and
	return whether the CFG changed.
	(execute_cse_sincos_1): Adjust.

	* g++.dg/opt/pr105235-1.C: New testcase.
2022-04-12 11:48:30 +02:00
Przemyslaw Wirkus
1210fd6e69 arm: remove unnecessary armv9-a multilib variant [PR104144]
Remove the armv9-a specific multilib variants.  Instead, arrange to
use either the armv8-a multilibs or the armv7-a versions, depeding on
the configuration.  This eliminates the need to have a version of gas
that understands --march=armv9-a when building GCC.  Very little, if
anything in the standard libraries directly uses Armv9-a features
anyway.

Also remove the +crc variant rules for Armv9-a.  CRC is an implicit
part of Armv9-a, so doesn't have a explicit feature to handle it.

gcc/ChangeLog:

	PR target/104144
	* config/arm/t-aprofile (MULTI_ARCH_OPTS_A): Remove Armv9-a options.
	(MULTI_ARCH_DIRS_A): Remove Armv9-a diretories.
	(MULTILIB_REQUIRED): Don't require Armv9-a libraries.
	(MULTILIB_MATCHES): Treat Armv9-a as equivalent to Armv8-a.
	(MULTILIB_REUSE): Remove remap rules for Armv9-a.
	* config/arm/t-multilib (v9_a_nosimd_variants): Delete.
	(MULTILIB_MATCHES): Remove mappings for v9_a_nosimd_variants.

gcc/testsuite/ChangeLog:

	PR target/104144
	* gcc.target/arm/multilib.exp: Updated tests.
2022-04-12 10:40:23 +01:00
Richard Biener
1bd96873cf tree-optimization/105232 - handle overly large sizes in component_ref_size
The following properly checks tree_fits_poly_int64_p before converting
a size to a poly_int64.

2022-04-12  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/105232
	* tree.cc (component_ref_size): Bail out for too large
	or non-constant sizes.
2022-04-12 10:53:46 +02:00
Richard Biener
62d5bb0f35 tree-optimization/105226 - avoid splitting abnormal edges
Vectorizer loop versioning tries to version outer loops if possible
but fails to check whether it can actually split the single exit
edge as it will do.

2022-04-12  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/105226
	* tree-vect-loop-manip.cc (vect_loop_versioning): Verify
	we can split the exit of an outer loop we choose to version.

	* gcc.dg/pr105226.c: New testcase.
2022-04-12 10:53:46 +02:00
Jakub Jelinek
152f243fda i386: i386-expand formatting fixes
While working on the PR105214 patch, I've noticed incorrect formatting
for a bunch of functions where the function names aren't at the start of
lines.

The following patch fixes it, though of course it isn't a regression.

2022-04-12  Jakub Jelinek  <jakub@redhat.com>

	* config/i386/i386-expand.cc (ix86_emit_i387_sinh, ix86_emit_i387_cosh,
	ix86_emit_i387_tanh, ix86_emit_i387_asinh, ix86_emit_i387_acosh,
	ix86_emit_i387_atanh, ix86_emit_i387_log1p, ix86_emit_i387_round,
	ix86_emit_swdivsf, ix86_emit_swsqrtsf,
	ix86_expand_atomic_fetch_op_loop, ix86_expand_cmpxchg_loop):
	Formatting fix.
	* config/i386/i386.cc (warn_once_call_ms2sysv_xlogues): Likewise.
2022-04-12 09:20:11 +02:00
Jakub Jelinek
d481d13786 i386: Fix ICE caused by ix86_emit_i387_log1p [PR105214]
The following testcase ICEs, because ix86_emit_i387_log1p attempts to
emit something like
  if (cond)
    some_code1;
  else
    some_code2;
and emits a conditional jump using emit_jump_insn (standard way in
the file) and an unconditional jump using emit_jump.
The problem with that is that if there is pending stack adjustment,
it isn't emitted before the conditional jump, but is before the
unconditional jump and therefore stack is adjusted only conditionally
(at the end of some_code1 above), which makes dwarf2 pass unhappy about it
but is a serious wrong-code even if it doesn't ICE.

This can be fixed either by emitting pending stack adjust before the
conditional jump as the following patch does, or by not using
  emit_jump (label2);
and instead hand inlining what that function does except for the
pending stack adjustment, like:
  emit_jump_insn (targetm.gen_jump (label2));
  emit_barrier ();
In that case there will be no stack adjustment in the sequence and
it will be done later on somewhere else.

2022-04-12  Jakub Jelinek  <jakub@redhat.com>

	PR target/105214
	* config/i386/i386-expand.cc (ix86_emit_i387_log1p): Call
	do_pending_stack_adjust.

	* gcc.dg/asan/pr105214.c: New test.
2022-04-12 09:19:11 +02:00
Jakub Jelinek
91a38e8a84 builtins: Fix up expand_builtin_int_roundingfn_2 [PR105211]
The expansion of __builtin_iround{,f,l} etc. builtins in some cases
emits calls to a different fallback builtin.  To locate the right builtin
it uses mathfn_built_in_1 with the type of the first argument.
If its TYPE_MAIN_VARIANT is {float,double,long_double}_type_node, all is
fine, but on the following testcase, because GIMPLE considers scalar
float conversions between types with the same mode as useless,
TYPE_MAIN_VARIANT of the arg's type is float32_type_node and because there
isn't __builtin_lroundf32 returns NULL and we ICE.

This patch will first try the type of the first argument of the builtin's
prototype (so that say on sizeof(double)==sizeof(long double) target it honors
whether it was a *l or non-*l call; though even that can't be 100% trusted,
user could incorrectly prototype it) and as fallback the type argument.
If neither works, doesn't fallback.

2022-04-11  Jakub Jelinek  <jakub@redhat.com>

	PR rtl-optimization/105211
	* builtins.cc (expand_builtin_int_roundingfn_2): If mathfn_built_in_1
	fails for TREE_TYPE (arg), retry it with
	TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (fndecl))) and if even that
	fails, emit call normally.

	* gcc.dg/pr105211.c: New test.
2022-04-12 09:16:06 +02:00
Andreas Krebbel
82a4c5c704 IBM zSystems: Add support for z16 as CPU name.
So far z16 was identified as arch14. After the machine has been
announced we can now add the real name.

gcc/ChangeLog:

	* common/config/s390/s390-common.cc: Rename PF_ARCH14 to PF_Z16.
	* config.gcc: Add z16 as march/mtune switch.
	* config/s390/driver-native.cc (s390_host_detect_local_cpu):
	Recognize z16 with -march=native.
	* config/s390/s390-opts.h (enum processor_type): Rename
	PROCESSOR_ARCH14 to PROCESSOR_3931_Z16.
	* config/s390/s390.cc (PROCESSOR_ARCH14): Rename to ...
	(PROCESSOR_3931_Z16): ... throughout the file.
	(s390_processor processor_table): Add z16 as cpu string.
	* config/s390/s390.h (enum processor_flags): Rename PF_ARCH14 to
	PF_Z16.
	(TARGET_CPU_ARCH14): Rename to ...
	(TARGET_CPU_Z16): ... this.
	(TARGET_CPU_ARCH14_P): Rename to ...
	(TARGET_CPU_Z16_P): ... this.
	(TARGET_ARCH14): Rename to ...
	(TARGET_Z16): ... this.
	(TARGET_ARCH14_P): Rename to ...
	(TARGET_Z16_P): ... this.
	* config/s390/s390.md (cpu_facility): Rename arch14 to z16 and
	check TARGET_Z16 instead of TARGET_ARCH14.
	* config/s390/s390.opt: Add z16 to processor_type.
	* doc/invoke.texi: Document z16 and arch14.
2022-04-12 07:58:57 +02:00
Jason Merrill
0899b22d93 c++: rodata and defaulted ctor [PR104142]
Trivial initialization shouldn't bump a variable out of .rodata; if the
result of build_aggr_init is an empty STATEMENT_LIST, throw it away.

	PR c++/104142

gcc/cp/ChangeLog:

	* decl.cc (check_initializer): Check TREE_SIDE_EFFECTS.

gcc/testsuite/ChangeLog:

	* g++.dg/opt/const7.C: New test.
2022-04-11 23:57:42 -04:00
Jason Merrill
4195fced8a c++: using operator= [PR105223]
In a template class A we normally add an implicit using A::operator= as a
placeholder for the implicitly declared operator whose signature we don't
know yet.  In my patch for PR92918 I stopped doing that if the class has an
explicit operator=, but that was wrong; an operator= taking an unrelated
type doesn't prevent the implicit declaration.

When I was working on that patch, the change was necessary to avoid another
regression, but apparently it is no longer needed.

	PR c++/105223
	PR c++/92918

gcc/cp/ChangeLog:

	* class.cc (finish_struct): Always using op=.

gcc/testsuite/ChangeLog:

	* g++.dg/template/using31.C: New test.
2022-04-11 23:57:08 -04:00
chenglulu
6afb21b824 LoongArch: Fix bug for tmpdir-g++.dg-struct-layout-1/t033.
gcc/ChangeLog:

	* config/loongarch/loongarch.cc: Fix bug for
	tmpdir-g++.dg-struct-layout-1/t033.
2022-04-12 09:13:51 +08:00
GCC Administrator
da066c4269 Daily bump. 2022-04-12 00:16:37 +00:00
Peter Bergner
d74c4c6a1b rs6000: Handle pcrel sibcalls to longcall functions [PR104894]
Before PCREL in POWER10, we were not allowed to perform sibcalls to longcall
functions since callee's return would skip the TOC restore in the caller.
However, with PCREL we can now safely perform a sibling call to longcall
functions.  The problem with the current code is that pcrel sibcall
branches to a PLT stub label even though -fno-plt was used.  The solution
here is to check for a pcrel longcall and emit an inline plt stub in
that case.

2022-04-11  Peter Bergner  <bergner@linux.ibm.com>

gcc/
	PR target/104894
	* config/rs6000/rs6000.cc (rs6000_sibcall_aix): Handle pcrel sibcalls
	to longcall functions.

gcc/testsuite/
	PR target/104894
	* gcc.target/powerpc/pr104894.c: New test.
	* gcc.target/powerpc/pr104894-2.c: New test.
2022-04-11 17:01:25 -05:00
Jason Merrill
3a5e662590 ipa: fix comment typos
gcc/ChangeLog:

	* ipa-free-lang-data.cc (free_lang_data_in_decl): Fix typos.
2022-04-11 17:40:41 -04:00