Commit Graph

191705 Commits

Author SHA1 Message Date
Ian Lance Taylor
20a33efdf3 libgo: update to Go1.18rc1 release
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/386594
2022-02-18 13:12:08 -08:00
H.J. Lu
1931cbad49 pieces-memset-21.c: Expect vzeroupper for ia32
Update gcc.target/i386/pieces-memset-21.c to expect vzeroupper for ia32
caused by

commit fe79d652c9
Author: Richard Biener <rguenther@suse.de>
Date:   Thu Feb 17 14:40:16 2022 +0100

    target/104581 - compile-time regression in mode-switching

	PR target/104581
	* gcc.target/i386/pieces-memset-21.c: Expect vzeroupper for ia32.
2022-02-18 10:36:53 -08:00
Jakub Jelinek
df5ed150ee rs6000: Fix up posix_memalign call in _mm_malloc [PR104598]
The uglification changes went in one spot too far and uglified also
the anem of function, posix_memalign should be called like that and
not a non-existent function instead of it.

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

	PR target/104257
	PR target/104598
	* config/rs6000/mm_malloc.h (_mm_malloc): Call posix_memalign
	rather than __posix_memalign.
2022-02-18 17:21:43 +01:00
Richard Biener
fe79d652c9 target/104581 - compile-time regression in mode-switching
The x86 backend piggy-backs on mode-switching for insertion of
vzeroupper.  A recent improvement there was implemented in a way
to walk possibly the whole basic-block for all DF reg def definitions
in its mode_needed hook which is called for each instruction in
a basic-block during mode-switching local analysis.

The following mostly reverts this improvement.  It needs to be
re-done in a way more consistent with a local dataflow which
probably means making targets aware of the state of the local
dataflow analysis.

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

	PR target/104581
	* config/i386/i386.cc (ix86_avx_u128_mode_source): Remove.
	(ix86_avx_u128_mode_needed): Return AVX_U128_DIRTY instead
	of calling ix86_avx_u128_mode_source which would eventually
	have returned AVX_U128_ANY in some very special case.

	* gcc.target/i386/pr101456-1.c: XFAIL.
2022-02-18 07:58:54 +01:00
Richard Biener
422d1d378e tree-optimization/96881 - CD-DCE and CLOBBERs
CD-DCE does not consider CLOBBERs as necessary in the attempt
to not prevent DCE of SSA defs it uses.  A side-effect of that
is that it also removes all its control dependences if they are
not made necessary by other means.  When we later try to preserve
as many CLOBBERs as possible we have to make sure we also
preserved the controlling conditions, otherwise a CLOBBER can
now appear on a path where it was not executed before, leading
to wrong code as seen in the testcase.

I've tried to continue to handle both direct and indirect
CLOBBERs optimistically, allowing CD-DCE to remove control
flow that just controls CLOBBERs but that regresses for
example the stack coalescing test g++.dg/opt/pr80032.C.
The pattern there is
  if (pred) D.2512 = CLOBBER; else D.2512 = CLOBBER;
basically we have all paths leading to the same clobber but
we could safely cut some branches which we do not realize
early enough.  This regression can be mitigated by no longer
considering direct CLOBBERs optimistically - the original
motivation for the CD-DCE handling wasn't removal of control
flow but SSA defs of the address.

Handling indirect vs. direct clobbers differently feels
somewhat wrong, still the patch goes with this solution.

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

	PR tree-optimization/96881
	* tree-ssa-dce.cc (mark_stmt_if_obviously_necessary): Comment
	CLOBBER handling.
	(control_parents_preserved_p): New function.
	(eliminate_unnecessary_stmts): Check that we preserved control
	parents before retaining a CLOBBER.
	(perform_tree_ssa_dce): Pass down aggressive flag
	to eliminate_unnecessary_stmts.

	* g++.dg/torture/pr96881-1.C: New testcase.
	* g++.dg/torture/pr96881-2.C: Likewise.
2022-02-18 07:58:54 +01:00
Patrick Palka
36278f48cb c++: implicit 'this' in noexcept-spec within class tmpl [PR94944]
Here when instantiating the noexcept-spec we fail to resolve the
implicit object for the member call A<T>::f() ultimately because
maybe_instantiate_noexcept sets current_class_ptr/ref to the dependent
'this' (of type B<T>) rather than the specialized 'this' (of type B<int>).

This patch fixes this by making maybe_instantiate_noexcept set
current_class_ptr/ref to the specialized 'this' instead, consistent
with what tsubst_function_type does when substituting into the trailing
return type of a non-static member function.

	PR c++/94944

gcc/cp/ChangeLog:

	* pt.cc (maybe_instantiate_noexcept): For non-static member
	functions, set current_class_ptr/ref to the specialized 'this'
	instead.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/noexcept34.C: Adjusted expected diagnostics.
	* g++.dg/cpp0x/noexcept75.C: New test.
2022-02-17 20:20:24 -05:00
GCC Administrator
0bdb049877 Daily bump. 2022-02-18 00:16:39 +00:00
Jonathan Wakely
12a88e6e20 libstdc++: Deprecate non-standard std::vector<bool>::insert(pos) [PR104559]
The SGI STL and pre-1998 drafts of the C++ standard had a default
argument for vector<bool>::insert(iterator, const bool&) which was
remove by N1051. The default argument is still present in libstdc++ for
some reason. There are no tests verifying it as an extension, so I don't
think it has been kept intentionally.

This removes the default argument but adds an overload without the
second parameter, and adds the deprecated attribute to it. This allows
any code using it to keep working (for now) but with a warning.

libstdc++-v3/ChangeLog:

	PR libstdc++/104559
	* doc/xml/manual/evolution.xml: Document deprecation.
	* doc/html/manual/api.html: Regenerate.
	* include/bits/stl_bvector.h (insert(const_iterator, const bool&)):
	Remove default argument.
	(insert(const_iterator)): New overload with deprecated attribute.
	* testsuite/23_containers/vector/bool/modifiers/insert/104559.cc:
	New test.
2022-02-17 23:44:25 +00:00
Jason Merrill
2c9b7077b7 c++: inlining explicit instantiations [PR104539]
The PR10968 fix cleared DECL_COMDAT to force output of explicit
instantiations.  Then the PR59469 fix added a call to mark_needed, after
which we no longer need to clear DECL_COMDAT, and leaving it set allows us
to inline explicit instantiations without worrying about symbol
interposition.

