Commit Graph

191594 Commits

Author SHA1 Message Date
Richard Sandiford c48a6819d1 aarch64: Tighten general_operand predicates
This patch fixes some case in which *general_operand was used over
*nonimmediate_operand by patterns that don't accept immediates.
This avoids some complication with later patches.

gcc/
	* config/aarch64/aarch64-simd.md (aarch64_simd_vec_set<mode>): Use
	aarch64_simd_nonimmediate_operand instead of
	aarch64_simd_general_operand.
	(@aarch64_combinez<mode>): Use nonimmediate_operand instead of
	general_operand.
	(@aarch64_combinez_be<mode>): Likewise.
2022-02-09 16:57:02 +00:00
Patrick Palka ee50b4383a c++: memfn lookup consistency and using-decls [PR104432]
In filter_memfn_lookup, we weren't correctly recognizing and matching up
member functions introduced via a non-dependent using-decl.  This caused
us to crash in the below testcases in which we correctly pruned the
overload set for the non-dependent call ahead of time, but then at
instantiation time filter_memfn_lookup failed to match the selected
function (introduced in each case by a non-dependent using-decl) to the
corresponding function from the new lookup set.  Such member functions
need special handling in filter_memfn_lookup because they look exactly
the same in the old and new lookup sets, whereas ordinary member
functions that're defined in the (dependent) current class become more
specialized in the new lookup set.

This patch reworks the matching logic in filter_memfn_lookup so that it
handles (member functions introduced by) non-dependent using-decls
correctly, and is hopefully simpler overall.

	PR c++/104432

gcc/cp/ChangeLog:

	* call.cc (build_new_method_call): When a non-dependent call
	resolves to a specialization of a member template, always build
	the pruned overload set using the member template, not the
	specialization.
	* pt.cc (filter_memfn_lookup): New parameter newtype.  Simplify
	and correct how members from the new lookup set are matched to
	those from the old one.
	(tsubst_baselink): Pass binfo_type as newtype to
	filter_memfn_lookup.

gcc/testsuite/ChangeLog:

	* g++.dg/template/non-dependent19.C: New test.
	* g++.dg/template/non-dependent19a.C: New test.
	* g++.dg/template/non-dependent20.C: New test.
2022-02-09 11:33:04 -05:00
Jason Merrill 1ce5395977 c++: modules and explicit(bool) [PR103752]
We weren't streaming a C++20 dependent explicit-specifier.

	PR c++/103752

gcc/cp/ChangeLog:

	* module.cc (trees_out::core_vals): Stream explicit specifier.
	(trees_in::core_vals): Likewise.
	* pt.cc (store_explicit_specifier): No longer static.
	(tsubst_function_decl): Clear DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P.
	* cp-tree.h (lookup_explicit_specifier): Declare.

gcc/testsuite/ChangeLog:

	* g++.dg/modules/explicit-bool-1_b.C: New test.
	* g++.dg/modules/explicit-bool-1_a.H: New test.
2022-02-09 10:41:06 -05:00
Richard Biener 8f8f8c68b4 middle-end/104464 - ISEL and non-call EH #2
The following adjusts the earlier change to still allow an
uncritical replacement.

2022-02-09  Richard Biener  <rguenther@suse.de>

	PR middle-end/104464
	* gimple-isel.cc (gimple_expand_vec_cond_expr): Postpone
	throwing check to after unproblematic replacement.

	* gcc.dg/pr104464.c: New testcase.
2022-02-09 15:50:02 +01:00
Jason Merrill d80f2248c5 c++: P2493 feature test macro updates
The C++ committee just updated the values of these macros to reflect some
late C++20 papers that we implement but others don't yet; see PR103891.

gcc/c-family/ChangeLog:

	* c-cppbuiltin.cc (c_cpp_builtins): Update values
	of __cpp_constexpr and __cpp_concepts for C++20.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp23/feat-cxx2b.C: Adjust.
	* g++.dg/cpp2a/feat-cxx2a.C: Adjust.
2022-02-09 09:41:01 -05:00
Roger Sayle 2d3c477599 [PATCH] PR tree-optimization/104420: Fix checks for constant folding X*0.0
This patch resolves PR tree-optimization/104420, which is a P1 regression
where, as observed by Jakub Jelinek, the conditions for constant folding
x*0.0 are incorrect (following my patch for PR tree-optimization/96392).
The multiplication x*0.0 may yield a negative zero result, -0.0, if X is
negative (not just if x may be negative zero).  Hence (without -ffast-math)
(int)x*0.0 can't be optimized to 0.0, but (unsigned)x*0.0 can be constant
folded.  This adds a bunch of test cases to confirm the desired behaviour,
and removes an incorrect test from gcc.dg/pr96392.c which checked for the
wrong behaviour.

2022-02-09  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	PR tree-optimization/104420
	* match.pd (mult @0 real_zerop): Tweak conditions for constant
	folding X*0.0 (or X*-0.0) to HONOR_SIGNED_ZEROS when appropriate.

gcc/testsuite/ChangeLog
	PR tree-optimization/104420
	* gcc.dg/pr104420-1.c: New test case.
	* gcc.dg/pr104420-2.c: New test case.
	* gcc.dg/pr104420-3.c: New test case.
	* gcc.dg/pr104420-4.c: New test case.
	* gcc.dg/pr96392.c: Remove incorrect test.
2022-02-09 14:23:17 +00:00
Jakub Jelinek be9cd0ca8a dwarf2out: Don't call expand_expr during early_dwarf [PR104407]
As mentioned in the PR, since PR96690 r11-2834 we call rtl_for_decl_init
which can call expand_expr already during early_dwarf.  The comment and PR
explains it that the intent is to ensure the referenced vars and functions
are properly mangled because free_lang_data doesn't cover everything, like
template parameters etc.  It doesn't work well though, because expand_expr
can set DECL_RTLs e.g. on referenced vars and keep them there, and they can
be created e.g. with different MEM_ALIGN compared to what they would be
created with if they were emitted later.
So, the following patch stops calling rtl_for_decl_init and instead
for cases for which rtl_for_decl_init does anything at all walks the
initializer and ensures referenced vars or functions are mangled.

2022-02-09  Jakub Jelinek  <jakub@redhat.com>

	PR debug/104407
	* dwarf2out.cc (mangle_referenced_decls): New function.
	(tree_add_const_value_attribute): Don't call rtl_for_decl_init if
	early_dwarf.  Instead walk the initializer and try to mangle vars or
	functions referenced from it.

	* g++.dg/debug/dwarf2/pr104407.C: New test.
