Commit graph

199079 commits

Author SHA1 Message Date
Jakub Jelinek
7423f5b56a xtensa: Fix up fatal_error message strings in xtensa-dynconfig.c [PR108890]
The translation PR complains that these 4 messages from xtensa-dynconfig.c
are marked in po/gcc.pot as c-format (which doesn't allow %qs) while they
should be gcc-internal-format.

The problem is in the manual translation of the strings with _(),
that should be both unnecessary because fatal_error invokes _() on its
argument already, but also incorrect for the above reason, for
gcc-internal-format strings one should use G_("...") instead if really
needed.

The following patch drops those _("..."), tested by regenerating po/gcc.pot
to see they are now gcc-internal-format, but not really tested on xtensa
target.

2023-02-23  Jakub Jelinek  <jakub@redhat.com>

	PR translation/108890
	* config/xtensa/xtensa-dynconfig.c (xtensa_load_config): Drop _()s
	around fatal_error format strings.
2023-02-23 23:26:43 +01:00
Jakub Jelinek
5592679df7 testsuite: Fix up modules.exp [PR108899]
On Wed, Feb 22, 2023 at 02:33:42PM -0300, Alexandre Oliva via Gcc-patches wrote:
> When a multi-source module is found to be unsupported, we fail
> module_cmi_p and subsequent sources.  Override proc unsupported to
> mark the result in module_do, and test it to skip module_cmp_p and
> subsequent related tests.
>
> for  gcc/testsuite/ChangeLog
>
>       * g++.dg/modules/modules.exp: Override unsupported to update
>       module_do, and test it after dg-test.

This patch breaks testing with more than one set of options in
target board, like
make check-g++ RUNTESTFLAGS='--target_board=unix\{-m32,-m64\} modules.exp'
yields:
...
                 === g++ Summary for unix/-m32 ===

 # of expected passes            7217
 # of unexpected failures        1
 # of expected failures          18
 # of unsupported tests          2
 Running target unix/-m64
...
 ERROR: tcl error sourcing /home/jakub/src/gcc/gcc/testsuite/g++.dg/modules/modules.exp.
 ERROR: tcl error code TCL OPERATION RENAME TARGET_EXISTS
 ERROR: can't rename to "saved-unsupported": command already exists
     while executing
 "rename unsupported saved-unsupported"
     (file "/home/jakub/src/gcc/gcc/testsuite/g++.dg/modules/modules.exp" line 322)
     invoked from within
 "source /home/jakub/src/gcc/gcc/testsuite/g++.dg/modules/modules.exp"
     ("uplevel" body line 1)
     invoked from within
 "uplevel #0 source /home/jakub/src/gcc/gcc/testsuite/g++.dg/modules/modules.exp"
     invoked from within
 "catch "uplevel #0 source $test_file_name" msg"

In other spots where we in *.exp files rename some routine, we guard that
and the following patch does that for modules.exp too.

Tested with running
make check-g++ RUNTESTFLAGS='--target_board=unix\{-m32,-m64\} modules.exp'
again which now works properly again.

2023-02-23  Jakub Jelinek  <jakub@redhat.com>

	PR testsuite/108899
	* g++.dg/modules/modules.exp: Only override unsupported if it
	exists and saved-unsupported doesn't.
2023-02-23 17:17:05 +01:00
Richard Biener
426b0ae103 Fix memory leak in PTA
When handle_lhs_call calls .create on the passed in vector it leaks
any previous allocated storage.  Avoid doing that and instead rely
on the caller for memory management, just truncate the vector.

	* tree-ssa-structalias.cc (handle_lhs_call): Do not
	re-create rhsc, only truncate it.
2023-02-23 15:56:54 +01:00
Jakub Jelinek
9f9a7095d9 c++: Fix up -fcontracts option description [PR108890]
This translation PR mentioned the description is a little bit weird.

2023-02-23  Jakub Jelinek  <jakub@redhat.com>

	PR translation/108890
	* c.opt (fcontracts): Fix description.
2023-02-23 15:27:31 +01:00
Jakub Jelinek
68e7489b6c ipa-prop: Fix another case of missing BUILT_IN_UNREACHABLE_TRAP handling [PR106258]
There is another spot that handles in IPA just BUILT_IN_UNREACHABLE and
not BUILT_IN_UNREACHABLE_TRAP.

This patch fixes that.

2023-02-23  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/106258
	* ipa-prop.cc (try_make_edge_direct_virtual_call): Handle
	BUILT_IN_UNREACHABLE_TRAP like BUILT_IN_UNREACHABLE.
2023-02-23 15:24:43 +01:00
Matthias Kretz
8fda668e09 libstdc++: Test that integral simd reductions are precise
Signed-off-by: Matthias Kretz <m.kretz@gsi.de>

libstdc++-v3/ChangeLog:

	* testsuite/experimental/simd/tests/reductions.cc: Introduce
	max_distance as the type-dependent max error.
2023-02-23 15:01:49 +01:00
Matthias Kretz
ffa39f7120 libstdc++: Fix -Wsign-compare issue
Signed-off-by: Matthias Kretz <m.kretz@gsi.de>

libstdc++-v3/ChangeLog:

	* include/experimental/bits/simd_builtin.h (_S_set): Compare as
	int. The actual range of these indexes is very small.
2023-02-23 15:01:49 +01:00
Matthias Kretz
fa37ac2b59 libstdc++: Add missing constexpr on simd shift implementation
Resolves -Wtautological-compare warnings about `if
(__builtin_is_constant_evaluated())` in the implementations of these
functions.

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>

libstdc++-v3/ChangeLog:

	* include/experimental/bits/simd_x86.h (_S_bit_shift_left)
	(_S_bit_shift_right): Declare constexpr. The implementation was
	already expecting constexpr evaluation.
2023-02-23 15:01:49 +01:00
Matthias Kretz
92c47b15d5 libstdc++: Fix simd build failure on clang
Clang does not support __attribute__ on lambdas. Therefore, only set
_GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA if __clang__ is not defined.

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>

libstdc++-v3/ChangeLog:

	PR libstdc++/108030
	* include/experimental/bits/simd_detail.h
	(_GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA): Define as empty for
	__clang__.
2023-02-23 15:01:49 +01:00
Matthias Kretz
2e29e2fbeb libstdc++: Simplify three helper functions into one
Broadcast is a very common function. This should reduce compile-time
effort.

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>

libstdc++-v3/ChangeLog:

	PR libstdc++/108030
	* include/experimental/bits/simd.h (__vector_broadcast):
	Implement via __vector_broadcast_impl instead of
	__call_with_n_evaluations + 2 lambdas.
	(__vector_broadcast_impl): New.
2023-02-23 15:01:49 +01:00
Richard Biener
af46073dbe Fix memory leak in if-conversion
The following fixes if-conversion failing to release data-references
and the data-reference vector.

	* tree-if-conv.cc (tree_if_conversion): Properly manage
	memory of refs and the contained data references.
2023-02-23 13:51:57 +01:00
Richard Biener
31cc582122 tree-optimization/108888 - call if-conversion
The following makes sure to only predicate calls necessary.

	PR tree-optimization/108888
	* tree-if-conv.cc (if_convertible_stmt_p): Set PLF_2 on
	calls to predicate.
	(predicate_statements): Only predicate calls with PLF_2.

	* g++.dg/torture/pr108888.C: New testcase.
2023-02-23 11:16:39 +01:00
Takayuki 'January June' Suwa
4f609c6f76 xtensa: Fix missing mode warnings in machine description
gcc/ChangeLog:

	* config/xtensa/xtensa.md
	(zero_cost_loop_start, zero_cost_loop_end, loop_end):
	Add missing "SI:" to PLUS RTXes.
2023-02-23 01:30:57 -08:00
Max Filippov
782e442e4f xtensa: fix PR target/108876
In commit b2ef02e8cb, the sibling call
insn included (use (reg:SI A0_REG)) to fix the problem, which added
a USE chain unconditionally to the data flow of register A0 during
the sibling call.

As a result, df_regs_ever_live_p (A0_REG) returns true, so even if
register A0 is not used outside of the sibling call insn, saves and
restores to stack slots are emitted in pro/epilogue, and finally
code size increases.
(This is why I never included (use A0) in sibling calls)

    /* example */
    extern int foo(int);
    int test(int a) {
      return foo(a * 3 + 1);
    }

;; before
    test:
	addi	sp, sp, -16	;; unneeded stack frame allocation (induced)
	s32i.n	a0, sp, 12	;; unneeded saving of register A0
	l32i.n	a0, sp, 12	;; unneeded restoration of register A0
	addx2	a2, a2, a2
	addi.n	a2, a2, 1
	addi	sp, sp, 16	;; unneeded stack frame freeing (induced)
	j.l	foo, a9		;; sibling call (truly needs register A0)

The essential cause is that we emit (use A0) *before* the insns that
does the stack pointer adjustment during epilogue expansion, so the
liveness of register A0 ends early, so register A0 is reused afterwards.

This patch fixes the problem and avoids such regression by doing the
emit of (use A0) in the sibling call epilogue expansion at the end.

;; after
test:
	addx2	a2, a2, a2
	addi.n	a2, a2, 1
	j.l	foo, a9

>From RTL-pass "315r.rnreg" by
"gfortran -O3 -funroll-loops -mabi=call0 -S -da gcc-gnu/gcc/testsuite/gfortran.dg/allocate_with_source_5.f90":

    ;; Function selector_init (__selectors_MOD_selector_init, funcdef_no=2, decl_uid=987, cgraph_uid=3, symbol_order=4)
    ...
    (insn 3807 3806 3808 121 (set (reg:SI 15 a15)
            (mem/c:SI (plus:SI (reg/f:SI 1 sp)
                    (const_int 268 [0x10c])) [31  S4 A32])) "gcc-gnu/gcc/testsuite/gfortran.dg/allocate_with_source_5.f90":35:30 53 {movsi_internal}
         (nil))
    (insn 3808 3807 3809 121 (set (reg:SI 7 a7)
            (const_int 288 [0x120])) "gcc-gnu/gcc/testsuite/gfortran.dg/allocate_with_source_5.f90":35:30 53 {movsi_internal}
         (nil))
    (insn 3809 3808 3810 121 (set (reg/f:SI 1 sp)
            (plus:SI (reg/f:SI 1 sp)
                (reg:SI 7 a7))) "gcc-gnu/gcc/testsuite/gfortran.dg/allocate_with_source_5.f90":35:30 1 {addsi3}
         (expr_list:REG_DEAD (reg:SI 9 a9)
            (nil)))
    (insn 3810 3809 721 121 (use (reg:SI 0 a0)) "gcc-gnu/gcc/testsuite/gfortran.dg/allocate_with_source_5.f90":35:30 -1
         (expr_list:REG_DEAD (reg:SI 0 a0)
            (nil)))
    (call_insn/j 721 3810 722 121 (call (mem:SI (symbol_ref:SI ("free") [flags 0x41]  <function_decl 0x7f7c885f6000 __builtin_free>) [0 __builtin_free S4 A32])
            (const_int 0 [0])) "gcc-gnu/gcc/testsuite/gfortran.dg/allocate_with_source_5.f90":35:30 discrim 1 106 {sibcall_internal}
         (expr_list:REG_DEAD (reg:SI 2 a2)
            (expr_list:REG_CALL_DECL (symbol_ref:SI ("free") [flags 0x41]  <function_decl 0x7f7c885f6000 __builtin_free>)
                (expr_list:REG_EH_REGION (const_int 0 [0])
                    (nil))))
        (expr_list:SI (use (reg:SI 2 a2))
            (nil)))

(IMHO the "rnreg" pass doesn't take REG_ALLOC_ORDER into account;
it just seems to allocate registers in fixed_regs index order,
which may have hurt register A0 that became allocatable in the recent
patch)

gcc/ChangeLog:
	PR target/108876

	* config/xtensa/xtensa.cc (xtensa_expand_epilogue):
	Emit (use (reg:SI A0_REG)) at the end in the sibling call
	(i.e. the same place as (return) in the normal call).
2023-02-23 01:30:22 -08:00
Max Filippov
4c3191de2a Revert "gcc: xtensa: fix PR target/108876"
This reverts commit b2ef02e8cb.
2023-02-23 01:30:22 -08:00
Arsen Arsenović
ddf6fe375d docs: Reorder @opindex before corresponding options
gcc/d/ChangeLog:

	* gdc.texi: Reorder @opindex commands to precede @items they
	relate to.

gcc/ChangeLog:

	* doc/cppdiropts.texi: Reorder @opindex commands to precede
	@items they relate to.
	* doc/cppopts.texi: Ditto.
	* doc/cppwarnopts.texi: Ditto.
	* doc/invoke.texi: Ditto.
	* doc/lto.texi: Ditto.

gcc/fortran/ChangeLog:

	* invoke.texi: Reorder @opindex commands to precede @items they
	relate to.
2023-02-23 02:08:10 +01:00
GCC Administrator
b6f98991b1 Daily bump. 2023-02-23 00:17:57 +00:00
Marek Polacek
1370014f2e c-family: avoid compile-time-hog in c_genericize [PR108880]
This fixes a compile-time hog with UBSan.  This only happened in cc1 but
not cc1plus.  The problem is ultimately that c_genericize_control_stmt/
STATEMENT_LIST -> walk_tree_1 doesn't use a hash_set to remember visited
nodes, so it kept on recursing for a long time.  We should be able to
use the pset that c_genericize created.  We just need to use walk_tree
instead of walk_tree_w_d so that the pset is explicit.

	PR c/108880

gcc/c-family/ChangeLog:

	* c-gimplify.cc (c_genericize_control_stmt) <case STATEMENT_LIST>: Pass
	pset to walk_tree_1.
	(c_genericize): Call walk_tree with an explicit pset.

gcc/testsuite/ChangeLog:

	* c-c++-common/ubsan/pr108880.c: New test.
2023-02-22 17:26:29 -05:00
Harald Anlauf
31303c9b5b Fortran: reject invalid CHARACTER length of derived type components [PR96024]
gcc/fortran/ChangeLog:

	PR fortran/96024
	* resolve.cc (resolve_component): The type of a CHARACTER length
	expression must be INTEGER.

gcc/testsuite/ChangeLog:

	PR fortran/96024
	* gfortran.dg/pr96024.f90: New test.
2023-02-22 18:41:20 +01:00
Alexandre Oliva
5344482c4d testsuite: Skip module_cmi_p and related unsupported module test
When a multi-source module is found to be unsupported, we fail
module_cmi_p and subsequent sources.  Override proc unsupported to
mark the result in module_do, and test it to skip module_cmp_p and
subsequent related tests.


for  gcc/testsuite/ChangeLog

	* g++.dg/modules/modules.exp: Override unsupported to update
	module_do, and test it after dg-test.
2023-02-22 14:38:17 -03:00
Alexandre Oliva
1a684dca0e [arm] avoid aes-1742098 mitigation in combine tests
The expected asm output for aes-fuse-[12].c does not correspond to
that which is generated when -mfix-cortex-a57-aes-1742098 is enabled.
The mitigation was introduced after the test, and enabled by default
for the selected processor, a72.  Select a53 instead, where the
migitation is not enabled by default, and all the expected fusions can
take place.


for  gcc/testsuite/ChangeLog

	* gcc.target/arm/aes-fuse-1.c: Switch to -mcpu=cortex-a53.
	* gcc.target/arm/aes-fuse-2.c: Likewise.
2023-02-22 14:38:17 -03:00
Alexandre Oliva
c20ab9bcf0 Drop need for constant I in ctf test
Though I is supposed to be a constant expression, this is not the case
on vxworks, but this is not what this debug information format test is
testing for, so use real constants to initialize complex variables.


for  gcc/testsuite/ChangeLog

	* gcc.dg/debug/ctf/ctf-complex-1.c: Do not test whether I is
	usable in initializers.
2023-02-22 14:38:17 -03:00
Alexandre Oliva
2d6a0fd3bd xfail fp-uint64-convert-double-* on all arm targets
It wasn't long ago that I xfailed these tests on arm-*-eabi, but the
fail is expected on all other arm targets: even when hard float is
available, conversions between 64-bit integers and double are always
emulated on ARM, and the emulation disregards rounding modes.  So,
bump the xfail to all of arm-*-*.


for  gcc/testsuite/ChangeLog

	* gcc.dg/torture/fp-uint64-convert-double-1.c: XFAIL on all of
	arm-*-*.
	* gcc.dg/torture/fp-uint64-convert-double-2.c: Likewise.
2023-02-22 14:38:17 -03:00
Alexandre Oliva
ac113b5aa9 [arm] [testsuite] asm-flag-4.c: match quotes in expected message
Quotes were added around the "asm" keyword in the message expected by
the test, so the test needs adjusting.


for  gcc/testsuite/ChangeLog

	* gcc.target/arm/asm-flag-4.c: Match quotes around "asm" in
	message.
2023-02-22 14:38:17 -03:00
Alexandre Oliva
1a45573d3d testsuite: Accept pmf-vbit-in-delta extra warning
cp_build_binary_op, that issues -Waddress warnings, issues an extra
warning on arm targets, that g++.dg/warn/Waddress-5.C does not expect
when comparing a pointer-to-member-function literal with null.

The reason for the extra warning is that, on arm targets,
TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta, which
causes a different path to be taken, that extracts the
pointer-to-function and the delta fields (minus the vbit) and compares
each one with zero.  It's when comparing this pointer-to-function with
zero, in a recursive cp_build_binary_op, that another warning is
issued.

I suppose there should be a way to skip the warning in this recursive
call, without disabling other warnings that might be issued there, but
this patch only arranges for the test to tolerate the extra warning.


for  gcc/testsuite/ChangeLog

	* g++.dg/warn/Waddress-5.C: Tolerate extra -Waddress warning.
2023-02-22 14:38:17 -03:00
Alexandre Oliva
d70f49e982 [libstdc++] do not destruct mutex_pool mutexes
On vxworks, after destroying the semaphore used to implement a mutex,
__gthread_mutex_lock fails and __gnu_cxx::__mutex::lock calls
__throw_concurrence_lock_error.  Nothing ensures the mutex_pool
mutexes survive init-once objects containing _Safe_sequence_base.  If
such an object completes construction before mutex_pool
initialization, it will be registered for atexit destruction after the
mutex_pool mutexes, so the _M_detach_all() call in the
_Safe_sequence_base dtor will use already-destructed mutexes, and
basic_string/requirements/citerators_cc fails calling terminate.

This patch fixes this problem by ensuring the mutex pool mutexes are
constructed on demand, on a statically-allocated buffer, but never
destructed.


for  libstdc++-v3/ChangeLog

	* src/c++11/shared_ptr.cc (__gnu_internal::get_mutex):
	Avoid destruction of the mutex pool.
2023-02-22 14:38:17 -03:00
Alexandre Oliva
2ff710857f [libstdc++] xfail noreplace tests on vxworks
vxworks ignores O_EXCL in open, so noreplace open succeeds when it is
expected to fail.  xfail the tests.


for  libstdc++-v3/ChangeLog

	* testsuite/27_io/basic_ofstream/open/char/noreplace.cc: xfail
	on vxworks.
	* testsuite/27_io/basic_ofstream/open/wchar_t/noreplace.cc:
	Likewise.
2023-02-22 14:35:15 -03:00
Alexandre Oliva
937692f20d [libstdc++] [testsuite] intro/names.cc: undef func on vxw7krn
The '#define func' added in 2021, to test that system headers don't
violate the user namespace, exposes such a bug in the vxworks sysLib.h
header, so add yet another such annotated workaround.


for  libstdc++-v3/ChangeLog

	* testsuite/17_intro/names.cc: Undef func on vxworks >= 7 in
	kernel mode.
2023-02-22 14:35:13 -03:00
Thomas Schwinge
aee5ee3560 Rust: In 'type_for_mode' langhook also consider all 'int_n' modes/types
As reported in "Rust related issues" at the end of
<https://inbox.sourceware.org/gcc-patches/20221219212344.ewtuzd2jtztm77x2@lug-owl.de>
"Modula-2 / Rust: Many targets failing",
<https://github.com/Rust-GCC/gccrs/issues/1713>
"Test failure on msp430-elfbare target", for '--target=msp430-elfbar' we ICE:

    <built-in>: internal compiler error: Segmentation fault
    0xf2efbf crash_signal
          ../../gcc/gcc/toplev.cc:314
    0x120c8c7 build_function_type(tree_node*, tree_node*, bool)
          ../../gcc/gcc/tree.cc:7360
    0x120cc20 build_function_type_list(tree_node*, ...)
          ../../gcc/gcc/tree.cc:7442
    0x120d16b build_common_builtin_nodes()
          ../../gcc/gcc/tree.cc:9883
    0x8449b4 grs_langhook_init
          ../../gcc/gcc/rust/rust-lang.cc:132
    [...]

This is due to 'tmp == NULL' for 'gcc/tree.cc:build_common_builtin_nodes':

    tmp = lang_hooks.types.type_for_mode (targetm.eh_return_filter_mode (), 0);

..., were 'targetm.eh_return_filter_mode' (that is,
'gcc/targhooks.cc:default_eh_return_filter_mode',
via calling 'targetm.unwind_word_mode':
'gcc/config/msp430/msp430.cc:msp430_unwind_word_mode') returns 'PSImode',
and 'lang_hooks.types.type_for_mode' (that is,
'gcc/rust/rust-lang.cc:grs_langhook_type_for_mode') returns 'NULL' for
'PSImode'.

As, for example, discussed in <https://gcc.gnu.org/PR46805>
"ICE: SIGSEGV in optab_for_tree_code (optabs.c:407) with -O -fno-tree-scev-cprop -ftree-vectorize",
we have to support "random" modes/types in the 'type_for_mode' langhook.

	gcc/rust/
	* rust-lang.cc (grs_langhook_type_for_mode): Also consider all
	'int_n' modes/types.
2023-02-22 15:54:55 +01:00
Andrew Stubbs
3da77f217c vect: inbranch SIMD clones
There has been support for generating "inbranch" SIMD clones for a long time,
but nothing actually uses them (as far as I can see).

This patch add supports for a sub-set of possible cases (those using
mask_mode == VOIDmode).  The other cases fail to vectorize, just as before,
so there should be no regressions.

The sub-set of support should cover all cases needed by amdgcn, at present.

gcc/ChangeLog:

	* internal-fn.cc (expand_MASK_CALL): New.
	* internal-fn.def (MASK_CALL): New.
	* internal-fn.h (expand_MASK_CALL): New prototype.
	* omp-simd-clone.cc (simd_clone_adjust_argument_types): Set vector_type
	for mask arguments also.
	* tree-if-conv.cc: Include cgraph.h.
	(if_convertible_stmt_p): Do if conversions for calls to SIMD calls.
	(predicate_statements): Convert functions to IFN_MASK_CALL.
	* tree-vect-loop.cc (vect_get_datarefs_in_loop): Recognise
	IFN_MASK_CALL as a SIMD function call.
	* tree-vect-stmts.cc (vectorizable_simd_clone_call): Handle
	IFN_MASK_CALL as an inbranch SIMD function call.
	Generate the mask vector arguments.

gcc/testsuite/ChangeLog:

	* gcc.dg/vect/vect-simd-clone-16.c: New test.
	* gcc.dg/vect/vect-simd-clone-16b.c: New test.
	* gcc.dg/vect/vect-simd-clone-16c.c: New test.
	* gcc.dg/vect/vect-simd-clone-16d.c: New test.
	* gcc.dg/vect/vect-simd-clone-16e.c: New test.
	* gcc.dg/vect/vect-simd-clone-16f.c: New test.
	* gcc.dg/vect/vect-simd-clone-17.c: New test.
	* gcc.dg/vect/vect-simd-clone-17b.c: New test.
	* gcc.dg/vect/vect-simd-clone-17c.c: New test.
	* gcc.dg/vect/vect-simd-clone-17d.c: New test.
	* gcc.dg/vect/vect-simd-clone-17e.c: New test.
	* gcc.dg/vect/vect-simd-clone-17f.c: New test.
	* gcc.dg/vect/vect-simd-clone-18.c: New test.
	* gcc.dg/vect/vect-simd-clone-18b.c: New test.
	* gcc.dg/vect/vect-simd-clone-18c.c: New test.
	* gcc.dg/vect/vect-simd-clone-18d.c: New test.
	* gcc.dg/vect/vect-simd-clone-18e.c: New test.
	* gcc.dg/vect/vect-simd-clone-18f.c: New test.
2023-02-22 13:57:11 +00:00
Ju-Zhe Zhong
c878c6586d RISC-V: Add RVV reduction C/C++ intrinsics support
gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc (class reducop): New class.
	(class widen_reducop): Ditto.
	(class freducop): Ditto.
	(class widen_freducop): Ditto.
	(BASE): Ditto.
	* config/riscv/riscv-vector-builtins-bases.h: Ditto.
	* config/riscv/riscv-vector-builtins-functions.def (vredsum): Add reduction support.
	(vredmaxu): Ditto.
	(vredmax): Ditto.
	(vredminu): Ditto.
	(vredmin): Ditto.
	(vredand): Ditto.
	(vredor): Ditto.
	(vredxor): Ditto.
	(vwredsum): Ditto.
	(vwredsumu): Ditto.
	(vfredusum): Ditto.
	(vfredosum): Ditto.
	(vfredmax): Ditto.
	(vfredmin): Ditto.
	(vfwredosum): Ditto.
	(vfwredusum): Ditto.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct reduc_alu_def): Ditto.
	(SHAPE): Ditto.
	* config/riscv/riscv-vector-builtins-shapes.h: Ditto.
	* config/riscv/riscv-vector-builtins-types.def (DEF_RVV_WI_OPS): New macro.
	(DEF_RVV_WU_OPS): Ditto.
	(DEF_RVV_WF_OPS): Ditto.
	(vint8mf8_t): Ditto.
	(vint8mf4_t): Ditto.
	(vint8mf2_t): Ditto.
	(vint8m1_t): Ditto.
	(vint8m2_t): Ditto.
	(vint8m4_t): Ditto.
	(vint8m8_t): Ditto.
	(vint16mf4_t): Ditto.
	(vint16mf2_t): Ditto.
	(vint16m1_t): Ditto.
	(vint16m2_t): Ditto.
	(vint16m4_t): Ditto.
	(vint16m8_t): Ditto.
	(vint32mf2_t): Ditto.
	(vint32m1_t): Ditto.
	(vint32m2_t): Ditto.
	(vint32m4_t): Ditto.
	(vint32m8_t): Ditto.
	(vuint8mf8_t): Ditto.
	(vuint8mf4_t): Ditto.
	(vuint8mf2_t): Ditto.
	(vuint8m1_t): Ditto.
	(vuint8m2_t): Ditto.
	(vuint8m4_t): Ditto.
	(vuint8m8_t): Ditto.
	(vuint16mf4_t): Ditto.
	(vuint16mf2_t): Ditto.
	(vuint16m1_t): Ditto.
	(vuint16m2_t): Ditto.
	(vuint16m4_t): Ditto.
	(vuint16m8_t): Ditto.
	(vuint32mf2_t): Ditto.
	(vuint32m1_t): Ditto.
	(vuint32m2_t): Ditto.
	(vuint32m4_t): Ditto.
	(vuint32m8_t): Ditto.
	(vfloat32mf2_t): Ditto.
	(vfloat32m1_t): Ditto.
	(vfloat32m2_t): Ditto.
	(vfloat32m4_t): Ditto.
	(vfloat32m8_t): Ditto.
	* config/riscv/riscv-vector-builtins.cc (DEF_RVV_WI_OPS): Ditto.
	(DEF_RVV_WU_OPS): Ditto.
	(DEF_RVV_WF_OPS): Ditto.
	(required_extensions_p): Add reduction support.
	(rvv_arg_type_info::get_base_vector_type): Ditto.
	(rvv_arg_type_info::get_tree_type): Ditto.
	* config/riscv/riscv-vector-builtins.h (enum rvv_base_type): Ditto.
	* config/riscv/riscv.md: Ditto.
	* config/riscv/vector-iterators.md (minu): Ditto.
	* config/riscv/vector.md (@pred_reduc_<reduc><mode><vlmul1>): New patern.
	(@pred_reduc_<reduc><mode><vlmul1_zve32>): Ditto.
	(@pred_widen_reduc_plus<v_su><mode><vwlmul1>): Ditto.
	(@pred_widen_reduc_plus<v_su><mode><vwlmul1_zve32>):Ditto.
	(@pred_reduc_plus<order><mode><vlmul1>): Ditto.
	(@pred_reduc_plus<order><mode><vlmul1_zve32>): Ditto.
	(@pred_widen_reduc_plus<order><mode><vwlmul1>): Ditto.