I suppose there's an argument to be made that an explicit instantiation
declaration (extern template) should clear DECL_COMDAT, since that suggests
that there will be only a single instantiation somewhere that could be
subject to interposition, but that doesn't change the 'inline' semantics,
and it seems cleaner to treat template instantiations uniformly.

	PR c++/104539

gcc/cp/ChangeLog:

	* pt.cc (mark_decl_instantiated): Don't clear DECL_COMDAT.

gcc/testsuite/ChangeLog:

	* g++.dg/ipa/inline-4.C: New test.
2022-02-17 17:50:59 -05:00
Jason Merrill
1b71bc7c8b tree: tweak warn_deprecated_use
While looking at PR90451 I noticed that this function was failing to find
the attributes if called with a variant of the struct.

gcc/ChangeLog:

	* tree.cc (warn_deprecated_use): Look for TYPE_STUB_DECL
	on TYPE_MAIN_VARIANT.

gcc/testsuite/ChangeLog:

	* g++.dg/warn/deprecated-16.C: New test.
2022-02-17 17:50:59 -05:00
Jonathan Wakely
36100e0e95 libstdc++: Make std::error_code printer more robust
This attempts to implement a partial workaround for the GDB bug
https://sourceware.org/bugzilla/show_bug.cgi?id=28856 which causes GDB
to crash when printing a frame with a std::error_code argument.

By recognising the known error categories defined in the library and
hardcoding their names we do not need to call cat->name() on the
category.  This has the additional benefit of also working when
debugging a core file rather than a running process. For those known
categories we can also cast the int value to the corresponding error
code enum (e.g. future_errc) so that we show an enumerator instead of
just an integer.

For program-defined categories we just use the name of the dynamic type
to identify the category, and print the value as an integer. Once the
GDB bug is fixed and the virtual name() function can be called safely,
that would be preferable. For now it's better to have an imperfect
printer that doesn't crash GDB.

This rewritten StdErrorCodePrinter needs gdb.Value.dynamic_type, so is
only registered if that is supported, which means GDB 7.7 and later.

libstdc++-v3/ChangeLog:

	* python/libstdcxx/v6/printers.py (StdErrorCodePrinter): Replace
	code that call cat->name() on std::error_category objects.
	Identify known categories by symbol name and use a hardcoded
	name. Print error code values as enumerators where appopriate.
	* testsuite/libstdc++-prettyprinters/cxx11.cc: Adjust expected
	name of custom category. Check io_errc and future_errc errors.
2022-02-17 22:22:14 +00:00
Jason Merrill
c352ef0ed9 c++: avoid duplicate deprecated warning [PR90451]
We were getting the deprecated warning twice for the same call because we
called mark_used first in finish_qualified_id_expr and then again in
build_over_call.  Let's not call it the first time; C++17 clarified that a
function is used only when it is selected from an overload set, which
happens later.

Then I had to add a few more uses in places that don't do anything further
with the expression (convert_to_void, finish_decltype_type), and places that
use the expression more unusually (cp_build_addr_expr_1,
convert_nontype_argument).  The new mark_single_function is mostly so
that I only have to put the comment in one place.

	PR c++/90451

gcc/cp/ChangeLog:

	* decl2.cc (mark_single_function): New.
	* cp-tree.h: Declare it.
	* typeck.cc (cp_build_addr_expr_1): mark_used when making a PMF.
	* semantics.cc (finish_qualified_id_expr): Not here.
	(finish_id_expression_1): Or here.
	(finish_decltype_type): Call mark_single_function.
	* cvt.cc (convert_to_void): And here.
	* pt.cc (convert_nontype_argument): And here.
	* init.cc (build_offset_ref): Adjust assert.

gcc/testsuite/ChangeLog:

	* g++.dg/warn/deprecated-14.C: New test.
	* g++.dg/warn/deprecated-15.C: New test.
2022-02-17 16:22:27 -05:00
Paul A. Clarke
efbb17db52 rs6000: __Uglify non-uglified local variables in headers
Properly prefix (with "__")  all local variables in shipped headers for x86
compatibility intrinsics implementations.  This avoids possible problems with
usages like:
```
```

2022-02-16  Paul A. Clarke  <pc@us.ibm.com>

gcc
	PR target/104257
	* config/rs6000/bmi2intrin.h: Uglify local variables.
	* config/rs6000/emmintrin.h: Likewise.
	* config/rs6000/mm_malloc.h: Likewise.
	* config/rs6000/mmintrin.h: Likewise.
	* config/rs6000/pmmintrin.h: Likewise.
	* config/rs6000/smmintrin.h: Likewise.
	* config/rs6000/tmmintrin.h: Likewise.
	* config/rs6000/xmmintrin.h: Likewise.
2022-02-17 13:13:05 -06:00
Robin Dapp
fac15bf848 rs6000: Workaround for new ifcvt behavior [PR104335].
Since r12-6747-gaa8cfe785953a0 ifcvt passes a "cc comparison"
i.e. the representation of the result of a comparison to the
backend.  rs6000_emit_int_cmove () is not prepared to handle this.
Therefore, this patch makes it return false in such a case.

	PR target/104335

gcc/ChangeLog:

	* config/rs6000/rs6000.cc (rs6000_emit_int_cmove): Return false
	if the expected comparison's first operand is of mode MODE_CC.
2022-02-17 19:59:51 +01:00
Jonathan Wakely
73a118c209 c-family: Remove names of unused parameters
C++ allows unnamed parameters, which means we don't need to call them
'dummy' and mark them with the unused attribute.

gcc/c-family/ChangeLog:

	* c-pragma.cc (handle_pragma_pack): Remove parameter name.
	(handle_pragma_weak): Likewise.
	(handle_pragma_scalar_storage_order): Likewise.
	(handle_pragma_redefine_extname): Likewise.
	(handle_pragma_visibility): Likewise.
	(handle_pragma_diagnostic): Likewise.
	(handle_pragma_target): Likewise.
	(handle_pragma_optimize): Likewise.
	(handle_pragma_push_options): Likewise.
	(handle_pragma_pop_options): Likewise.
	(handle_pragma_reset_options): Likewise.
	(handle_pragma_message): Likewise.
	(handle_pragma_float_const_decimal64): Likewise.