2022-02-09 15:17:52 +01:00
Andrew MacLeod c6bb1db76b Register non-null side effects properly.
This patch adjusts uses of nonnull to accurately reflect "somewhere in block".
It also adds the ability to register statement side effects within a block
for ranger which will apply for the rest of the block.

	PR tree-optimization/104288
	gcc/
	* gimple-range-cache.cc (non_null_ref::set_nonnull): New.
	(non_null_ref::adjust_range): Move to header.
	(ranger_cache::range_of_def): Don't check non-null.
	(ranger_cache::entry_range): Don't check non-null.
	(ranger_cache::range_on_edge): Check for nonnull on normal edges.
	(ranger_cache::update_to_nonnull): New.
	(non_null_loadstore): New.
	(ranger_cache::block_apply_nonnull): New.
	* gimple-range-cache.h (class non_null_ref): Update prototypes.
	(non_null_ref::adjust_range): Move to here and inline.
	(class ranger_cache): Update prototypes.
	* gimple-range-path.cc (path_range_query::range_defined_in_block): Do
	not search dominators.
	(path_range_query::adjust_for_non_null_uses): Ditto.
	* gimple-range.cc (gimple_ranger::range_of_expr): Check on-entry for
	def overrides.  Do not check nonnull.
	(gimple_ranger::range_on_entry): Check dominators for nonnull.
	(gimple_ranger::range_on_edge): Check for nonnull on normal edges..
	(gimple_ranger::register_side_effects): New.
	* gimple-range.h (gimple_ranger::register_side_effects): New.
	* tree-vrp.cc (rvrp_folder::fold_stmt): Call register_side_effects.

	gcc/testsuite/
	* gcc.dg/pr104288.c: New.
2022-02-09 09:09:54 -05:00
Richard Biener da2bf62d9e tree-optimization/104445 - check for vector extraction support
This adds a missing check to epilogue reduction re-use, namely
that we can do hi/lo extracts from the vector when demoting it
to the epilogue vector size.

I've chosen to add a can_vec_extract helper to optabs-query.h,
in the future we might want to simplify the vectorizers life by
handling vector-from-vector extraction via BIT_FIELD_REFs during
RTL expansion via the mode punning when the vec_extract is not
directly supported.

I'm not 100% sure we can always do the punning of the
vec_extract result to a vector mode of the same size, but then
I'm also not sure how to check for that (the vectorizer doesn't
in other places it does that at the moment, but I suppose we
eventually just go through memory there)?

2022-02-09  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/104445
	PR tree-optimization/102832
	* optabs-query.h (can_vec_extract): New.
	* optabs-query.cc (can_vec_extract): Likewise.
	* tree-vect-loop.cc (vect_find_reusable_accumulator): Check
	we can extract a hi/lo part from the larger vector, rework
	check iteration from larger to smaller sizes.

	* gcc.dg/vect/pr104445.c: New testcase.
2022-02-09 14:03:31 +01:00
H.J. Lu ab0b5fbfe9 x86: Add -m[no-]direct-extern-access
Add -m[no-]direct-extern-access and nodirect_extern_access attribute.
-mdirect-extern-access is the default.  With nodirect_extern_access
attribute, GOT is always used to access undefined data and function
symbols with nodirect_extern_access attribute, including in PIE and
non-PIE.  With -mno-direct-extern-access:

1. Always use GOT to access undefined data and function symbols,
   including in PIE and non-PIE.  These will avoid copy relocations
   in executables.  This is compatible with existing executables and
   shared libraries.
2. In executable and shared library, bind symbols with the STV_PROTECTED
   visibility locally:
   a. The address of data symbol is the address of data body.
   b. For systems without function descriptor, the function pointer is
      the address of function body.
   c. The resulting shared libraries may not be incompatible with
      executables which have copy relocations on protected symbols or
      use executable PLT entries as function addresses for protected
      functions in shared libraries.
3. Update asm_preferred_eh_data_format to select PC relative EH encoding
format with -mno-direct-extern-access to avoid copy relocation.
4. Add ix86_reloc_rw_mask for TARGET_ASM_RELOC_RW_MASK to avoid copy
relocation with -mno-direct-extern-access.

gcc/

	PR target/35513
	PR target/100593
	* config/i386/gnu-property.cc: Include "i386-protos.h".
	(file_end_indicate_exec_stack_and_gnu_property): Generate
	a GNU_PROPERTY_1_NEEDED note for -mno-direct-extern-access or
	nodirect_extern_access attribute.
	* config/i386/i386-options.cc
	(handle_nodirect_extern_access_attribute): New function.
	(ix86_attribute_table): Add nodirect_extern_access attribute.
	* config/i386/i386-protos.h (ix86_force_load_from_GOT_p): Add a
	bool argument.
	(ix86_has_no_direct_extern_access): New.
	* config/i386/i386.cc (ix86_has_no_direct_extern_access): New.
	(ix86_force_load_from_GOT_p): Add a bool argument to indicate
	call operand.  Force non-call load from GOT for
	-mno-direct-extern-access or nodirect_extern_access attribute.
	(legitimate_pic_address_disp_p): Avoid copy relocation in PIE
	for -mno-direct-extern-access or nodirect_extern_access attribute.
	(ix86_print_operand): Pass true to ix86_force_load_from_GOT_p
	for call operand.
	(asm_preferred_eh_data_format): Use PC-relative format for
	-mno-direct-extern-access to avoid copy relocation.  Check
	ptr_mode instead of TARGET_64BIT when selecting DW_EH_PE_sdata4.
	(ix86_binds_local_p): Set ix86_has_no_direct_extern_access to
	true for -mno-direct-extern-access or nodirect_extern_access
	attribute.  Don't treat protected data as extern and avoid copy
	relocation on common symbol with -mno-direct-extern-access or
	nodirect_extern_access attribute.
	(ix86_reloc_rw_mask): New to avoid copy relocation for
	-mno-direct-extern-access.
	(TARGET_ASM_RELOC_RW_MASK): New.
	* config/i386/i386.opt: Add -mdirect-extern-access.
	* doc/extend.texi: Document nodirect_extern_access attribute.
	* doc/invoke.texi: Document -m[no-]direct-extern-access.