2023-02-22 20:51:21 +08:00
Ju-Zhe Zhong
dc244cdc05 RISC-V: Add floating-point RVV C/C++ api
Add RVV floating-point C/C++ api tests.
The api unit-tests are all passed but not commit.
They are located at RISC-V foundation repo:
https://github.com/riscv-collab/riscv-gcc/tree/rvv-submission-v1

gcc/ChangeLog:

	* config/riscv/iterators.md: New iterator.
	* config/riscv/riscv-vector-builtins-bases.cc (class widen_binop): New class.
	(enum ternop_type): New enum.
	(class vmacc): New class.
	(class imac): Ditto.
	(class vnmsac): Ditto.
	(enum widen_ternop_type): New enum.
	(class vmadd): Ditto.
	(class vnmsub): Ditto.
	(class iwmac): Ditto.
	(class vwmacc): Ditto.
	(class vwmaccu): Ditto.
	(class vwmaccsu): Ditto.
	(class vwmaccus): Ditto.
	(class reverse_binop): Ditto.
	(class vfmacc): Ditto.
	(class vfnmsac): Ditto.
	(class vfmadd): Ditto.
	(class vfnmsub): Ditto.
	(class vfnmacc): Ditto.
	(class vfmsac): Ditto.
	(class vfnmadd): Ditto.
	(class vfmsub): Ditto.
	(class vfwmacc): Ditto.
	(class vfwnmacc): Ditto.
	(class vfwmsac): Ditto.
	(class vfwnmsac): Ditto.
	(class float_misc): Ditto.
	(class fcmp): Ditto.
	(class vfclass): Ditto.
	(class vfcvt_x): Ditto.
	(class vfcvt_rtz_x): Ditto.
	(class vfcvt_f): Ditto.
	(class vfwcvt_x): Ditto.
	(class vfwcvt_rtz_x): Ditto.
	(class vfwcvt_f): Ditto.
	(class vfncvt_x): Ditto.
	(class vfncvt_rtz_x): Ditto.
	(class vfncvt_f): Ditto.
	(class vfncvt_rod_f): Ditto.
	(BASE): Ditto.
	* config/riscv/riscv-vector-builtins-bases.h:
	* config/riscv/riscv-vector-builtins-functions.def (vzext): Ditto.
	(vsext): Ditto.
	(vfadd): Ditto.
	(vfsub): Ditto.
	(vfrsub): Ditto.
	(vfwadd): Ditto.
	(vfwsub): Ditto.
	(vfmul): Ditto.
	(vfdiv): Ditto.
	(vfrdiv): Ditto.
	(vfwmul): Ditto.
	(vfmacc): Ditto.
	(vfnmsac): Ditto.
	(vfmadd): Ditto.
	(vfnmsub): Ditto.
	(vfnmacc): Ditto.
	(vfmsac): Ditto.
	(vfnmadd): Ditto.
	(vfmsub): Ditto.
	(vfwmacc): Ditto.
	(vfwnmacc): Ditto.
	(vfwmsac): Ditto.
	(vfwnmsac): Ditto.
	(vfsqrt): Ditto.
	(vfrsqrt7): Ditto.
	(vfrec7): Ditto.
	(vfmin): Ditto.
	(vfmax): Ditto.
	(vfsgnj): Ditto.
	(vfsgnjn): Ditto.
	(vfsgnjx): Ditto.
	(vfneg): Ditto.
	(vfabs): Ditto.
	(vmfeq): Ditto.
	(vmfne): Ditto.
	(vmflt): Ditto.
	(vmfle): Ditto.
	(vmfgt): Ditto.
	(vmfge): Ditto.
	(vfclass): Ditto.
	(vfmerge): Ditto.
	(vfmv_v): Ditto.
	(vfcvt_x): Ditto.
	(vfcvt_xu): Ditto.
	(vfcvt_rtz_x): Ditto.
	(vfcvt_rtz_xu): Ditto.
	(vfcvt_f): Ditto.
	(vfwcvt_x): Ditto.
	(vfwcvt_xu): Ditto.
	(vfwcvt_rtz_x): Ditto.
	(vfwcvt_rtz_xu): Ditto.
	(vfwcvt_f): Ditto.
	(vfncvt_x): Ditto.
	(vfncvt_xu): Ditto.
	(vfncvt_rtz_x): Ditto.
	(vfncvt_rtz_xu): Ditto.
	(vfncvt_f): Ditto.
	(vfncvt_rod_f): Ditto.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct alu_def): Ditto.
	(struct move_def): Ditto.
	* config/riscv/riscv-vector-builtins-types.def (DEF_RVV_WEXTF_OPS): New macro.
	(DEF_RVV_CONVERT_I_OPS): Ditto.
	(DEF_RVV_CONVERT_U_OPS): Ditto.
	(DEF_RVV_WCONVERT_I_OPS): Ditto.
	(DEF_RVV_WCONVERT_U_OPS): Ditto.
	(DEF_RVV_WCONVERT_F_OPS): Ditto.
	(vfloat64m1_t): Ditto.
	(vfloat64m2_t): Ditto.
	(vfloat64m4_t): Ditto.
	(vfloat64m8_t): Ditto.
	(vint32mf2_t): Ditto.
	(vint32m1_t): Ditto.
	(vint32m2_t): Ditto.
	(vint32m4_t): Ditto.
	(vint32m8_t): Ditto.
	(vint64m1_t): Ditto.
	(vint64m2_t): Ditto.
	(vint64m4_t): Ditto.
	(vint64m8_t): Ditto.
	(vuint32mf2_t): Ditto.
	(vuint32m1_t): Ditto.
	(vuint32m2_t): Ditto.
	(vuint32m4_t): Ditto.
	(vuint32m8_t): Ditto.
	(vuint64m1_t): Ditto.
	(vuint64m2_t): Ditto.
	(vuint64m4_t): Ditto.
	(vuint64m8_t): Ditto.
	* config/riscv/riscv-vector-builtins.cc (DEF_RVV_CONVERT_I_OPS): Ditto.
	(DEF_RVV_CONVERT_U_OPS): Ditto.
	(DEF_RVV_WCONVERT_I_OPS): Ditto.
	(DEF_RVV_WCONVERT_U_OPS): Ditto.
	(DEF_RVV_WCONVERT_F_OPS): Ditto.
	(DEF_RVV_F_OPS): Ditto.
	(DEF_RVV_WEXTF_OPS): Ditto.
	(required_extensions_p): Adjust for floating-point support.
	(check_required_extensions): Ditto.
	(unsigned_base_type_p): Ditto.
	(get_mode_for_bitsize): Ditto.
	(rvv_arg_type_info::get_base_vector_type): Ditto.
	(rvv_arg_type_info::get_tree_type): Ditto.
	* config/riscv/riscv-vector-builtins.def (v_f): New define.
	(f): New define.
	(f_v): New define.
	(xu_v): New define.
	(f_w): New define.
	(xu_w): New define.
	* config/riscv/riscv-vector-builtins.h (enum rvv_base_type): New enum.
	(function_expander::arg_mode): New function.
	* config/riscv/vector-iterators.md (sof): New iterator.
	(vfrecp): Ditto.
	(copysign): Ditto.
	(n): Ditto.
	(msac): Ditto.
	(msub): Ditto.
	(fixuns_trunc): Ditto.
	(floatuns): Ditto.
	* config/riscv/vector.md (@pred_broadcast<mode>): New pattern.
	(@pred_<optab><mode>): Ditto.
	(@pred_<optab><mode>_scalar): Ditto.
	(@pred_<optab><mode>_reverse_scalar): Ditto.
	(@pred_<copysign><mode>): Ditto.
	(@pred_<copysign><mode>_scalar): Ditto.
	(@pred_mul_<optab><mode>): Ditto.
	(pred_mul_<optab><mode>_undef_merge): Ditto.
	(*pred_<madd_nmsub><mode>): Ditto.
	(*pred_<macc_nmsac><mode>): Ditto.
	(*pred_mul_<optab><mode>): Ditto.
	(@pred_mul_<optab><mode>_scalar): Ditto.
	(*pred_mul_<optab><mode>_undef_merge_scalar): Ditto.
	(*pred_<madd_nmsub><mode>_scalar): Ditto.
	(*pred_<macc_nmsac><mode>_scalar): Ditto.
	(*pred_mul_<optab><mode>_scalar): Ditto.
	(@pred_neg_mul_<optab><mode>): Ditto.
	(pred_neg_mul_<optab><mode>_undef_merge): Ditto.
	(*pred_<nmadd_msub><mode>): Ditto.
	(*pred_<nmacc_msac><mode>): Ditto.
	(*pred_neg_mul_<optab><mode>): Ditto.
	(@pred_neg_mul_<optab><mode>_scalar): Ditto.
	(*pred_neg_mul_<optab><mode>_undef_merge_scalar): Ditto.
	(*pred_<nmadd_msub><mode>_scalar): Ditto.
	(*pred_<nmacc_msac><mode>_scalar): Ditto.
	(*pred_neg_mul_<optab><mode>_scalar): Ditto.
	(@pred_<misc_op><mode>): Ditto.
	(@pred_class<mode>): Ditto.
	(@pred_dual_widen_<optab><mode>): Ditto.
	(@pred_dual_widen_<optab><mode>_scalar): Ditto.
	(@pred_single_widen_<plus_minus:optab><mode>): Ditto.
	(@pred_single_widen_<plus_minus:optab><mode>_scalar): Ditto.
	(@pred_widen_mul_<optab><mode>): Ditto.
	(@pred_widen_mul_<optab><mode>_scalar): Ditto.
	(@pred_widen_neg_mul_<optab><mode>): Ditto.
	(@pred_widen_neg_mul_<optab><mode>_scalar): Ditto.
	(@pred_cmp<mode>): Ditto.
	(*pred_cmp<mode>): Ditto.
	(*pred_cmp<mode>_narrow): Ditto.
	(@pred_cmp<mode>_scalar): Ditto.
	(*pred_cmp<mode>_scalar): Ditto.
	(*pred_cmp<mode>_scalar_narrow): Ditto.
	(@pred_eqne<mode>_scalar): Ditto.
	(*pred_eqne<mode>_scalar): Ditto.
	(*pred_eqne<mode>_scalar_narrow): Ditto.
	(@pred_merge<mode>_scalar): Ditto.
	(@pred_fcvt_x<v_su>_f<mode>): Ditto.
	(@pred_<fix_cvt><mode>): Ditto.
	(@pred_<float_cvt><mode>): Ditto.
	(@pred_widen_fcvt_x<v_su>_f<mode>): Ditto.
	(@pred_widen_<fix_cvt><mode>): Ditto.
	(@pred_widen_<float_cvt><mode>): Ditto.
	(@pred_extend<mode>): Ditto.
	(@pred_narrow_fcvt_x<v_su>_f<mode>): Ditto.
	(@pred_narrow_<fix_cvt><mode>): Ditto.
	(@pred_narrow_<float_cvt><mode>): Ditto.
	(@pred_trunc<mode>): Ditto.
	(@pred_rod_trunc<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/ternop_vv_constraint-3.c: New test.
	* gcc.target/riscv/rvv/base/ternop_vv_constraint-4.c: New test.
	* gcc.target/riscv/rvv/base/ternop_vv_constraint-5.c: New test.
	* gcc.target/riscv/rvv/base/ternop_vv_constraint-6.c: New test.
	* gcc.target/riscv/rvv/base/ternop_vx_constraint-8.c: New test.
	* gcc.target/riscv/rvv/base/ternop_vx_constraint-9.c: New test.
2023-02-22 20:29:16 +08:00
Kito Cheng
c57fbdd6f1 RISC-V: Make the test condition more strict for gcc.target/riscv/_Float16-zhinxmin-1.c
LTO might generate random string for the section name, which might contain `mv`,
then might cause random false alarm.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/_Float16-zhinxmin-1.c: Tweak test
	condition.
2023-02-22 20:20:34 +08:00
Kito Cheng
a0abd652e3 RISC-V: Adjust vsetvl testcase.
- Fitler out 'Oz' for vsetvl testcases.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/vsetvl/avl_multiple-1.c: Filter out '-Oz'.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-10.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-11.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-12.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-13.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-14.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-15.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-16.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-2.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-3.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-4.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-7.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-8.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-9.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-1.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-10.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-11.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-13.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-14.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-16.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-2.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-23.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-27.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-3.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-30.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-38.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-4.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-41.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-42.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-43.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-44.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-45.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-48.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-5.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-50.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-51.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-6.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-65.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-66.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-67.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-68.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-69.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-70.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-71.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-73.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-74.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-75.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/avl_single-8.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-2.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-3.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-4.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/imm_conflict-4.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/imm_conflict-5.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-12.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-13.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-14.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-15.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-16.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/imm_switch-5.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/imm_switch-6.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/imm_switch-7.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/imm_switch-8.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/imm_switch-9.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-1.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-10.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-11.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-12.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-13.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-14.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-15.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-16.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-17.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-18.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-19.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-2.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-20.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-21.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-22.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-23.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-24.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-25.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-26.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-27.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-28.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-29.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-3.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-32.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-33.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-34.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-35.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-36.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-37.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-38.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-39.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-4.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-40.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-41.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-42.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-43.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-44.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-45.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-46.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-6.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-7.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-8.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-9.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-1.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-10.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-11.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-12.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-13.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-14.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-15.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-16.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-2.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-21.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-22.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-23.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-24.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-25.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-26.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-27.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-28.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-3.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-4.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-5.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-6.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-7.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-8.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-9.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_call-1.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_call-2.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_call-3.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_call-4.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_complex_loop-1.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_complex_loop-2.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-1.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-10.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-11.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-12.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-2.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-3.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-4.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-5.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-6.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-7.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-8.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-9.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-1.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-10.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-11.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-12.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-13.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-14.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-15.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-16.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-17.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-18.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-19.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-2.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-20.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-21.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-22.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-23.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-24.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-25.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-26.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-27.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-28.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-3.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-4.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-5.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-6.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-7.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-8.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-9.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-1.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-10.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-11.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-12.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-13.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-14.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-15.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-16.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-17.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-18.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-19.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-2.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-20.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-21.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-22.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-23.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-24.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-25.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-26.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-27.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-28.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-3.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-4.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-5.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-6.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-7.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-8.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-9.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-19.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-1.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-2.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-3.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-4.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-5.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-6.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-7.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-8.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-1.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-11.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-12.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-13.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-14.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-15.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-16.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-2.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-3.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-4.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-5.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-6.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-7.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-8.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-9.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-16.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-2.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-3.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-4.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-5.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-6.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-7.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-8.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-1.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-14.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-18.c: Ditto.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-17.c: Filter
	out -Oz and -Og -g.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-18.c: Ditto.
2023-02-22 20:20:33 +08:00
Jakub Jelinek
fb53659073 cgraph: Handle BUILT_IN_UNREACHABLE_TRAP like BUILT_IN_UNREACHABLE in more spots [PR106258]
The following testcase ICEs because we still have some spots that
treat BUILT_IN_UNREACHABLE specially but not BUILT_IN_UNREACHABLE_TRAP
the same.

2023-02-22  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/106258
	* cgraph.cc (cgraph_edge::redirect_call_stmt_to_callee,
	cgraph_update_edges_for_call_stmt_node, cgraph_node::verify_node):
	Handle BUILT_IN_UNREACHABLE_TRAP like BUILT_IN_UNREACHABLE.
	* cgraphclones.cc (cgraph_node::create_clone): Likewise.

	* g++.dg/ipa/pr106258.C: New test.
2023-02-22 11:22:03 +01:00
Thomas Schwinge
334f23d832 Rust: Move void_list_node init to common code
Apply commit r13-2682-g8ff2a92a0450243e52d3299a13b30f208bafa7e0
"Move void_list_node init to common code" to the Rust front end, too.

	gcc/rust/
	* rust-lang.cc (grs_langhook_init): Do not initialize
	void_list_node.
2023-02-22 10:16:31 +01:00
Thomas Schwinge
320dc51c2d Add '-Wno-complain-wrong-lang', and use it in 'gcc/testsuite/lib/target-supports.exp:check_compile' and elsewhere
I noticed that GCC/Rust recently lost all LTO variants in torture testing:

     PASS: rust/compile/torture/all_doc_comment_line_blocks.rs   -O0  (test for excess errors)
     PASS: rust/compile/torture/all_doc_comment_line_blocks.rs   -O1  (test for excess errors)
     PASS: rust/compile/torture/all_doc_comment_line_blocks.rs   -O2  (test for excess errors)
    -PASS: rust/compile/torture/all_doc_comment_line_blocks.rs   -O2 -flto -fno-use-linker-plugin -flto-partition=none  (test for excess errors)
    -PASS: rust/compile/torture/all_doc_comment_line_blocks.rs   -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects  (test for excess errors)
     PASS: rust/compile/torture/all_doc_comment_line_blocks.rs   -O3 -g  (test for excess errors)
     PASS: rust/compile/torture/all_doc_comment_line_blocks.rs   -Os  (test for excess errors)

Etc.

The reason is that when probing for availability of LTO, we run into:

    spawn [...]/build-gcc/gcc/testsuite/rust/../../gccrs -B[...]/build-gcc/gcc/testsuite/rust/../../ -fdiagnostics-plain-output -frust-incomplete-and-experimental-compiler-do-not-use -flto -c -o lto8274.o lto8274.c
    cc1: warning: command-line option '-frust-incomplete-and-experimental-compiler-do-not-use' is valid for Rust but not for C

For GCC/Rust testing, this flag is (as of recently) defaulted in
'gcc/testsuite/lib/rust.exp:rust_init':

    lappend ALWAYS_RUSTFLAGS "additional_flags=-frust-incomplete-and-experimental-compiler-do-not-use"

A few more "command-line option [...] is valid for [...] but not for [...]"
instances were found in the test suite logs, when more than one language is
involved.

With '-Wno-complain-wrong-lang' used in
'gcc/testsuite/lib/target-supports.exp:check_compile', we get back:

     PASS: rust/compile/torture/all_doc_comment_line_blocks.rs   -O0  (test for excess errors)
     PASS: rust/compile/torture/all_doc_comment_line_blocks.rs   -O1  (test for excess errors)
     PASS: rust/compile/torture/all_doc_comment_line_blocks.rs   -O2  (test for excess errors)
    +PASS: rust/compile/torture/all_doc_comment_line_blocks.rs   -O2 -flto -fno-use-linker-plugin -flto-partition=none  (test for excess errors)
    +PASS: rust/compile/torture/all_doc_comment_line_blocks.rs   -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects  (test for excess errors)
     PASS: rust/compile/torture/all_doc_comment_line_blocks.rs   -O3 -g  (test for excess errors)
     PASS: rust/compile/torture/all_doc_comment_line_blocks.rs   -Os  (test for excess errors)

Etc., and in total:

                    === rust Summary for unix ===

    # of expected passes            [-4990-]{+6718+}
    # of expected failures          [-39-]{+51+}

Anything that 'gcc/opts-global.cc:complain_wrong_lang' might do is cut
short by '-Wno-complain-wrong-lang', not just the one 'warning'
diagnostic.  This corresponds to what already exists via
'lang_hooks.complain_wrong_lang_p'.

The 'gcc/opts-common.cc:prune_options' changes follow the same rationale
as PR67640 "driver passes -fdiagnostics-color= always last": we need to
process '-Wno-complain-wrong-lang' early, so that it properly affects
other options appearing before it on the command line.

	gcc/
	* common.opt (-Wcomplain-wrong-lang): New.
	* doc/invoke.texi (-Wno-complain-wrong-lang): Document it.
	* opts-common.cc (prune_options): Handle it.
	* opts-global.cc (complain_wrong_lang): Use it.
	gcc/testsuite/
	* gcc.dg/Wcomplain-wrong-lang-1.c: New.
	* gcc.dg/Wcomplain-wrong-lang-2.c: Likewise.
	* gcc.dg/Wcomplain-wrong-lang-3.c: Likewise.
	* gcc.dg/Wcomplain-wrong-lang-4.c: Likewise.
	* gcc.dg/Wcomplain-wrong-lang-5.c: Likewise.
	* lib/target-supports.exp (check_compile): Use
	'-Wno-complain-wrong-lang'.
	* g++.dg/abi/empty12.C: Likewise.
	* g++.dg/abi/empty13.C: Likewise.
	* g++.dg/abi/empty14.C: Likewise.
	* g++.dg/abi/empty15.C: Likewise.
	* g++.dg/abi/empty16.C: Likewise.
	* g++.dg/abi/empty17.C: Likewise.
	* g++.dg/abi/empty18.C: Likewise.
	* g++.dg/abi/empty19.C: Likewise.
	* g++.dg/abi/empty22.C: Likewise.
	* g++.dg/abi/empty25.C: Likewise.
	* g++.dg/abi/empty26.C: Likewise.
	* gfortran.dg/bind-c-contiguous-1.f90: Likewise.
	* gfortran.dg/bind-c-contiguous-4.f90: Likewise.
	* gfortran.dg/bind-c-contiguous-5.f90: Likewise.
	libgomp/
	* testsuite/libgomp.fortran/alloc-10.f90: Use
	'-Wno-complain-wrong-lang'.
	* testsuite/libgomp.fortran/alloc-11.f90: Likewise.
	* testsuite/libgomp.fortran/alloc-7.f90: Likewise.
	* testsuite/libgomp.fortran/alloc-9.f90: Likewise.
	* testsuite/libgomp.fortran/allocate-1.f90: Likewise.
	* testsuite/libgomp.fortran/depend-4.f90: Likewise.
	* testsuite/libgomp.fortran/depend-5.f90: Likewise.
	* testsuite/libgomp.fortran/depend-6.f90: Likewise.
	* testsuite/libgomp.fortran/depend-7.f90: Likewise.
	* testsuite/libgomp.fortran/depend-inoutset-1.f90: Likewise.
	* testsuite/libgomp.fortran/examples-4/declare_target-1.f90:
	Likewise.
	* testsuite/libgomp.fortran/examples-4/declare_target-2.f90:
	Likewise.
	* testsuite/libgomp.fortran/order-reproducible-1.f90: Likewise.
	* testsuite/libgomp.fortran/order-reproducible-2.f90: Likewise.
	* testsuite/libgomp.oacc-fortran/parallel-dims.f90: Likewise.
	* testsuite/libgomp.fortran/task-detach-6.f90: Remove left-over
	'dg-prune-output'.
2023-02-22 09:19:51 +01:00
Thomas Schwinge
7411eca498 Rust: Don't depend on unused 'target-libffi', 'target-libbacktrace'
For example:

    configure: error: "libffi has not been ported to nvptx-unknown-none."

Follow-up to commit a75f038c06
"gccrs: Add config-lang.in", which said:

> This was a copy/paste from gccgo front-end. We do not use any of the
> target_libs yet, [...]

	gcc/rust/
	* config-lang.in (target_libs): Remove.
2023-02-22 09:18:51 +01:00
Thomas Schwinge
10f085135b In 'contrib/config-list.mk', clarify i686-symbolics-gnu to i686-gnu
Already in the first revision of 'contrib/config-list.mk', i686-symbolics-gnu
has been present, but it's not clear to me whether that was meant to be
Symbolics as in the manufacturer, <https://en.wikipedia.org/wiki/Symbolics>,
with GNU (that is, GNU/Hurd) kernel/operating system (user land), or Symbolics
kernel with GNU operating system (user land)?

I can't find any mention of "Symbolics" in the history of 'config.sub'
upstream.

Either way, GCC configures i686-symbolics-gnu exactly the same as i686-gnu:

    $ sed -n -e '/Using .* host machine hooks\.$/q' -e '/^Using the following target machine macro files:$/,$p' log/i686-gnu-make.out
    Using the following target machine macro files:
            [...]/gcc/config/vxworks-dummy.h
            [...]/gcc/config/i386/i386.h
            [...]/gcc/config/i386/unix.h
            [...]/gcc/config/i386/att.h
            [...]/gcc/config/elfos.h
            [...]/gcc/config/gnu-user.h
            [...]/gcc/config/glibc-stdint.h
            [...]/gcc/config/i386/gnu-user-common.h
            [...]/gcc/config/i386/gnu-user.h
            [...]/gcc/config/gnu.h
            [...]/gcc/config/i386/gnu.h
            [...]/gcc/config/initfini-array.h

..., so let's clarify i686-symbolics-gnu to i686-gnu.

	contrib/
	* config-list.mk (LIST): Clarify i686-symbolics-gnu to i686-gnu.
2023-02-22 09:07:15 +01:00
GCC Administrator
c3bf22d918 Daily bump. 2023-02-22 00:18:49 +00:00
David Malcolm
8f63691579 analyzer: stop exploring the path after certain diagnostics [PR108830]
PR analyzer/108830 reports a situation in which there are lots of
followup -Wanalyzer-null-dereference warnings after the first access of
a NULL pointer, leading to very noisy output from -fanalyzer.

The analyzer's logic for stopping emitting multiple warnings from a
state machine doesn't quite work for NULL pointers: it attempts to
transition the malloc state machine's NULL pointer to the "stop" state,
which doesn't seem to make much sense in retrospect, and seems to get
confused over types.

Similarly, poisoned_value_diagnostic can be very noisy for uninit
variables, emitting a warning for every access to an uninitialized
variable.  In theory, region_model::check_for_poison makes some attempts
to suppress followups, but only for the symbolic value itself; if the
user's code keeps accessing the same region, we would get a warning on
each one.  For example, this showed up in Doom's s_sound.c where there
were 7 followup uninit warnings after the first uninit warning in
"S_ChangeMusic".

This patch adds an extra mechanism, giving pending diagnostics the
option of stopping the analysis of an execution path if they're saved
for emission on it, and turning this on for these warnings:
  -Wanalyzer-null-dereference
  -Wanalyzer-null-argument
  -Wanalyzer-use-after-free
  -Wanalyzer-use-of-pointer-in-stale-stack-frame
  -Wanalyzer-use-of-uninitialized-value

Doing so should hopefully reduce the cascades of diagnostics that
-fanalyzer can sometimes emit.

I added a -fno-analyzer-suppress-followups for the cases where you
really want the followup warnings (e.g. in some DejaGnu tests, and
for microbenchmarks of UB detection, such as PR analyzer/104224).

Integration testing shows this patch reduces the number of probable
false positives reported by 94, and finds one more true positive:

Comparison: 9.34% -> 10.91%
  GOOD:  66 ->  67  (+1)
   BAD: 641 -> 547 (-94)

where the affected warnings/projects are:

  -Wanalyzer-null-dereference: 0.00% GOOD: 0 BAD: 269 -> 239 (-30)
     Unclassified: 257 -> 228 (-29)
                  apr-1.7.0:  12 ->   5  (-7)
                       doom:   1 ->   0  (-1)
              haproxy-2.7.1:  47 ->  41  (-6)
       ImageMagick-7.1.0-57:  13 ->   9  (-4)
                 qemu-7.2.0: 165 -> 154 (-11)

      Known false: 7 -> 6 (-1)
                   xz-5.4.0:   4 ->   3  (-1)

  -Wanalyzer-use-of-uninitialized-value: 0.00% GOOD: 0 BAD: 143 -> 80 (-63)
      Known false: 47 -> 16 (-31)
                       doom: 42 -> 11 (-31)

     Unclassified: 96 -> 64 (-32)
              coreutils-9.1: 14 -> 10  (-4)
              haproxy-2.7.1: 29 -> 23  (-6)
                 qemu-7.2.0: 48 -> 26 (-22)

  -Wanalyzer-null-argument: 0.00% -> 2.33% GOOD: 0 -> 1 (+1) BAD: 43 -> 42 (-1)
     Unclassified: 39 -> 38 (-1)
      due to coreutils-9.1: 9 -> 8 (-1)

    True positive: 0 -> 1 (+1)
      (in haproxy-2.7.1)

gcc/analyzer/ChangeLog:
	PR analyzer/108830
	* analyzer.opt (fanalyzer-suppress-followups): New option.
	* engine.cc (impl_region_model_context::warn): Terminate the path
	if the diagnostic's terminate_path_p vfunc returns true and
	-fanalyzer-suppress-followups is true (the default).
	(impl_sm_context::warn): Likewise, for both overloads.
	* pending-diagnostic.h (pending_diagnostic::terminate_path_p): New
	vfunc.
	* program-state.cc (program_state::on_edge): Terminate the path if
	the ctxt requests it during updating the edge.
	* region-model.cc (poisoned_value_diagnostic::terminate_path_p):
	New vfunc.
	* sm-malloc.cc (null_deref::terminate_path_p): New vfunc.
	(null_arg::terminate_path_p): New vfunc.

gcc/ChangeLog:
	PR analyzer/108830
	* doc/invoke.texi: Document -fno-analyzer-suppress-followups.

gcc/testsuite/ChangeLog:
	PR analyzer/108830
	* gcc.dg/analyzer/attribute-nonnull.c: Update for
	-Wanalyzer-use-of-uninitialized-value terminating analysis along
	a path.
	* gcc.dg/analyzer/call-summaries-2.c: Likewise.
	* gcc.dg/analyzer/data-model-1.c: Likewise.
	* gcc.dg/analyzer/data-model-5.c: Likewise.
	* gcc.dg/analyzer/doom-s_sound-pr108867.c: New test.
	* gcc.dg/analyzer/memset-CVE-2017-18549-1.c: Add
	-fno-analyzer-suppress-followups.
	* gcc.dg/analyzer/null-deref-pr108830.c: New test.
	* gcc.dg/analyzer/pipe-1.c: Add -fno-analyzer-suppress-followups.
	* gcc.dg/analyzer/pipe-void-return.c: Likewise.
	* gcc.dg/analyzer/pipe2-1.c: Likewise.
	* gcc.dg/analyzer/pr101547.c: Update for
	-Wanalyzer-use-of-uninitialized-value terminating analysis along
	a path.
	* gcc.dg/analyzer/pr101875.c: Likewise.
	* gcc.dg/analyzer/pr104224-split.c: New test, based on...
	* gcc.dg/analyzer/pr104224.c: Add
	-fno-analyzer-suppress-followups.
	* gcc.dg/analyzer/realloc-2.c: Add
	-fno-analyzer-suppress-followups.
	* gcc.dg/analyzer/realloc-3.c: Likewise.
	* gcc.dg/analyzer/realloc-5.c: Likewise.
	* gcc.dg/analyzer/stdarg-1-ms_abi.c: Likewise.
	* gcc.dg/analyzer/stdarg-1-sysv_abi.c: Likewise.
	* gcc.dg/analyzer/stdarg-1.c: Likewise.
	* gcc.dg/analyzer/symbolic-1.c: Likewise.
	* gcc.dg/analyzer/symbolic-7.c: Update for
	-Wanalyzer-use-of-uninitialized-value terminating analysis along a
	path.
	* gcc.dg/analyzer/uninit-4.c: Likewise.
	* gcc.dg/analyzer/uninit-8.c: New test.
	* gcc.dg/analyzer/uninit-pr94713.c: Update for
	-Wanalyzer-use-of-uninitialized-value terminating analysis along a
	path.
	* gcc.dg/analyzer/zlib-6a.c: Add -fno-analyzer-suppress-followups.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2023-02-21 16:58:36 -05:00
Max Filippov
b2ef02e8cb gcc: xtensa: fix PR target/108876
gcc/
	PR target/108876
	* config/xtensa/xtensa.cc (xtensa_expand_epilogue): Drop emit_use
	for A0_REG.
	* config/xtensa/xtensa.md (sibcall, sibcall_internal)
	(sibcall_value, sibcall_value_internal): Add 'use' expression
	for A0_REG.
2023-02-21 13:53:01 -08:00
Harald Anlauf
6c1b825b3d Fortran: improve checking of character length specification [PR96025]
gcc/fortran/ChangeLog:

	PR fortran/96025
	* parse.cc (check_function_result_typed): Improve type check of
	specification expression for character length and return status.
	(parse_spec): Use status from above.
	* resolve.cc (resolve_fntype): Prevent use of invalid specification
	expression for character length.

gcc/testsuite/ChangeLog:

	PR fortran/96025
	* gfortran.dg/pr96025.f90: New test.
2023-02-21 18:38:56 +01:00
Iain Buclaw
f77948c567 libphobos: Merge upstream phobos e5a521ab2.
Phobos changes:

    - Unicode tables have been updated to version 15.

libphobos/ChangeLog:

	* src/MERGE: Merge upstream phobos e5a521ab2.
2023-02-21 15:33:38 +01:00
Iain Buclaw
f99303eb4a d: Merge upstream dmd, druntime 09faa4eacd, phobos 13ef27a56.
D front-end changes:

	- Import dmd v2.102.0-beta.1
	- `static assert' now supports multiple message arguments.

D runtime changes:

	- Import druntime v2.102.0-beta.1
	- The default `Throwable.TraceInfo' generation now is `@nogc'.
	- `Object.factory' method has now been deprecated.

Phobos changes:

	- Import phobos v2.102.0-beta.1
	- Added float- and double-precision implementations for log
	  function families in std.math.
	- `std.typecons.Unique' now calls `destroy` on struct types

gcc/d/ChangeLog:

	* Make-lang.in (D_FRONTEND_OBJS): Add d/location.o.
	* d-lang.cc (d_init_options): Update for new front-end interface.
	(d_post_options): Call Loc::set after handling options.
	* dmd/MERGE: Merge upstream dmd 09faa4eacd.
	* dmd/VERSION: Bump version to v2.102.0-beta.1.

libphobos/ChangeLog:

	* libdruntime/MERGE: Merge upstream druntime 09faa4eacd.
	* src/MERGE: Merge upstream phobos 13ef27a56.
	* testsuite/libphobos.exceptions/refcounted.d: Add test for chained
	reference counted exceptions.
	* testsuite/libphobos.shared/finalize.d: Add dg-warning for deprecated
	factory interfaces.
	* testsuite/libphobos.gc/issue22843.d: New test.

gcc/testsuite/ChangeLog:

	* gdc.dg/simd2a.d: Update.
	* gdc.dg/simd2b.d: Update.
	* gdc.dg/simd2c.d: Update.
	* gdc.dg/simd2d.d: Update.
	* gdc.dg/simd2e.d: Update.
	* gdc.dg/simd2f.d: Update.
	* gdc.dg/simd2g.d: Update.
	* gdc.dg/simd2h.d: Update.
	* gdc.dg/simd2i.d: Update.
	* gdc.dg/simd2j.d: Update.
2023-02-21 15:33:38 +01:00
Iain Buclaw
7e9dd9de16 d: Only handle the left-to-right evaluation of a call expression during gimplify
Removes an unnecessary rewriting of the front-end AST during lowering.

gcc/d/ChangeLog:

	* d-codegen.cc (d_build_call): Remove front-end expansion of
	side-effects in a call expression.
	* d-gimplify.cc (d_gimplify_call_expr): Gimplify the callee before its
	arguments.
2023-02-21 15:12:19 +01:00
Iain Buclaw
8063de4a8c d: Set doing_semantic_analysis_p before calling functionSemantic3
As functions which have semantic analysis ran late may still require
the use of CTFE built-ins to be evaluated.

gcc/d/ChangeLog:

	* decl.cc (DeclVisitor::visit (FuncDeclaration *)): Set
	doing_semantic_analysis_p before calling functionSemantic3.

gcc/testsuite/ChangeLog:

	* gdc.dg/ctfeintrinsics.d: New test.
2023-02-21 15:12:19 +01:00
Iain Buclaw
dfd39ed30d libphobos: Add @nogc to gcc.backtrace and gcc.libbacktrace modules.
libphobos/ChangeLog:

	* libdruntime/gcc/backtrace.d (simpleErrorCallback): Add @nogc.
	(LibBacktrace.initLibBacktrace): Likewise.
	(LibBacktrace.this): Likewise.
	(UnwindBacktrace.this): Likewise.
	(getBacktrace): Likewise.
	(getBacktraceSymbols): Likewise.
	* libdruntime/gcc/libbacktrace.d.in (backtrace_create_state):
	Likewise.
	(backtrace_full): Likewise.
	(backtrace_simple): Likewise.
	(backtrace_print): Likewise.
	(backtrace_pcinfo): Likewise.
	(backtrace_syminfo): Likewise.
2023-02-21 15:12:19 +01:00
Richard Biener
1dd033b8bc tree-optimization/108691 - remove trigger-happy assert
The following gets rid of the idea that we should prevent setjmp
like calls from popping up in uncontrolled way in the IL for now.
The solution is probably to handle it similar as noreturn has
the ctrl-altering flag on stmts, but use another flag, for example
ctrl-receiving which would also make sure the stmt is first.

	PR tree-optimization/108691
	* tree-ssa-dce.cc (eliminate_unnecessary_stmts): Remove
	assert about calls_setjmp not becoming true when it was false.

	* gcc.dg/pr108691.c: New testcase.
2023-02-21 14:02:58 +01:00
Richard Biener
a7e706df22 tree-optimization/108793 - niter compute type mismatch
When computing the number of iterations until wrap types are mixed up,
eventually leading to checking ICEs with a pointer bitwise inversion.
The following uses niter_type for the calculation.

	PR tree-optimization/108793
	* tree-ssa-loop-niter.cc (number_of_iterations_until_wrap):
	Use convert operands to niter_type when computing num.

	* gcc.dg/torture/pr108793.c: New testcase.
2023-02-21 14:02:58 +01:00