2022-02-17 17:48:04 +00:00
Eric Botcazou
bc6d2f460a Add missing target selector
gcc/testsuite/
	PR target/79754
	* gcc.target/i386/pr79754.c: Add target dfp.
2022-02-17 18:36:43 +01:00
Ian Lance Taylor
3f2a6b041d net: add hurd build tag for setReadMsgCloseOnExec
Patch from Svante Signell.

	PR go/103573
	PR go/104290

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/386216
2022-02-17 09:30:02 -08:00
Mark Wielaard
d3b2ead595 libiberty rust-demangle, ignore .suffix
Rust symbols can have a .suffix because of compiler transformations.
These can be ignored in the demangled name. Which is what this patch
implements. By stopping at the first dot for v0 symbols and searching
backwards to the ending 'E' for legacy symbols.

An alternative implementation could be to follow what C++ does and
represent these as [clone .suffix] tagged onto the demangled name.
But this seems somewhat confusing since it results in a demangled
name that cannot be mangled again. And it would mean trying to
decode compiler internal naming.

https://bugs.kde.org/show_bug.cgi?id=445916
https://github.com/rust-lang/rust/issues/60705

libiberty/Changelog

	* rust-demangle.c (rust_demangle_callback): Ignore everything
	after '.' char in sym for v0. For legacy symbols search
	backwards to find the last 'E' before any '.'.
	* testsuite/rust-demangle-expected: Add new .suffix testcases.
2022-02-17 18:06:24 +01:00
Vladimir N. Makarov
db69f666a7 [PR104447] LRA: Do not split non-alloc hard regs.
LRA tried to split non-allocated hard reg for reload pseudos again and
again until number of assignment passes reaches the limit.  The patch fixes
this.

gcc/ChangeLog:

	PR rtl-optimization/104447
	* lra-constraints.cc (spill_hard_reg_in_range): Initiate ignore
	hard reg set by lra_no_alloc_regs.

gcc/testsuite/ChangeLog:

	PR rtl-optimization/104447
	* gcc.target/i386/pr104447.c: New.
2022-02-17 11:33:33 -05:00
Patrick Palka
6bbd8afee0 c++: double non-dep folding from finish_compound_literal [PR104565]
In finish_compound_literal, we perform non-dependent expr folding before
the call to check_narrowing ever since r9-5973.  But ever since r10-7096,
check_narrowing also performs non-dependent expr folding of its own.
This double folding means tsubst will see non-templated trees during the
second folding, which causes a spurious error in the below testcase.

This patch removes the former folding operation; it seems obviated by
the latter one.

	PR c++/104565

gcc/cp/ChangeLog:

	* semantics.cc (finish_compound_literal): Don't perform
	non-dependent expr folding before calling check_narrowing.

gcc/testsuite/ChangeLog:

	* g++.dg/template/non-dependent22.C: New test.
2022-02-17 08:35:23 -05:00
liuhongt
754dce903c Restrict the two sources of vect_recog_cond_expr_convert_pattern to be of the same type when convert is extension.
It's not equal to transform

 (cond (cmp @1 @2) (convert@3 @4) (convert@5 @6))

 to

 (convert (cmp @1 @2) (convert)@4 @6)

when(convert@3 @4) is extension because it's zero_extend vs sign_extend.

gcc/ChangeLog:

	PR tree-optimization/104551
	PR tree-optimization/103771
	* match.pd (cond_expr_convert_p): Add types_match check when
	convert is extension.
	* tree-vect-patterns.cc
	(gimple_cond_expr_convert_p): Adjust comments.
	(vect_recog_cond_expr_convert_pattern): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr104551.c: New test.
2022-02-17 18:58:22 +08:00
Jakub Jelinek
1c2b44b523 valtrack: Avoid creating raw SUBREGs with VOIDmode argument [PR104557]
After the recent r12-7240 simplify_immed_subreg changes, we bail on more
simplify_subreg calls than before, e.g. apparently for decimal modes
in the NaN representations  we almost never preserve anything except the
canonical {q,s}NaNs.
simplify_gen_subreg will punt in such cases because a SUBREG with VOIDmode
is not valid, but debug_lowpart_subreg wants to attempt even harder, even
if e.g. target indicates certain mode combinations aren't valid for the
backend, dwarf2out can still handle them.  But a SUBREG from a VOIDmode
operand is just too much, the inner mode is lost there.  We'd need some
new rtx that would be able to represent those cases.
For now, just punt in those cases.

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

	PR debug/104557
	* valtrack.cc (debug_lowpart_subreg): Don't call gen_rtx_raw_SUBREG
	if expr has VOIDmode.

	* gcc.dg/dfp/pr104557.c: New test.
2022-02-17 11:14:38 +01:00
Jakub Jelinek
f99ad11af9 openmp: Ensure proper diagnostics for -> in map/to/from clauses [PR104532]
The following patch uses the functions normal CPP_DEREF parsing uses,
i.e. convert_lvalue_to_rvalue and build_indirect_ref, instead of
blindly calling build_simple_mem_ref, so that if the variable does not
have correct type, we properly diagnose it instead of ICEing on it.

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

	PR c/104532
	* c-parser.cc (c_parser_omp_variable_list): For CPP_DEREF, use
	convert_lvalue_to_rvalue and build_indirect_ref instead of
	build_simple_mem_ref.

	* gcc.dg/gomp/pr104532.c: New test.
2022-02-17 10:29:06 +01:00
liuhongt
550cabd002 Clean up MPX-related bit_{MPX,BNDREGS,BNDCSR}.
gcc/ChangeLog:

	* config/i386/cpuid.h (bit_MPX): Removed.
	(bit_BNDREGS): Ditto.
	(bit_BNDCSR): Ditto.
2022-02-17 15:47:33 +08:00
Ian Lance Taylor
837eb12629 libbacktrace: gather address ranges from skeleton units
* dwarf.c (find_address_ranges): Handle skeleton units.
	(read_function_entry): Likewise.