gcc/testsuite/

	PR target/35513
	PR target/100593
	* g++.target/i386/pr35513-1.C: New file.
	* g++.target/i386/pr35513-2.C: Likewise.
	* gcc.target/i386/pr35513-1a.c: Likewise.
	* gcc.target/i386/pr35513-1b.c: Likewise.
	* gcc.target/i386/pr35513-2a.c: Likewise.
	* gcc.target/i386/pr35513-2b.c: Likewise.
	* gcc.target/i386/pr35513-3a.c: Likewise.
	* gcc.target/i386/pr35513-3b.c: Likewise.
	* gcc.target/i386/pr35513-4a.c: Likewise.
	* gcc.target/i386/pr35513-4b.c: Likewise.
	* gcc.target/i386/pr35513-5a.c: Likewise.
	* gcc.target/i386/pr35513-5b.c: Likewise.
	* gcc.target/i386/pr35513-6a.c: Likewise.
	* gcc.target/i386/pr35513-6b.c: Likewise.
	* gcc.target/i386/pr35513-7a.c: Likewise.
	* gcc.target/i386/pr35513-7b.c: Likewise.
	* gcc.target/i386/pr35513-8.c: Likewise.
	* gcc.target/i386/pr35513-9a.c: Likewise.
	* gcc.target/i386/pr35513-9b.c: Likewise.
	* gcc.target/i386/pr35513-10a.c: Likewise.
	* gcc.target/i386/pr35513-10b.c: Likewise.
	* gcc.target/i386/pr35513-11a.c: Likewise.
	* gcc.target/i386/pr35513-11b.c: Likewise.
	* gcc.target/i386/pr35513-12a.c: Likewise.
	* gcc.target/i386/pr35513-12b.c: Likewise.
2022-02-09 04:38:54 -08:00
H.J. Lu 5390a2f191 x86: Check each component of source operand for AVX_U128_DIRTY
commit 9775e465c1
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Tue Jul 27 07:46:04 2021 -0700

    x86: Don't set AVX_U128_DIRTY when zeroing YMM/ZMM register

called ix86_check_avx_upper_register to check mode on source operand.
But ix86_check_avx_upper_register doesn't work on source operand like

(vec_select:V2DI (reg/v:V4DI 23 xmm3 [orig:91 ymm ] [91])
    (parallel [
            (const_int 2 [0x2])
            (const_int 3 [0x3])
        ]))

Add ix86_avx_u128_mode_source to check mode for each component of source
operand.

gcc/

	PR target/104441
	* config/i386/i386.cc (ix86_avx_u128_mode_source): New function.
	(ix86_avx_u128_mode_needed): Return AVX_U128_ANY for debug INSN.
	Call ix86_avx_u128_mode_source to check mode for each component
	of source operand.

gcc/testsuite/

	PR target/104441
	* gcc.target/i386/pr104441-1a.c: New test.
	* gcc.target/i386/pr104441-1b.c: Likewise.
2022-02-09 04:30:13 -08:00
liuhongt 59b31f0e2d ICE: QImode(not SImode) operand should be passed to gen_vec_initv16qiqi in ashlv16qi3.
ix86_expand_vector_init expects vals to be a parallel containing
values of individual fields which should be either element mode of the
vector mode, or a vector mode with the same element mode and smaller
number of elements.

But in the expander ashlv16qi3, the second operand is SImode which
can't be directly passed to gen_vec_initv16qiqi.

gcc/ChangeLog:

	PR target/104451
	* config/i386/sse.md (<insn><mode>3): lowpart_subreg
	operands[2] from SImode to QImode.

gcc/testsuite/ChangeLog:

	PR target/104451
	* gcc.target/i386/pr104451.c: New test.
2022-02-09 17:14:35 +08:00
Richard Biener 871afdc512 middle-end/104450 - ISEL and non-call EH
The following avoids merging a vector compare with EH with a
VEC_COND_EXPR.  We should be able to do fallback expansion and if
we really are for the optimization we need quite some shuffling
to arrange for the proper EH redirection in all cases, IMHO not
worth it.

2022-02-09  Richard Biener  <rguenther@suse.de>

	PR middle-end/104450
	* gimple-isel.cc: Pass cfun around.
	(+gimple_expand_vec_cond_expr): Do not combine a throwing
	comparison with the select.

	* g++.dg/torture/pr104450.C: New testcase.
2022-02-09 10:07:29 +01:00
Richard Biener 1c827873ed target/104453 - guard call folding with NULL LHS
This guards shift builtin folding to do nothing when there is
no LHS, similar to what other foldings do.

2022-02-09  Richard Biener  <rguenther@suse.de>

	PR target/104453
	* config/i386/i386.cc (ix86_gimple_fold_builtin): Guard shift
	folding for NULL LHS.

	* gcc.target/i386/pr104453.c: New testcase.
2022-02-09 10:07:29 +01:00
Ian Lance Taylor 869fb81303 compiler: recognize Go 1.18 runtime/internal/atomic methods
The Go 1.18 library introduces specific types in runtime/internal/atomic.
Recognize and optimize the methods on those types, as we do with the
functions in runtime/internal/atomic.

While we're here avoid getting confused by methods in any other
package that we recognize specially.

	* go-gcc.cc (Gcc_backend::Gcc_backend): Define builtins
	__atomic_load_1 and __atomic_store_1.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/383654
2022-02-08 20:13:11 -08:00
Ian Lance Taylor 3ab49b1c82 compiler, internal/abi: implement FuncPCABI0, FuncPCABIInternal
The Go 1.18 standard library uses an internal/abi package with two
functions that are implemented in the compiler. This patch implements
them in the gofrontend, to support the upcoming update to 1.18.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/383514
2022-02-08 20:08:09 -08:00
Joel Teichroeb e52a683170 analyzer: Fix tests for glibc 2.35 [PR101081]
In recent versions of glibc fopen has __attribute__((malloc)).
Since we can not detect wether this attribute is present or not,
we avoid including stdio.h and instead forward declare what we
need in each test.

Signed-off-by: Joel Teichroeb <joel@teichroeb.net>

gcc/testsuite/ChangeLog:
	PR analyzer/101081
	* gcc.dg/analyzer/analyzer-verbosity-2a.c: Replace #include of
	stdio.h with declarations needed by the test.
	* gcc.dg/analyzer/analyzer-verbosity-3a.c: Likewise.
	* gcc.dg/analyzer/edges-1.c: Likewise.
	* gcc.dg/analyzer/file-1.c: Likewise.
	* gcc.dg/analyzer/file-2.c: Likewise.
	* gcc.dg/analyzer/file-paths-1.c: Likewise.
	* gcc.dg/analyzer/file-pr58237.c: Likewise.
	* gcc.dg/analyzer/pr99716-1.c: Likewise.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-02-08 21:36:21 -05:00
David Malcolm 391512ade5 analyzer: fix hashing of bit_range_region::key_t [PR104452]
gcc/analyzer/ChangeLog:
	PR analyzer/104452
	* region-model.cc (selftest::test_bit_range_regions): New.
	(selftest::analyzer_region_model_cc_tests): Call it.
	* region.h (bit_range_region::key_t::hash): Fix hashing of m_bits
	to avoid using uninitialized data.

gcc/testsuite/ChangeLog:
	PR analyzer/104452
	* gcc.dg/analyzer/pr104452.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-02-08 21:27:12 -05:00
Jason Merrill 53cac72cf0 c++: cleanup constant-init'd members [PR96876]
This is a case missed by my recent fixes to aggregate initialization and
exception cleanup for PR94041 et al: we also need to clean up members with
constant initialization if initialization of a later member throws.