2022-02-16 20:21:48 -08:00
Michael Meissner
687e57d7ac Define __SIZEOF_FLOAT128__ and __SIZEOF_IBM128__.
Define the sizes of the PowerPC specific types __float128 and __ibm128 if those
types are enabled.

This patch will define __SIZEOF_IBM128__ and __SIZEOF_FLOAT128__ if their
respective types are created in the compiler.  Currently, this means both of
these will be defined if float128 support is enabled.  But at some point in
the future, __ibm128 could be enabled without enabling float128 support and
__SIZEOF_IBM128__ would be defined.

2022-02-16  Michael Meissner  <meissner@the-meissners.org>

gcc/
	PR target/99708
	* config/rs6000/rs6000-c.cc (rs6000_cpu_cpp_builtins): Define
	__SIZEOF_IBM128__ if the IBM 128-bit long double type is created.
	Define __SIZEOF_FLOAT128__ if the IEEE 128-bit floating point type
	is created.

gcc/testsuite/
	PR target/99708
	* gcc.target/powerpc/pr99708.c: New test.
2022-02-16 22:00:00 -05:00
David Malcolm
5fbcbcaff7 analyzer: const functions have no side effects [PR104576]
PR analyzer/104576 tracks that we issue a false positive from
-Wanalyzer-use-of-uninitialized-value for the reproducers of PR 63311
when optimization is disabled.

The root cause is that the analyzer was considering that a call to
__builtin_sinf could have side-effects.

This patch fixes things by generalizing the handling for "pure"
functions to also consider "const" functions.

gcc/analyzer/ChangeLog:
	PR analyzer/104576
	* region-model.cc: Include "calls.h".
	(region_model::on_call_pre): Use flags_from_decl_or_type to
	generalize check for DECL_PURE_P to also check for ECF_CONST.

gcc/testsuite/ChangeLog:
	PR analyzer/104576
	* gcc.dg/analyzer/torture/uninit-pr63311.c: New test.
	* gcc.dg/analyzer/uninit-pr104576.c: New test.
	* gfortran.dg/analyzer/uninit-pr63311.f90: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-02-16 21:39:56 -05:00
GCC Administrator
cb3afcd2a3 Daily bump. 2022-02-17 00:16:36 +00:00
David Malcolm
a61aaee638 analyzer: fixes to free of non-heap detection [PR104560]
PR analyzer/104560 reports various false positives from
-Wanalyzer-free-of-non-heap seen with rdma-core, on what's
effectively:

  free (&ptr->field)

where in this case "field" is the first element of its struct, and thus
&ptr->field == ptr, and could be on the heap.

The root cause is due to malloc_state_machine::on_stmt making
  "LHS = &EXPR;"
transition LHS from start to non_heap when EXPR is not a MEM_REF;
this assumption doesn't hold for the above case.

This patch eliminates that state transition, instead relying on
malloc_state_machine::get_default_state to detect regions known to
not be on the heap.
Doing so fixes the false positive, but eliminates some events relating
to free-of-alloca identifying the alloca, so the patch also reworks
free_of_non_heap to capture which region has been freed, adding
region creation events to diagnostic paths, so that the alloca calls
can be identified, and using the memory space of the region for more
precise wording of the diagnostic.
The improvement to malloc_state_machine::get_default_state also
means we now detect attempts to free VLAs, functions and code labels.

In doing so I spotted that I wasn't adding region creation events for
regions for global variables, and for cases where an allocation is the
last stmt within its basic block, so the patch also fixes these issues.

gcc/analyzer/ChangeLog:
	PR analyzer/104560
	* diagnostic-manager.cc (diagnostic_manager::build_emission_path):
	Add region creation events for globals of interest.
	(null_assignment_sm_context::get_old_program_state): New.
	(diagnostic_manager::add_events_for_eedge): Move check for
	changing dynamic extents from PK_BEFORE_STMT case to after the
	switch on the dst_point's kind so that we can emit them for the
	final stmt in a basic block.
	* engine.cc (impl_sm_context::get_old_program_state): New.
	* sm-malloc.cc (malloc_state_machine::get_default_state): Rewrite
	detection of m_non_heap to use get_memory_space.
	(free_of_non_heap::free_of_non_heap): Add freed_reg param.
	(free_of_non_heap::subclass_equal_p): Update for changes to
	fields.
	(free_of_non_heap::emit): Drop m_kind in favor of
	get_memory_space.
	(free_of_non_heap::describe_state_change): Remove logic for
	detecting alloca.
	(free_of_non_heap::mark_interesting_stuff): Add region-creation of
	m_freed_reg.
	(free_of_non_heap::get_memory_space): New.
	(free_of_non_heap::kind): Drop enum.
	(free_of_non_heap::m_freed_reg): New field.
	(free_of_non_heap::m_kind): Drop field.
	(malloc_state_machine::on_stmt): Drop transition to m_non_heap.
	(malloc_state_machine::handle_free_of_non_heap): New function,
	split out from on_deallocator_call and on_realloc_call, adding
	detection of the freed region.
	(malloc_state_machine::on_deallocator_call): Use it.
	(malloc_state_machine::on_realloc_call): Likewise.
	* sm.h (sm_context::get_old_program_state): New vfunc.

gcc/testsuite/ChangeLog:
	PR analyzer/104560
	* g++.dg/analyzer/placement-new.C: Update expected wording.
	* g++.dg/analyzer/pr100244.C: Likewise.
	* gcc.dg/analyzer/attr-malloc-1.c (test_7): Likewise.
	* gcc.dg/analyzer/malloc-1.c (test_24): Likewise.
	(test_25): Likewise.
	(test_26): Likewise.
	(test_50a, test_50b, test_50c): New.
	* gcc.dg/analyzer/malloc-callbacks.c (test_5): Update expected
	wording.
	* gcc.dg/analyzer/malloc-paths-8.c: Likewise.
	* gcc.dg/analyzer/pr104560-1.c: New test.
	* gcc.dg/analyzer/pr104560-2.c: New test.
	* gcc.dg/analyzer/realloc-1.c (test_7): Updated expected wording.
	* gcc.dg/analyzer/vla-1.c (test_2): New.  Prune output from
	-Wfree-nonheap-object.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-02-16 18:48:30 -05:00
Ian Lance Taylor
24ca97325c libgo: restore building on Solaris
Add build tags and a few other changes so that libgo builds on Solaris.

Patch partially from Rainer Orth.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/386215
2022-02-16 12:20:10 -08:00
Ian Lance Taylor
6d66bd25dc libbacktrace: initialize DWARF 5 fields of unit
When I added the fields in 2019-12-13 I forgot to initialize them.

	* dwarf.c (build_address_map): Initialize DWARF 5 fields of unit.
2022-02-16 11:37:57 -08:00
Andrew MacLeod
fe581e6343 Use range_compatible_p in condexpr_adjust
* gimple-range-gori.cc (gori_compute::condexpr_adjust): Use
	range_compatible_p instead of direct type comparison.
2022-02-16 13:45:10 -05:00
Patrick Palka
c19f317a78 c++: treat NON_DEPENDENT_EXPR as not potentially constant [PR104507]
Here we're crashing from potential_constant_expression because it tries
to perform trial evaluation of the first operand '(bool)__r' of the
conjunction (which is overall wrapped in a NON_DEPENDENT_EXPR), but
cxx_eval_constant_expression ICEs on unsupported trees (of which CAST_EXPR
is one).  The sequence of events is:

  1. build_non_dependent_expr for the array subscript yields
     NON_DEPENDENT_EXPR<<<(bool)__r && __s>>> ? 1 : 2
  2. cp_build_array_ref calls fold_non_dependent_expr on this subscript
     (after this point, processing_template_decl is cleared)
  3. during which, the COND_EXPR case of tsubst_copy_and_build calls
     fold_non_dependent_expr on the first operand
  4. during which, we crash from p_c_e_1 because it attempts trial
     evaluation of the CAST_EXPR '(bool)__r'.

Note that even if this crash didn't happen, fold_non_dependent_expr
from cp_build_array_ref would still ultimately be one big no-op here
since neither constexpr evaluation nor tsubst handle NON_DEPENDENT_EXPR.