It also occurs to me that we needn't bother building the cleanups if
-fno-exceptions; build_vec_init already doesn't.

	PR c++/96876

gcc/cp/ChangeLog:

	* typeck2.cc (split_nonconstant_init_1): Push cleanups for
	preceding members with constant initialization.
	(maybe_push_temp_cleanup): Do nothing if -fno-exceptions.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp1z/aggr-base11.C: New test.
	* g++.dg/eh/aggregate2.C: New test.
2022-02-08 20:09:55 -05:00
GCC Administrator 2a2fda2d9b Daily bump. 2022-02-09 00:16:24 +00:00
Jonathan Wakely 1ef6085f09 libstdc++: Simplify resource management in directory iterators
This replaces the _Dir constructor that takes ownership of an existing
DIR* resource with one that takes a _Dir_base rvalue instead. This means
a raw DIR* is never passed around, but is always owned by a _Dir_base
object.

libstdc++-v3/ChangeLog:

	* src/c++17/fs_dir.cc (_Dir(DIR*, const path&)): Change first
	parameter to _Dir_base&&.
	* src/filesystem/dir-common.h (_Dir_base(DIR*)): Remove.
	* src/filesystem/dir.cc (_Dir(DIR*, const path&)): Change first
	parameter to _Dir_base&&.
2022-02-08 21:04:14 +00:00
Robin Dapp d0d4601ccd ifcvt: Fix PR104153 and PR104198.
This is a bugfix for r12-6747-gaa8cfe785953a0 which caused an ICE
on or1k (PR104153) and broke SPARC bootstrap (PR104198).

cond_exec_get_condition () returns the jump condition directly and we
now pass it to the backend.  The or1k backend modified the condition
in-place (other backends do that as well) but this modification is not
reverted when the sequence in question is discarded.  Therefore we copy
the RTX instead of using it directly.

The SPARC problem is due to the SPARC backend recreating the initial
condition when being passed a CC comparison.  This causes the sequence
to read from an already overwritten condition operand.  Generally, this
could also happen on other targets.  The workaround is to always first
emit to a temporary.  In a second run of noce_convert_multiple_sets_1
we know which sequences actually require the comparison and will use no
temporaries if all sequences after the current one do not require it.

	PR rtl-optimization/104198
	PR rtl-optimization/104153

gcc/ChangeLog:

	* ifcvt.cc (noce_convert_multiple_sets_1): Copy rtx instead of
	using it directly.  Rework comparison handling and always
	perform a second pass.

gcc/testsuite/ChangeLog:

	* gcc.dg/pr104198.c: New test.
2022-02-08 20:46:20 +01:00
Jakub Jelinek 71e6353e1b c++: Don't emit repeated -Wshadow warnings for templates/ctors [PR104379]
The following patch suppresses extraneous -Wshadow warnings.
On the testcase without the patch we emit 14 -Wshadow warnings,
with the patch just 4.  It is enough to warn once e.g. during parsing of the
template or the abstract ctor, while previously we'd warn also on the clones
of the ctors and on instantiation.
In GCC 8 and earlier we didn't warn because check_local_shadow did
  /* Inline decls shadow nothing.  */
  if (DECL_FROM_INLINE (decl))
    return;

2022-02-08  Jakub Jelinek  <jakub@redhat.com>

	PR c++/104379
	* name-lookup.cc (check_local_shadow): When diagnosing shadowing
	of a member or global declaration, add warning suppression for
	the decl and don't warn again on it.

	* g++.dg/warn/Wshadow-18.C: New test.
2022-02-08 20:17:55 +01:00
Jakub Jelinek 1755141a9e c++: Remove superflous assert [PR104403]
I've added the assert because start_decl diagnoses such vars for C++20 and
earlier:
  if (current_function_decl && VAR_P (decl)
      && DECL_DECLARED_CONSTEXPR_P (current_function_decl)
      && cxx_dialect < cxx23)
but as can be seen, we cam trigger the assert in older standards e.g. during
non-manifestly constant evaluation.  Rather than refining the assert that
DECL_EXPRs for such vars don't appear for C++20 and older if they are inside
of functions declared constexpr this patch just removes the assert, the
code rejects encountering those vars in constant expressions anyway.

2022-02-08  Jakub Jelinek  <jakub@redhat.com>

	PR c++/104403
	* constexpr.cc (cxx_eval_constant_expression): Don't assert DECL_EXPRs
	of TREE_STATIC vars may only appear in -std=c++23.

	* g++.dg/cpp0x/lambda/lambda-104403.C: New test.
2022-02-08 20:15:42 +01:00
Jakub Jelinek 0c3e491a4e rs6000: Fix up vspltis_shifted [PR102140]
The following testcase ICEs, because
(const_vector:V4SI [
                (const_int 0 [0]) repeated x3
                (const_int -2147483648 [0xffffffff80000000])
            ])
is recognized as valid easy_vector_constant in between split1 pass and
end of RA.
The problem is that such constants need to be split, and the only
splitter for that is:
(define_split
  [(set (match_operand:VM 0 "altivec_register_operand")
        (match_operand:VM 1 "easy_vector_constant_vsldoi"))]
  "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode) && can_create_pseudo_p ()"
There is only a single splitting pass before RA, so after that finishes,
if something gets matched in between that and end of RA (after that
can_create_pseudo_p () would be no longer true), it will never be
successfully split and we ICE at final.cc time or earlier.

The i386 backend (and a few others) already use
(cfun->curr_properties & PROP_rtl_split_insns)
as a test for split1 pass finished, so that some insns that should be split
during split1 and shouldn't be matched afterwards are properly guarded.

So, the following patch does that for vspltis_shifted too.

2022-02-08  Jakub Jelinek  <jakub@redhat.com>

	PR target/102140
	* config/rs6000/rs6000.cc (vspltis_shifted): Return false also if
	split1 pass has finished already.

	* gcc.dg/pr102140.c: New test.
2022-02-08 20:14:30 +01:00
Bill Schmidt 943d631abd rs6000: Add support for vmsumcud and vec_msumc
2022-02-08  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
	* config/rs6000/rs6000-builtins.def (VMSUMCUD): New.
	* config/rs6000/rs6000-overload.def (VEC_MSUMC): New.
	* config/rs6000/vsx.md (UNSPEC_VMSUMCUD): New constant.
	(vmsumcud): New define_insn.

gcc/testsuite/
	* gcc.target/powerpc/vec-msumc.c: New test.
2022-02-08 12:39:16 -06:00
Patrick Palka be862bf1f6 c++: Add testcase for already fixed PR [PR104425]
Fixed by r12-1829.

	PR c++/104425

gcc/testsuite/ChangeLog:

	* g++.dg/template/partial-specialization10.C: New test.
2022-02-08 09:47:34 -05:00
Tom de Vries ab1355a480 [nvptx] Unbreak build, add PTX_ISA_SM70
With the commit "[nvptx] Choose -mptx default based on -misa" I introduced a
use of PTX_ISA_SM70, without adding it first.

Add it, as well as the corresponding TARGET_SM70.

Build for x86_64 with nvptx accelerator.

gcc/ChangeLog:

2022-02-08  Tom de Vries  <tdevries@suse.de>

	* config/nvptx/nvptx-opts.h (enum ptx_isa): Add PTX_ISA_SM70.
	* config/nvptx/nvptx.h (TARGET_SM70): Define.
2022-02-08 15:35:37 +01:00
Robin Dapp 1e3185e714 s390: Increase costs for load on condition and change movqicc expander.
This patch changes the costs for a load on condition from 5 to 6 in
order to ensure that we only if-convert two and not three or more SETS like

if (cond)
{
  a = b;
  c = d;
  e = f;
}

In the movqicc expander we emit a paradoxical subreg directly that
combine would otherwise try to create by using a non-optimal sequence
(which would be too expensive).

Also, fix two oversights in ifcvt testcases.

gcc/ChangeLog:

	* config/s390/s390.cc (s390_rtx_costs): Increase costs for load
	on condition.
	* config/s390/s390.md: Use paradoxical subreg.

gcc/testsuite/ChangeLog:

	* gcc.target/s390/ifcvt-two-insns-int.c: Fix array size.
	* gcc.target/s390/ifcvt-two-insns-long.c: Dito.
2022-02-08 15:28:53 +01:00
Robin Dapp 38a177fa4c combine: Check for paradoxical subreg.
This adds a check for a paradoxical subreg in reg_subword_p ()
in order to prevent an ICE on s390 in try_combine () triggered
by the movqicc expander.

gcc/ChangeLog:

	* combine.cc (reg_subword_p): Check for paradoxical subreg.
2022-02-08 15:28:53 +01:00
Jonathan Wakely 8dbb60b8df libstdc++: Add comment to acinclude.m4
libstdc++-v3/ChangeLog:

	* acinclude.m4 (GLIBCXX_ENABLE_LOCK_POLICY): Add comment about
	checking for CAS on correct word size.
2022-02-08 14:15:38 +00:00
Patrick Palka 676e987b85 c++: deducing only from noexcept-spec [PR80951]
The "fail-fast" predicate uses_deducible_template_parms used by
unify_one_argument is neglecting to look inside the noexcept-spec of a
function type.  This causes deduction to spuriously fail whenever the
noexcept-spec is the only part of the type which contains a deducible
template parameter.

	PR c++/80951

gcc/cp/ChangeLog:

	* pt.cc (uses_deducible_template_parms): Consider the
	noexcept-spec of a function type.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp1z/noexcept-type25.C: New test.
2022-02-08 09:11:31 -05:00
Patrick Palka 7ff201d85f c++: satisfaction value of type const bool [PR104410]
Here constant evaluation of the atomic constraint use_func_v<T>
sensibly yields an INTEGER_CST of type const bool, but the assert in
satisfaction_value expects unqualified bool.  So let's just relax the
assert to accept cv-qualified bool.

	PR c++/104410

gcc/cp/ChangeLog:

	* constraint.cc (satisfaction_value): Relax assert to accept
	cv-qualified bool.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/concepts-pr104410.C: New test.
2022-02-08 09:11:29 -05:00
Patrick Palka db5f1c1703 c++: lambda in pack expansion using pack in constraint [PR103706]
Here when expanding the pack expansion pattern containing a constrained
lambda, the template argument for each Ts is an ARGUMENT_PACK_SELECT,
which we store inside the lambda's LAMBDA_EXPR_REGEN_INFO.  Then during
satisfaction of the lambda's constraint C<Ts> the satisfaction cache
uses this argument as part of the key to the corresponding sat_entry, but
iterative_hash_template_arg and template_args_equal deliberately don't
handle ARGUMENT_PACK_SELECT.

Since it's wrong to preserve ARGUMENT_PACK_SELECT inside a hash table
due to its instability (as documented in iterative_hash_template_arg),
this patch helps make sure the satisfaction cache doesn't see such trees
by resolving ARGUMENT_PACK_SELECT arguments before adding them to
LAMBDA_EXPR_REGEN_INFO.

	PR c++/103706

gcc/cp/ChangeLog:

	* pt.cc (preserve_args): New function.
	(tsubst_lambda_expr): Use it when setting LAMBDA_EXPR_REGEN_INFO.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/concepts-lambda19.C: New test.
2022-02-08 08:46:32 -05:00
Patrick Palka 34ba3d9a2b c++: constrained auto in lambda using outer tparms [PR103706]
Here we're crashing during satisfaction of the lambda's placeholder type
constraints because the constraints depend on the template arguments
from the enclosing scope, which aren't part of the lambda's DECL_TI_ARGS.

This patch fixes this by making do_auto_deduction consider the
"regenerating" template arguments of a lambda for satisfaction,
mirroring what's done in satisfy_declaration_constraints.

	PR c++/103706

gcc/cp/ChangeLog:

	* constraint.cc (satisfy_declaration_constraints): Use
	lambda_regenerating_args instead.
	* cp-tree.h (lambda_regenerating_args): Declare.
	* pt.cc (lambda_regenerating_args): Define, split out from
	satisfy_declaration_constraints.
	(do_auto_deduction): Use lambda_regenerating_args to obtain the
	full set of outer template arguments for satisfaction when
	inside a lambda.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/concepts-lambda18.C: New test.
2022-02-08 08:46:13 -05:00
Jonathan Wakely 61b783995f libstdc++: Adjust Filesystem TS test for Windows
The Filesystem TS isn't really supported for Windows, but the FAIL for
this test is just because it doesn't match what happens on Windows.

libstdc++-v3/ChangeLog:

	* testsuite/experimental/filesystem/operations/create_directories.cc:
	Adjust expected results for Windows.
2022-02-08 13:31:09 +00:00
Jonathan Wakely 5750952bec libstdc++: Fix filesystem::remove_all for Windows [PR104161]
The recursive_directory_iterator::__erase member was failing for
Windows, because the entry._M_type value is always file_type::none
(because _Dir_base::advance doesn't populate it for Windows) and
top.unlink uses fs::remove which sets an error using the
system_category. That meant that ec.value() was a Windows error code and
not an errno value, so the comparisons to EPERM and EISDIR failed.
Instead of depending on a specific Windows error code for attempting to
remove a directory, just use directory_entry::refresh() to query the
type first. This doesn't avoid the TOCTTOU races with directory
symlinks, but we can't avoid them on Windows without openat and
unlinkat, and creating symlinks requires admin privs on Windows anyway.

This also fixes the fs::remove_all(const path&) overload, which was
supposed to use the same logic as the other overload, but I forgot to
change it before my previous commit.

libstdc++-v3/ChangeLog:

	PR libstdc++/104161
	* src/c++17/fs_dir.cc (fs::recursive_directory_iterator::__erase):
	[i_GLIBCXX_FILESYSTEM_IS_WINDOWS]: Refresh entry._M_type member,
	instead of checking for errno values indicating a directory.
	* src/c++17/fs_ops.cc (fs::remove_all(const path&)): Use similar
	logic to non-throwing overload.
	(fs::remove_all(const path&, error_code&)): Add comments.
	* src/filesystem/ops-common.h: Likewise.
2022-02-08 13:31:05 +00:00
Tom de Vries decde11183 [nvptx] Choose -mptx default based on -misa
While testing with driver version 390.147 I ran into the problem that it
doesn't support ptx isa version 6.3 (the new default), only 6.1.

Furthermore, using the -mptx option is a bit user-unfriendly.

Say we want to compile for sm_80.  We can use -misa=sm_80 to specify that, but
then run into errors because the default ptx version is 6.3, which doesn't
support sm_80 yet.

Address both these issues by:
- picking a default -mptx based on the active -misa, and
- ensuring that the default -mptx is at least 6.0 (instead
  of 6.3).

Also add an error in case of incompatible options like
"-misa=sm_80 -mptx=6.3":
...
cc1: error: PTX version (-mptx) needs to be at least 7.0 to support \
  selected -misa (sm_80)
...

Tested on x86_64-linux with nvptx accelerator.

gcc/ChangeLog:

2022-02-08  Tom de Vries  <tdevries@suse.de>

	PR target/104283
	* config/nvptx/nvptx-opts.h (enum ptx_version): Add PTX_VERSION_3_0
	and PTX_VERSION_4_2.
	* config/nvptx/nvptx.cc (first_ptx_version_supporting_sm)
	(default_ptx_version_option, ptx_version_to_string)
	(sm_version_to_string, handle_ptx_version_option): New function.
	(nvptx_option_override): Call handle_ptx_version_option.
	(nvptx_file_start): Use ptx_version_to_string and sm_version_to_string.
	* config/nvptx/nvptx.md (define_insn "nvptx_shuffle<mode>")
	(define_insn "nvptx_vote_ballot"): Use TARGET_PTX_6_0.
	* config/nvptx/nvptx.opt (mptx): Remove 'Init'.
2022-02-08 13:55:23 +01:00
Maciej W. Rozycki 6de582dd62 RISC-V/testsuite: Run target testing over all the usual optimization levels
Use `gcc-dg-runtest' test driver rather than `dg-runtest' to run the
RISC-V testsuite as several targets already do.  Adjust test options
across individual test cases accordingly where required.

As some tests want to be run at `-Og', add a suitable optimization
variant via ADDITIONAL_TORTURE_OPTIONS, and include the moderately
recent `-Oz' variant as well.

	gcc/testsuite/
	* gcc.target/riscv/riscv.exp: Use `gcc-dg-runtest' rather than
	`dg-runtest'.  Add `-Og -g' and `-Oz' variants via
	ADDITIONAL_TORTURE_OPTIONS.
	* gcc.target/riscv/arch-1.c: Adjust test options accordingly.
	* gcc.target/riscv/arch-10.c: Likewise.
	* gcc.target/riscv/arch-11.c: Likewise.
	* gcc.target/riscv/arch-12.c: Likewise.
	* gcc.target/riscv/arch-2.c: Likewise.
	* gcc.target/riscv/arch-3.c: Likewise.
	* gcc.target/riscv/arch-4.c: Likewise.
	* gcc.target/riscv/arch-5.c: Likewise.
	* gcc.target/riscv/arch-6.c: Likewise.
	* gcc.target/riscv/arch-7.c: Likewise.
	* gcc.target/riscv/arch-8.c: Likewise.
	* gcc.target/riscv/arch-9.c: Likewise.
	* gcc.target/riscv/attribute-1.c: Likewise.
	* gcc.target/riscv/attribute-10.c: Likewise.
	* gcc.target/riscv/attribute-11.c: Likewise.
	* gcc.target/riscv/attribute-12.c: Likewise.
	* gcc.target/riscv/attribute-13.c: Likewise.
	* gcc.target/riscv/attribute-14.c: Likewise.
	* gcc.target/riscv/attribute-15.c: Likewise.
	* gcc.target/riscv/attribute-16.c: Likewise.
	* gcc.target/riscv/attribute-17.c: Likewise.
	* gcc.target/riscv/attribute-2.c: Likewise.
	* gcc.target/riscv/attribute-3.c: Likewise.
	* gcc.target/riscv/attribute-4.c: Likewise.
	* gcc.target/riscv/attribute-5.c: Likewise.
	* gcc.target/riscv/attribute-7.c: Likewise.
	* gcc.target/riscv/attribute-8.c: Likewise.
	* gcc.target/riscv/attribute-9.c: Likewise.
	* gcc.target/riscv/interrupt-1.c: Likewise.
	* gcc.target/riscv/interrupt-2.c: Likewise.
	* gcc.target/riscv/interrupt-3.c: Likewise.
	* gcc.target/riscv/interrupt-4.c: Likewise.
	* gcc.target/riscv/interrupt-conflict-mode.c: Likewise.
	* gcc.target/riscv/interrupt-debug.c: Likewise.
	* gcc.target/riscv/interrupt-mmode.c: Likewise.
	* gcc.target/riscv/interrupt-smode.c: Likewise.
	* gcc.target/riscv/interrupt-umode.c: Likewise.
	* gcc.target/riscv/li.c: Likewise.
	* gcc.target/riscv/load-immediate.c: Likewise.
	* gcc.target/riscv/losum-overflow.c: Likewise.
	* gcc.target/riscv/mcpu-6.c: Likewise.
	* gcc.target/riscv/mcpu-7.c: Likewise.
	* gcc.target/riscv/pr102957.c: Likewise.
	* gcc.target/riscv/pr103302.c: Likewise.
	* gcc.target/riscv/pr104140.c: Likewise.
	* gcc.target/riscv/pr84660.c: Likewise.
	* gcc.target/riscv/pr93202.c: Likewise.
	* gcc.target/riscv/pr93304.c: Likewise.
	* gcc.target/riscv/pr95252.c: Likewise.
	* gcc.target/riscv/pr95683.c: Likewise.
	* gcc.target/riscv/pr98777.c: Likewise.
	* gcc.target/riscv/pr99702.c: Likewise.
	* gcc.target/riscv/predef-1.c: Likewise.
	* gcc.target/riscv/predef-10.c: Likewise.
	* gcc.target/riscv/predef-11.c: Likewise.
	* gcc.target/riscv/predef-12.c: Likewise.
	* gcc.target/riscv/predef-13.c: Likewise.
	* gcc.target/riscv/predef-14.c: Likewise.
	* gcc.target/riscv/predef-15.c: Likewise.
	* gcc.target/riscv/predef-16.c: Likewise.
	* gcc.target/riscv/predef-2.c: Likewise.
	* gcc.target/riscv/predef-3.c: Likewise.
	* gcc.target/riscv/predef-4.c: Likewise.
	* gcc.target/riscv/predef-5.c: Likewise.
	* gcc.target/riscv/predef-6.c: Likewise.
	* gcc.target/riscv/predef-7.c: Likewise.
	* gcc.target/riscv/predef-8.c: Likewise.
	* gcc.target/riscv/promote-type-for-libcall.c: Likewise.
	* gcc.target/riscv/save-restore-1.c: Likewise.
	* gcc.target/riscv/save-restore-2.c: Likewise.
	* gcc.target/riscv/save-restore-3.c: Likewise.
	* gcc.target/riscv/save-restore-4.c: Likewise.
	* gcc.target/riscv/save-restore-6.c: Likewise.
	* gcc.target/riscv/save-restore-7.c: Likewise.
	* gcc.target/riscv/save-restore-8.c: Likewise.
	* gcc.target/riscv/save-restore-9.c: Likewise.
	* gcc.target/riscv/shift-and-1.c: Likewise.
	* gcc.target/riscv/shift-and-2.c: Likewise.
	* gcc.target/riscv/shift-shift-1.c: Likewise.
	* gcc.target/riscv/shift-shift-2.c: Likewise.
	* gcc.target/riscv/shift-shift-3.c: Likewise.
	* gcc.target/riscv/shift-shift-4.c: Likewise.
	* gcc.target/riscv/shift-shift-5.c: Likewise.
	* gcc.target/riscv/shorten-memrefs-1.c: Likewise.
	* gcc.target/riscv/shorten-memrefs-2.c: Likewise.
	* gcc.target/riscv/shorten-memrefs-3.c: Likewise.
	* gcc.target/riscv/shorten-memrefs-4.c: Likewise.
	* gcc.target/riscv/shorten-memrefs-5.c: Likewise.
	* gcc.target/riscv/shorten-memrefs-6.c: Likewise.
	* gcc.target/riscv/shorten-memrefs-7.c: Likewise.
	* gcc.target/riscv/shorten-memrefs-8.c: Likewise.
	* gcc.target/riscv/switch-qi.c: Likewise.
	* gcc.target/riscv/switch-si.c: Likewise.
	* gcc.target/riscv/weak-1.c: Likewise.
	* gcc.target/riscv/zba-adduw.c: Likewise.
	* gcc.target/riscv/zba-shNadd-01.c: Likewise.
	* gcc.target/riscv/zba-shNadd-02.c: Likewise.
	* gcc.target/riscv/zba-shNadd-03.c: Likewise.
	* gcc.target/riscv/zba-slliuw.c: Likewise.
	* gcc.target/riscv/zba-zextw.c: Likewise.
	* gcc.target/riscv/zbb-andn-orn-xnor-01.c: Likewise.
	* gcc.target/riscv/zbb-andn-orn-xnor-02.c: Likewise.
	* gcc.target/riscv/zbb-li-rotr.c: Likewise.
	* gcc.target/riscv/zbb-min-max.c: Likewise.
	* gcc.target/riscv/zbb-rol-ror-01.c: Likewise.
	* gcc.target/riscv/zbb-rol-ror-02.c: Likewise.
	* gcc.target/riscv/zbb-rol-ror-03.c: Likewise.
	* gcc.target/riscv/zbbw.c: Likewise.
	* gcc.target/riscv/zbs-bclr.c: Likewise.
	* gcc.target/riscv/zbs-bext.c: Likewise.
	* gcc.target/riscv/zbs-binv.c: Likewise.
	* gcc.target/riscv/zbs-bset.c: Likewise.
	* gcc.target/riscv/zero-extend-1.c: Likewise.
	* gcc.target/riscv/zero-extend-2.c: Likewise.
	* gcc.target/riscv/zero-extend-3.c: Likewise.
	* gcc.target/riscv/zero-extend-4.c: Likewise.
	* gcc.target/riscv/zero-extend-5.c: Likewise.
2022-02-08 12:20:03 +00:00
Maciej W. Rozycki 5e92fddad7 doc: RISC-V: Document the `-misa-spec=' option
We have recently updated the default for the `-misa-spec=' option, yet
we still have not documented it nor its `--with-isa-spec=' counterpart
in the GCC manuals.  Fix that.

	gcc/
	* doc/install.texi (Configuration): Document `--with-isa-spec='
	RISC-V option.
	* doc/invoke.texi (Option Summary): List `-misa-spec=' RISC-V
	option.
	(RISC-V Options): Document it.
2022-02-08 12:14:58 +00:00
Maciej W. Rozycki 3faeba72cf RISC-V: Add target machine headers as a dependency for riscv-sr.o
Make riscv-sr.o depend on target machine headers, removing spurious test
failures:

FAIL: gcc.target/riscv/save-restore-3.c scan-assembler-not call[ \t]*t0,__riscv_save_0
FAIL: gcc.target/riscv/save-restore-3.c scan-assembler-not tail[ \t]*__riscv_restore_0
FAIL: gcc.target/riscv/save-restore-3.c scan-assembler tail[ \t]*foo
FAIL: gcc.target/riscv/save-restore-6.c scan-assembler-not call[ \t]*t0,__riscv_save_0
FAIL: gcc.target/riscv/save-restore-6.c scan-assembler-not tail[ \t]*__riscv_restore_0
FAIL: gcc.target/riscv/save-restore-6.c scan-assembler tail[ \t]*other_func

if the definitions of UNSPECs are locally changed and GCC rebuilt from a
dirty tree.

	gcc/
	* config/riscv/t-riscv (riscv-sr.o): Add $(TM_H) dependency.
2022-02-08 12:14:58 +00:00
Tom de Vries 73f4a989b7 [nvptx] Fix 'main (int argc)' compilation
On nvptx, with test-case sso-12.c I run into:
...
spawn nvptx-none-run ./sso-12.exe^M
error: Prototype doesn't match for 'main' in 'input file 1 at offset 1796', \
  first defined in 'input file 1 at offset 1796'^M
nvptx-run: cuLinkAddData failed: device kernel image is invalid \
  (CUDA_ERROR_INVALID_SOURCE, 300)^M
FAIL: gcc.dg/sso-12.c execution test
...

The problem is that the test case uses 'main (int)' prototype, while __main
uses:
...
extern int main (int, void **);
...

There's code in write_fn_proto_1 to handle 'main (void)' as if
'main (int, void **)' was specified, but that's not active for 'main (int)'.

Fix this in write_fn_proto_1 by handling 'main (int)' as if
'main (int, void **)' was specified.

Tested on nvptx.

gcc/ChangeLog:

2022-02-07  Tom de Vries  <tdevries@suse.de>

	* config/nvptx/nvptx.cc (write_fn_proto_1): Handle 'main (int)'.
2022-02-08 09:55:31 +01:00
Tom de Vries f05cc4fd6f [testsuite] Require c99_runtime to run builtin-sprintf.c
On nvptx, I run into an execution failure in test-case
gcc.dg/tree-ssa/builtin-sprintf.c because the test-case uses the 'hh'
modifier.

The port uses newlib, which does by default not support that modifier.
There's a configure option --enable-newlib-io-c99-formats to enable this
support, but that requires alloca support, which nvptx doesn't have.

Fix this by requiring c99_runtime for running the test-case.

Tested on nvptx.

gcc/testsuite/ChangeLog:

2022-02-07  Tom de Vries  <tdevries@suse.de>

	* gcc.dg/tree-ssa/builtin-sprintf.c: Require c99_runtime for
	dg-do run.
2022-02-08 09:55:23 +01:00
Tom de Vries 04b54cc486 [nvptx] Fix .local atomic regressions
In PR target/104364, two problems were reported:
- in muniform-simt mode, an atom.cas insn is no longer executed in the
  "master lane" only.
- in msoft-stack mode, an __atomic_compare_exchange_n on stack memory is
  translated assuming it accesses local memory, while that's not the case.

Fix these by:
- ensuring that all insns with atomic attribute are also predicable, such
  that the validate_change in nvptx_reorg_uniform_simt will succeed, and
  asserting that it does, and
- guarding the local atomics implementation with a new function
  nvptx_mem_local_p that correctly handles msoft-stack.

Tested on x86_64 with nvptx accelerator.

gcc/ChangeLog:

2022-02-04  Tom de Vries  <tdevries@suse.de>

	PR target/104364
	* config/nvptx/nvptx-protos.h (nvptx_mem_local_p): Declare.
	* config/nvptx/nvptx.cc (nvptx_reorg_uniform_simt): Assert that
	change is validated.
	(nvptx_mem_local_p): New function.
	* config/nvptx/nvptx.md: Use nvptx_mem_local_p.
	(define_c_enum "unspecv"): Add UNSPECV_CAS_LOCAL.
	(define_insn "atomic_compare_and_swap<mode>_1_local"): New
	non-atomic, non-predicable define_insn, factored out of ...
	(define_insn "atomic_compare_and_swap<mode>_1"): ... here.
	Make predicable again.
	(define_expand "atomic_compare_and_swap<mode>"): Use
	atomic_compare_and_swap<mode>_1_local.

gcc/testsuite/ChangeLog:

2022-02-04  Tom de Vries  <tdevries@suse.de>

	PR target/104364
	* gcc.target/nvptx/softstack-2.c: New test.
	* gcc.target/nvptx/uniform-simt-1.c: New test.
2022-02-08 09:54:30 +01:00
Jakub Jelinek 0af7ef050a libgomp: Fix segfault with posthumous orphan tasks [PR104385]
The following patch fixes crashes with posthumous orphan tasks.
When a parent task finishes, gomp_clear_parent clears the parent
pointers of its children tasks present in the parent->children_queue.
But children that are still waiting for dependencies aren't in that
queue yet, they will be added there only when the sibling they are
waiting for exits.  Unfortunately we were adding those tasks into
the queues with the original task->parent which then causes crashes
because that task is gone and freed.  The following patch fixes that
by clearing the parent field when we schedule such task for running
by adding it into the queues and we know that the sibling task which
is about to finish has NULL parent.

2022-02-08  Jakub Jelinek  <jakub@redhat.com>

	PR libgomp/104385
	* task.c (gomp_task_run_post_handle_dependers): If parent is NULL,
	clear task->parent.
	* testsuite/libgomp.c/pr104385.c: New test.
2022-02-08 09:30:17 +01:00
Ulrich Weigand a362158097 MAINTAINERS: Remove Hartmut Penner as s390 maintainer
Hartmut is no longer with IBM and has not worked on GCC for a
long time; he asked to be removed from MAINTAINERS.

ChangeLog:

	* MAINTAINERS: Remove Hartmut Penner as s390 maintainer.
2022-02-08 09:23:14 +01:00
liuhongt 0103c2e408 Don't propagate for a more expensive reg-reg move.
For i386, it enables optimization like:

        vmovd   %xmm0, %edx
-       vmovd   %xmm0, %eax
+       movl    %edx, %eax

gcc/ChangeLog:

	PR rtl-optimization/104059
	* regcprop.cc (copyprop_hardreg_forward_1): Don't propagate
	for a more expensive reg-reg move.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr104059.c: New test.
2022-02-08 12:39:31 +08:00
GCC Administrator cc2430c122 Daily bump. 2022-02-08 00:16:24 +00:00
David Malcolm 0c04ac0e15 analyzer: fix ICE on realloc of non-heap [PR104417]
gcc/analyzer/ChangeLog:
	PR analyzer/104417
	* sm-taint.cc (tainted_allocation_size::tainted_allocation_size):
	Remove overzealous assertion.
	(tainted_allocation_size::emit): Likewise.
	(region_model::check_dynamic_size_for_taint): Likewise.

gcc/testsuite/ChangeLog:
	PR analyzer/104417
	* gcc.dg/analyzer/pr104417.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-02-07 18:32:47 -05:00
David Malcolm 9d2c0fad59 analyzer: fixes to memcpy [PR103872]
PR analyzer/103872 reports a failure of gcc.dg/analyzer/pr103526.c on
riscv64-unknown-elf-gcc.  The issue is that I wrote the test on x86_64
where a memcpy in the test is optimized to a write to a read/write pair,
whereas due to alignment differences the analyzer can see it as a
memcpy call, revealing problems with the analyzer's implementation
of memcpy.

This patch reimplements region_model::impl_call_memcpy in terms of a
get_store_value followed by a set_value, fixing the issue.

gcc/analyzer/ChangeLog:
	PR analyzer/103872
	* region-model-impl-calls.cc (region_model::impl_call_memcpy):
	Reimplement in terms of a get_store_value followed by a set_value.

gcc/testsuite/ChangeLog:
	PR analyzer/103872
	* gcc.dg/analyzer/memcpy-1.c: Add alternate versions of test cases
	in which the calls to memcpy are hidden from the optimizer.  Add
	further test cases.
	* gcc.dg/analyzer/taint-size-1.c: Add test coverage for memcpy
	with tainted size.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-02-07 18:31:54 -05:00