In light of this and of the observation that we should never see
NON_DEPENDENT_EXPR in a context where a constant expression is needed
(it's used primarily in the build_x_* family of functions), it seems
futile for p_c_e_1 to ever return true for NON_DEPENDENT_EXPR.  And the
otherwise inconsistent handling of NON_DEPENDENT_EXPR between p_c_e_1,
cxx_evaluate_constexpr_expression and tsubst apparently leads to weird
bugs such as this one.

	PR c++/104507

gcc/cp/ChangeLog:

	* constexpr.cc (potential_constant_expression_1)
	<case NON_DEPENDENT_EXPR>: Return false instead of recursing.
	Assert tf_error isn't set.

gcc/testsuite/ChangeLog:

	* g++.dg/template/non-dependent21.C: New test.
2022-02-16 12:41:35 -05:00
Jakub Jelinek
f9c4917f01 testsuite: Add testcase for already fixed PR [PR104448]
This PR has been fixed with r12-7147-g2f9ab267e725ddf2.

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

	PR target/104448
	* gcc.target/i386/pr104448.c: New test.
2022-02-16 17:03:58 +01:00
Jakub Jelinek
f997eef565 combine: Fix up -fcompare-debug issue in the combiner [PR104544]
On the following testcase on aarch64-linux, we behave differently
with -g and -g0.

The problem is that on:
(insn 10011 10010 10012 2 (set (reg:CC 66 cc)
        (compare:CC (reg:DI 105)
            (const_int 0 [0]))) "pr104544.c":18:3 407 {cmpdi}
     (expr_list:REG_DEAD (reg:DI 105)
        (nil)))
(insn 10012 10011 10013 2 (set (reg:SI 109)
        (eq:SI (reg:CC 66 cc)
            (const_int 0 [0]))) "pr104544.c":18:3 444 {aarch64_cstoresi}
     (expr_list:REG_DEAD (reg:CC 66 cc)
        (nil)))
(insn 10013 10012 10016 2 (set (reg:DI 110)
        (zero_extend:DI (reg:SI 109))) "pr104544.c":18:3 111 {*zero_extendsidi2_aarch64}
     (expr_list:REG_DEAD (reg:SI 109)
        (nil)))
(insn 10016 10013 10017 2 (parallel [
            (set (reg:CC 66 cc)
                (compare:CC (const_int 0 [0])
                    (reg:DI 110)))
            (set (reg:DI 111)
                (neg:DI (reg:DI 110)))
        ]) "pr104544.c":18:3 281 {negdi_carryout}
     (expr_list:REG_DEAD (reg:DI 110)
        (nil)))
...
(debug_insn 6 5 7 2 (var_location:SI y (debug_expr:SI D#5)) "pr104544.c":18:3 -1
     (nil))
(debug_insn 7 6 10033 2 (debug_marker) "pr104544.c":11:3 -1
     (nil))
(insn 10033 7 10034 2 (set (reg:DI 117 [ _14 ])
        (ior:DI (reg:DI 111)
            (reg:DI 112))) "pr104544.c":11:6 496 {iordi3}
     (expr_list:REG_DEAD (reg:DI 112)
        (expr_list:REG_DEAD (reg:DI 111)
            (nil))))
we successfully split 3 insns into two:

Trying 10011, 10013 -> 10016:
 10011: cc:CC=cmp(r105:DI,0)
      REG_DEAD r105:DI
 10013: r110:DI=cc:CC==0
      REG_DEAD cc:CC
 10016: {cc:CC=cmp(0,r110:DI);r111:DI=-r110:DI;}
      REG_DEAD r110:DI
Failed to match this instruction:
(parallel [
        (set (reg:CC 66 cc)
            (compare:CC (reg:DI 105)
                (const_int 0 [0])))
        (set (reg:DI 111)
            (neg:DI (eq:DI (reg:DI 105)
                    (const_int 0 [0]))))
    ])
Failed to match this instruction:
(parallel [
        (set (reg:CC 66 cc)
            (compare:CC (reg:DI 105)
                (const_int 0 [0])))
        (set (reg:DI 111)
            (neg:DI (eq:DI (reg:DI 105)
                    (const_int 0 [0]))))
    ])
Successfully matched this instruction:
(set (reg:DI 111)
    (neg:DI (eq:DI (reg:DI 105)
            (const_int 0 [0]))))
Successfully matched this instruction:
(set (reg:CC 66 cc)
    (compare:CC (reg:DI 105)
        (const_int 0 [0])))
Successfully matched this instruction:
(set (reg:DI 112)
    (neg:DI (eq:DI (reg:CC 66 cc)
            (const_int 0 [0]))))
allowing combination of insns 10011, 10013 and 10016
original costs 4 + 4 + 4 = 16
replacement costs 4 + 4 = 12
deferring deletion of insn with uid = 10011.

but the code that searches forward for insns to update their log
links (before the change there is a link from insn 10033 to insn 10016
for pseudo 111) only finds insn 10033 and updates the log link if
-g isn't enabled, otherwise it stops earlier because there are debug insns
in between.  So, with -g LOG_LINKS of 10033 isn't updated, points eventually
to NOTE_INSN_DELETED and so we do not attempt to combine 10033 with other
insns, while with -g0 we do.

The following patch fixes that by instead ignoring debug insns during the
searching.  We can still check BLOCK_FOR_INSN (insn) on those, because
if we notice DEBUG_INSN in a following basic block, necessarily there won't
be any further normal insns in the current block after it.

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

	PR rtl-optimization/104544
	* combine.cc (try_combine): When looking for insn whose links
	should be updated from i3 to i2, don't stop on debug insns, instead
	skip over them.

	* gcc.dg/pr104544.c: New test.
2022-02-16 14:48:30 +01:00
Richard Sandiford
f31924f72a aarch64: Tweak atomic-inst-cas.c options
atomic-inst-cas.c has code to skip __atomic_compare_exchange_n
calls for invalid memory orderings, but -Winvalid-memory-model
applies before the dead code is removed (which is the right
behaviour IMO).  This patch therefore suppresses the warning
for this test.

gcc/testsuite/
	* gcc.target/aarch64/atomic-inst-cas.c: Add
	-Wno-invalid-memory-model.
2022-02-16 10:21:14 +00:00
Richard Sandiford
a01ba10b9f aarch64: Remove XFAIL for bic-bitmask-1.c
bic-bitmask-1.c is now passing, so remove the XFAIL.

gcc/testsuite/
	* gcc.target/aarch64/bic-bitmask-1.c: Remove XFAIL.
2022-02-16 10:21:14 +00:00
Richard Sandiford
25332d2325 aarch64: Extend PR100056 patterns to +
pr100056.c contains things like:

    int
    or_shift_u3a (unsigned i)
    {
      i &= 7;
      return i | (i << 11);
    }

After g:96146e61cd7aee62c21c2845916ec42152918ab7, the preferred
gimple representation of this is a multiplication:

  i_2 = i_1(D) & 7;
  _5 = i_2 * 2049;

Expand then open-codes the multiplication back to individual shifts,
but (of course) it uses + rather than | to combine the shifts.
This means that we end up with the RTL equivalent of:

  i + (i << 11)

I wondered about canonicalising the + to | (*back* to | in this case)
when the operands have no set bits in common and when one of the
operands is &, | or ^, but that didn't seem to be a popular idea when
I asked on IRC.  The feeling seemed to be that + is inherently simpler
than |, so we shouldn't be “simplifying” the other way.

This patch therefore adjusts the PR100056 patterns to handle +
as well as |, in cases where the operands are provably disjoint.

For:

    int
    or_shift_u8 (unsigned char i)
    {
      return i | (i << 11);
    }

the instructions:

    2: r95:SI=zero_extend(x0:QI)
      REG_DEAD x0:QI
    7: r98:SI=r95:SI<<0xb

are combined into:

    (parallel [
        (set (reg:SI 98)
             (and:SI (ashift:SI (reg:SI 0 x0 [ i ])
                                (const_int 11 [0xb]))
                     (const_int 522240 [0x7f800])))
        (set (reg/v:SI 95 [ i ])
             (zero_extend:SI (reg:QI 0 x0 [ i ])))
    ])

which fails to match, but which is then split into its individual
(independent) sets.  Later the zero_extend is combined with the add
to get an ADD UXTB:

    (set (reg:SI 99)
         (plus:SI (zero_extend:SI (reg:QI 0 x0 [ i ]))
                  (reg:SI 98)))

This means that there is never a 3-insn combo to match the split
against.  The end result is therefore:

        ubfiz   w1, w0, 11, 8
        add     w0, w1, w0, uxtb

This is a bit redundant, since it's doing the zero_extend twice.
It is at least 2 instructions though, rather than the 3 that we
had before the original patch for PR100056.  or_shift_u8_asm is
affected similarly.

The net effect is that we do still have 2 UBFIZs, but we're at
least back down to 2 instructions per function, as for GCC 11.
I think that's good enough for now.

There are probably other instructions that should be extended
to support + as well as | (e.g. the EXTR ones), but those aren't
regressions and so are GCC 13 material.

gcc/
	PR target/100056
	* config/aarch64/iterators.md (LOGICAL_OR_PLUS): New iterator.
	* config/aarch64/aarch64.md: Extend the PR100056 patterns
	to handle plus in the same way as ior, if the operands have
	no set bits in common.

gcc/testsuite/
	PR target/100056
	* gcc.target/aarch64/pr100056.c: XFAIL the original UBFIZ test
	and instead expect two UBFIZs + two ADD UXTBs.
2022-02-16 10:21:13 +00:00
Iain Buclaw
d75691877c d: Merge upstream dmd 52844d4b1, druntime dbd0c874, phobos 896b1d0e1.
D front-end changes:

    - Parsing and compiling C code is now possible using `import'.
    - `throw' statements can now be used as an expression.
    - Improvements to the D template emission strategy when compiling
      with `-funittest'.

D Runtime changes:

    - New core.int128 module for implementing intrinsics to support
      128-bit integer types.
    - C bindings for the kernel and C runtime have been better separated
      to allow compiling for hybrid targets, such as kFreeBSD.

Phobos changes:

    - The std.experimental.checkedint module has been renamed to
      std.checkedint.

gcc/d/ChangeLog:

	* d-builtins.cc (d_build_builtins_module): Set purity of DECL_PURE_P
	functions to PURE::const_.
	* d-gimplify.cc (bit_field_ref): New function.
	(d_gimplify_modify_expr): Handle implicit casting for assignments to
	bit-fields.
	(d_gimplify_unary_expr): New function.
	(d_gimplify_binary_expr): New function.
	(d_gimplify_expr): Handle UNARY_CLASS_P and BINARY_CLASS_P.
	* d-target.cc (Target::_init): Initialize bitFieldStyle.
	(TargetCPP::parameterType): Update signature.
	(Target::supportsLinkerDirective): New function.
	* dmd/MERGE: Merge upstream dmd 52844d4b1.
	* expr.cc (ExprVisitor::visit (ThrowExp *)): New function.
	* types.cc (d_build_bitfield_integer_type): New function.
	(insert_aggregate_bitfield): New function.
	(layout_aggregate_members): Handle inserting bit-fields into an
	aggregate type.

libphobos/ChangeLog:

	* Makefile.in: Regenerate.
	* libdruntime/MERGE: Merge upstream druntime dbd0c874.
	* libdruntime/Makefile.am (DRUNTIME_CSOURCES): Add core/int128.d.
	(DRUNTIME_DISOURCES): Add __builtins.di.
	* libdruntime/Makefile.in: Regenerate.
	* src/MERGE: Merge upstream phobos 896b1d0e1.
	* src/Makefile.am (PHOBOS_DSOURCES): Add std/checkedint.d.
	* src/Makefile.in: Regenerate.
	* testsuite/testsuite_flags.in: Add -fall-instantiations to
	--gdcflags.
2022-02-16 11:15:02 +01:00
Jakub Jelinek
0233276439 openmp: For min/max omp atomic compare forms verify arg types with build_binary_op [PR104531]
The MIN_EXPR/MAX_EXPR handling in *build_binary_op is minimal (especially
for C FE), because min/max aren't expressions the languages contain directly.
I'm using those for the
  #pragma omp atomic
  x = x < y ? y : x;
forms, but e.g. for the attached testcase we normally reject _Complex int vs. int
comparisons, in C++ due to MIN/MAX_EXPR we were diagnosing it as invalid types
for <unknown> while in C we accept it and ICEd later on.

The following patch will try build_binary_op with LT_EXPR on the operands first
to get needed diagnostics and fail if it returns error_mark_node.

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

	PR c/104531
	* c-omp.cc (c_finish_omp_atomic): For MIN_EXPR/MAX_EXPR, try first
	build_binary_op with LT_EXPR and only if that doesn't return
	error_mark_node call build_modify_expr.

	* c-c++-common/gomp/atomic-31.c: New test.
2022-02-16 09:27:11 +01:00
Jakub Jelinek
6e74122f0d c-family: Fix up shorten_compare for decimal vs. non-decimal float comparison [PR104510]
The comment in shorten_compare says:
  /* If either arg is decimal float and the other is float, fail.  */
but the callers of shorten_compare don't expect anything like failure
as a possibility from the function, callers require that the function
promotes the operands to the same type, whether the original selected
*restype_ptr one or some shortened.
So, if we choose not to shorten, we should still promote to the original
*restype_ptr.

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

	PR c/104510
	* c-common.cc (shorten_compare): Convert original arguments to
	the original *restype_ptr when mixing binary and decimal float.

	* gcc.dg/dfp/pr104510.c: New test.
2022-02-16 09:25:55 +01:00
GCC Administrator
875e493bf5 Daily bump. 2022-02-16 00:16:26 +00:00
Peter Bergner
3d8d8e34f7 rs6000: Retry tbegin. instructions that can fail intermittently
The HTM tbegin. instruction can fail intermittently due to many reasons.
This can lead to htm-1.c FAILing from time to time.  The solution is to
allow retrying the instruction a few times before aborting.

2022-02-15  Peter Bergner  <bergner@linux.ibm.com>

gcc/testsuite/
	* gcc.target/powerpc/htm-1.c: Retry intermittent failing tbegins.
2022-02-15 16:53:07 -06:00
Andrew MacLeod
e15425e899 Use GORI to evaluate arguments of a COND_EXPR.
Provide an API into gori to perform a basic evaluation of the arguments of a
COND_EXPR if they are in the dependency chain of the condition.

	PR tree-optimization/104526
	gcc/
	* gimple-range-fold.cc (fold_using_range::range_of_cond_expr): Call
	new routine.
	* gimple-range-gori.cc (range_def_chain::get_def_chain): Force a build
	of dependency chain if there isn't one.
	(gori_compute::condexpr_adjust): New.
	* gimple-range-gori.h (class gori_compute): New prototype.

	gcc/testsuite/
	* gcc.dg/pr104526.c: New.
2022-02-15 17:03:27 -05:00
David Malcolm
84832cab6e analyzer: fix ICE on cast to NULL type [PR104524]
gcc/analyzer/ChangeLog:
	PR analyzer/104524
	* region-model-manager.cc
	(region_model_manager::maybe_fold_sub_svalue): Only call
	get_or_create_cast if type is non-NULL.

gcc/testsuite/ChangeLog:
	PR analyzer/104524
	* gcc.dg/analyzer/pr104524.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-02-15 16:34:33 -05:00
David Malcolm
1e2fe6715a analyzer: fix uninit false +ve due to optimized conditionals [PR102692]
There is false positive from -Wanalyzer-use-of-uninitialized-value on
gcc.dg/analyzer/pr102692.c here:

  ‘fix_overlays_before’: events 1-3
    |
    |   75 |   while (tail
    |      |          ~~~~
    |   76 |          && (tem = make_lisp_ptr (tail, 5),
    |      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |          |
    |      |          (1) following ‘false’ branch (when ‘tail’ is NULL)...
    |   77 |              (end = marker_position (XOVERLAY (tem)->end)) >= pos))
    |      |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |......
    |   82 |   if (!tail || end < prev || !tail->next)
    |      |       ~~~~~    ~~~~~~~~~~
    |      |       |            |
    |      |       |            (3) use of uninitialized value ‘end’ here
    |      |       (2) ...to here
    |

The issue is that inner || of the conditionals have been folded within the
frontend from a chain of control flow:

   5   │   if (tail == 0B) goto <D.1986>; else goto <D.1988>;
   6   │   <D.1988>:
   7   │   if (end < prev) goto <D.1986>; else goto <D.1989>;
   8   │   <D.1989>:
   9   │   _1 = tail->next;
  10   │   if (_1 == 0B) goto <D.1986>; else goto <D.1987>;
  11   │   <D.1986>:

to an OR expr (and then to a bitwise-or by the gimplifier):

   5   │   _1 = tail == 0B;
   6   │   _2 = end < prev;
   7   │   _3 = _1 | _2;
   8   │   if (_3 != 0) goto <D.1986>; else goto <D.1988>;
   9   │   <D.1988>:
  10   │   _4 = tail->next;
  11   │   if (_4 == 0B) goto <D.1986>; else goto <D.1987>;

This happens for sufficiently simple conditionals in fold_truth_andor.
In particular, the (end < prev) is short-circuited without optimization,
but is evaluated with optimization, leading to the false positive.

Given how early this folding occurs, it seems the simplest fix is to
try to detect places where this optimization appears to have happened,
and suppress uninit warnings within the statement that would have
been short-circuited.

gcc/analyzer/ChangeLog:
	PR analyzer/102692
	* exploded-graph.h (impl_region_model_context::get_stmt): New.
	* region-model.cc: Include "gimple-ssa.h", "tree-phinodes.h",
	"tree-ssa-operands.h", and "ssa-iterators.h".
	(within_short_circuited_stmt_p): New.
	(region_model::check_for_poison): Don't warn about uninit values
	if within_short_circuited_stmt_p.
	* region-model.h (region_model_context::get_stmt): New vfunc.
	(noop_region_model_context::get_stmt): New.

gcc/testsuite/ChangeLog:
	PR analyzer/102692
	* gcc.dg/analyzer/pr102692-2.c: New test.
	* gcc.dg/analyzer/pr102692.c: Remove xfail.  Remove -O2 from
	options and move to...
	* gcc.dg/analyzer/torture/pr102692.c: ...here.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-02-15 16:33:29 -05:00
Tobias Burnus
4d74ea5517 Fortran/OpenMP: Fix depend-clause handling for c_ptr
gcc/fortran/ChangeLog:

	* trans-openmp.cc (gfc_trans_omp_depobj): Fix to alloc/ptr dummy
	and for c_ptr.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/depend-4.f90: Add VALUE test, update scan test.
	* gfortran.dg/gomp/depend-5.f90: Fix scan tree for -m32.
	* gfortran.dg/gomp/depend-6.f90: New test.
2022-02-15 21:42:33 +01:00
Richard Sandiford
8e84b2b37a aarch64: Fix subs_compare_2.c regression [PR100874]
subs_compare_2.c tests that we can use a SUBS+CSEL sequence for:

unsigned int
foo (unsigned int a, unsigned int b)
{
  unsigned int x = a - 4;
  if (a < 4)
    return x;
  else
    return 0;
}

As Andrew notes in the PR, this is effectively MIN (x, 4) - 4,
and it is now recognised as such by phiopt.  Previously it was
if-converted in RTL instead.

I tried to look for ways to generalise this to other situations
and to other ?:-style operations, not just max and min.  However,
for general ?: we tend to push an outer “- CST” into the arms of
the ?: -- at least if one of them simplifies -- so I didn't find
any useful abstraction.

This patch therefore adds a pattern specifically for
max/min(a,cst)-cst.  I'm not thrilled at having to do this,
but it seems like the least worst fix in the circumstances.
Also, max(a,cst)-cst for unsigned a is a useful saturating
subtraction idiom and so is arguably worth its own code
for that reason.

gcc/
	PR target/100874
	* config/aarch64/aarch64-protos.h (aarch64_maxmin_plus_const):
	Declare.
	* config/aarch64/aarch64.cc (aarch64_maxmin_plus_const): New function.
	* config/aarch64/aarch64.md (*aarch64_minmax_plus): New pattern.

gcc/testsuite/
	* gcc.target/aarch64/max_plus_1.c: New test.
	* gcc.target/aarch64/max_plus_2.c: Likewise.
	* gcc.target/aarch64/max_plus_3.c: Likewise.
	* gcc.target/aarch64/max_plus_4.c: Likewise.
	* gcc.target/aarch64/max_plus_5.c: Likewise.
	* gcc.target/aarch64/max_plus_6.c: Likewise.
	* gcc.target/aarch64/max_plus_7.c: Likewise.
	* gcc.target/aarch64/min_plus_1.c: Likewise.
	* gcc.target/aarch64/min_plus_2.c: Likewise.
	* gcc.target/aarch64/min_plus_3.c: Likewise.
	* gcc.target/aarch64/min_plus_4.c: Likewise.
	* gcc.target/aarch64/min_plus_5.c: Likewise.
	* gcc.target/aarch64/min_plus_6.c: Likewise.
	* gcc.target/aarch64/min_plus_7.c: Likewise.
2022-02-15 18:09:35 +00:00
Richard Sandiford
65df3aefaa aarch64: Fix store_v2vec_lanes.c failure
store_v2vec_lanes.c started failing after SLP was enabled at -O2.
The test is specifically checking what happens for unvectorised code,
with the vectors being constructed from individal addition results.

gcc/testsuite/
	* gcc.target/aarch64/store_v2vec_lanes.c: Add -fno-tree-vectorize.
2022-02-15 18:09:34 +00:00
Richard Sandiford
fd77b1208d aarch64: Add +nosve to tests
This patch adds +nosve to various Advanced SIMD-only tests.

gcc/testsuite/
	* gcc.target/aarch64/shl-combine-2.c: New test.
	* gcc.target/aarch64/shl-combine-3.c: Likewise.
	* gcc.target/aarch64/shl-combine-4.c: Likewise.
	* gcc.target/aarch64/shl-combine-5.c: Likewise.
	* gcc.target/aarch64/xtn-combine-1.c: Likewise.
	* gcc.target/aarch64/xtn-combine-2.c: Likewise.
	* gcc.target/aarch64/xtn-combine-3.c: Likewise.
	* gcc.target/aarch64/xtn-combine-4.c: Likewise.
	* gcc.target/aarch64/xtn-combine-5.c: Likewise.
	* gcc.target/aarch64/xtn-combine-6.c: Likewise.
2022-02-15 18:09:34 +00:00