]> gcc.gnu.org Git - gcc.git/log
gcc.git
8 months agoAdd more comments. Fix various formatting problems. Add extensions as safe to propa...
Jeff Law [Wed, 15 Nov 2023 18:58:09 +0000 (11:58 -0700)]
Add more comments.  Fix various formatting problems.  Add extensions as safe to propagate through.

8 months agoMore comments and formatting fixes. Refactor case where binary op implies 2nd operan...
Jeff Law [Wed, 15 Nov 2023 02:19:13 +0000 (19:19 -0700)]
More comments and formatting fixes.  Refactor case where binary op implies 2nd operand must be fully live

8 months agoAdded tests for core_bench_list, core_list_init, core_init_matrix, matrix_add_const
Jivan Hakobyan [Wed, 15 Nov 2023 13:16:45 +0000 (17:16 +0400)]
Added tests for core_bench_list, core_list_init, core_init_matrix, matrix_add_const

8 months agoStrip STRICT_LOW_PART and paradoxical subregs before the mode size test.
Jeff Law [Tue, 14 Nov 2023 21:29:33 +0000 (14:29 -0700)]
Strip STRICT_LOW_PART and paradoxical subregs before the mode size test.

8 months agoAdded pr111384.c and riscv/mem-extend.c tests
Jivan Hakobyan [Tue, 14 Nov 2023 15:31:39 +0000 (19:31 +0400)]
Added pr111384.c and riscv/mem-extend.c tests

8 months agoRefactor code to reset subreg_promoted_var_p. Remove partial dead code elimination.
Jeff Law [Tue, 14 Nov 2023 05:27:20 +0000 (22:27 -0700)]
Refactor code to reset subreg_promoted_var_p.  Remove partial dead code elimination.

8 months agoSlightly refine clearing of bits set by the current insn
Jeff Law [Tue, 14 Nov 2023 04:56:00 +0000 (21:56 -0700)]
Slightly refine clearing of bits set by the current insn

8 months agoRefine assert for WORDS_BIG_ENDIAN gone bad
Jeff Law [Tue, 14 Nov 2023 04:19:37 +0000 (21:19 -0700)]
Refine assert for WORDS_BIG_ENDIAN gone bad

8 months agoDon't fault for subreg with an inner mode larger than TImode
Jeff Law [Tue, 14 Nov 2023 04:12:51 +0000 (21:12 -0700)]
Don't fault for subreg with an inner mode larger than TImode

8 months agoHandle (zero_extract (subreg)) as a destination.
Jeff Law [Tue, 14 Nov 2023 03:53:45 +0000 (20:53 -0700)]
Handle (zero_extract (subreg)) as a destination.

8 months agoFix handling of paradoxical subreg destinations.
Jeff Law [Tue, 14 Nov 2023 03:34:36 +0000 (20:34 -0700)]
Fix handling of paradoxical subreg destinations.

8 months agoAdjust STRICT_LOW_PART handling. Improve some comments
Jeff Law [Tue, 14 Nov 2023 03:20:40 +0000 (20:20 -0700)]
Adjust STRICT_LOW_PART handling.  Improve some comments

8 months agoVarious cleanups, primarily on the set handling side
Jeff Law [Tue, 14 Nov 2023 00:30:19 +0000 (17:30 -0700)]
Various cleanups, primarily on the set handling side

8 months agoFactor out uses and optimization steps
Jeff Law [Mon, 13 Nov 2023 22:57:48 +0000 (15:57 -0700)]
Factor out uses and optimization steps

8 months agoVarious fixes
Jeff Law [Mon, 13 Nov 2023 18:17:41 +0000 (11:17 -0700)]
Various fixes

Factor out set handling from ext_dce_process_bb.
Fix handling of SUBREG sources to refine liveness only for lowparts

8 months agoFix safe_for_live_propagation argument from Jivan.t Remove rollback_call_set and...
Jeff Law [Fri, 10 Nov 2023 23:06:22 +0000 (16:06 -0700)]
Fix safe_for_live_propagation argument from Jivan.t  Remove rollback_call_set and related code.

8 months agoJoern's ext-dce work with many fixes from Jivan and myself
Jeff Law [Thu, 2 Nov 2023 00:13:03 +0000 (18:13 -0600)]
Joern's ext-dce work with many fixes from Jivan and myself

8 months agoRISC-V: Fix dynamic LMUL cost model ICE
Juzhe-Zhong [Thu, 9 Nov 2023 02:39:17 +0000 (10:39 +0800)]
RISC-V: Fix dynamic LMUL cost model ICE

When trying to use dynamic LMUL to compile benchmark.
Notice there is a bunch ICEs.

This patch fixes those ICEs and append tests.

gcc/ChangeLog:

* config/riscv/riscv-vector-costs.cc (costs::preferred_new_lmul_p): Fix ICE.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-1.c: New test.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-2.c: New test.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-3.c: New test.

8 months agolibstdc++: optimize bit iterators assuming normalization [PR110807]
Alexandre Oliva [Thu, 9 Nov 2023 03:01:37 +0000 (00:01 -0300)]
libstdc++: optimize bit iterators assuming normalization [PR110807]

The representation of bit iterators, using a pointer into an array of
words, and an unsigned bit offset into that word, makes for some
optimization challenges: because the compiler doesn't know that the
offset is always in a certain narrow range, beginning at zero and
ending before the word bitwidth, when a function loads an offset that
it hasn't normalized itself, it may fail to derive certain reasonable
conclusions, even to the point of retaining useless calls that elicit
incorrect warnings.

Case at hand: The 110807.cc testcase for bit vectors assigns a 1-bit
list to a global bit vector variable.  Based on the compile-time
constant length of the list, we decide in _M_insert_range whether to
use the existing storage or to allocate new storage for the vector.
After allocation, we decide in _M_copy_aligned how to copy any
preexisting portions of the vector to the newly-allocated storage.
When copying two or more words, we use __builtin_memmove.

However, because we compute the available room using bit offsets
without range information, even comparing them with constants, we fail
to infer ranges for the preexisting vector depending on word size, and
may thus retain the memmove call despite knowing we've only allocated
one word.

Other parts of the compiler then detect the mismatch between the
constant allocation size and the much larger range that could
theoretically be copied into the newly-allocated storage if we could
reach the call.

Ensuring the compiler is aware of the constraints on the offset range
enables it to do a much better job at optimizing.  Using attribute
assume (_M_offset <= ...) didn't work, because gimple lowered that to
something that vrp could only use to ensure 'this' was non-NULL.
Exposing _M_offset as an automatic variable/gimple register outside
the unevaluated assume operand enabled the optimizer to do its job.

Rather than placing such load-then-assume constructs all over, I
introduced an always-inline member function in bit iterators that does
the job of conveying to the compiler the information that the
assumption is supposed to hold, and various calls throughout functions
pertaining to bit iterators that might not otherwise know that the
offsets have to be in range, so that the compiler no longer needs to
make conservative assumptions that prevent optimizations.

With the explicit assumptions, the compiler can correlate the test for
available storage in the vector with the test for how much storage
might need to be copied, and determine that, if we're not asking for
enough room for two or more words, we can omit entirely the code to
copy two or more words, without any runtime overhead whatsoever: no
traces remain of the undefined behavior or of the tests that inform
the compiler about the assumptions that must hold.

for  libstdc++-v3/ChangeLog

PR libstdc++/110807
* include/bits/stl_bvector.h (_Bit_iterator_base): Add
_M_assume_normalized member function.  Call it in _M_bump_up,
_M_bump_down, _M_incr, operator==, operator<=>, operator<, and
operator-.
(_Bit_iterator): Also call it in operator*.
(_Bit_const_iterator): Likewise.

8 months agotestsuite: adjust gomp test for x86 -m32
Alexandre Oliva [Thu, 9 Nov 2023 03:01:35 +0000 (00:01 -0300)]
testsuite: adjust gomp test for x86 -m32

declare-target-3.C expects .quad for entries in offload_var_table, but
the entries are pointer-wide, so 32-bit targets use .long instead.
Accept both.

for  gcc/testsuite/ChangeLog

* g++.dg/gomp/declare-target-3.C: Adjust for 32-bit targets.

8 months agotestsuite: force PIC/PIE off for pr58245-1.C
Alexandre Oliva [Thu, 9 Nov 2023 03:01:32 +0000 (00:01 -0300)]
testsuite: force PIC/PIE off for pr58245-1.C

This test expects a single mention of stack_chk_fail, as part of a
call sequence, but when e.g. PIE is enabled by default, we output
.hidden stack_chk_fail_local, which makes for a count mismatch.

Disable PIC/PIE so as to not depend on the configurable default.

for  gcc/testsuite/ChangeLog

* g++.dg/pr58245-1.C: Disable PIC/PIE.

8 months agoskip debug stmts when assigning locus discriminators
Alexandre Oliva [Thu, 9 Nov 2023 03:01:30 +0000 (00:01 -0300)]
skip debug stmts when assigning locus discriminators

c-c++-common/goacc/kernels-loop-g.c has been failing (compare-debug)
on i686-linux-gnu since r13-3172, because the implementation enabled
debug stmts to cause discriminators to be assigned differently, and
the discriminators are printed in the .gkd dumps that -fcompare-debug
compares.

This patch prevents debug stmts from affecting the discriminators in
nondebug stmts, but enables debug stmts to get discriminators just as
nondebug stmts would if their line numbers match.

I suppose we could arrange for discriminators to be omitted from the
-fcompare-debug dumps, but keeping discriminators in sync is probably
good to avoid other potential sources of divergence between debug and
nondebug.

for  gcc/ChangeLog

* tree-cfg.cc (assign_discriminators): Handle debug stmts.

8 months agoRISC-V: Fix dynamic tests [NFC]
Juzhe-Zhong [Thu, 9 Nov 2023 01:55:37 +0000 (09:55 +0800)]
RISC-V: Fix dynamic tests [NFC]

This patch just adapt dynamic LMUL tests for following preparing patches.

Committed.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-mixed-1.c: Adapt test.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-1.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-2.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-3.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-4.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-5.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-6.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-7.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-1.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-2.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-3.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-4.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-5.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-6.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-7.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-1.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-2.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-3.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-4.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-5.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-6.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-7.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-8.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-9.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-1.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-10.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-2.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-3.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-4.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-5.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-6.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-7.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-8.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-9.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/no-dynamic-lmul-1.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/pr111848.c: Ditto.
* gcc.dg/vect/costmodel/riscv/rvv/rvv-costmodel-vect.exp: Run all tests.

8 months agoDaily bump.
GCC Administrator [Thu, 9 Nov 2023 00:17:25 +0000 (00:17 +0000)]
Daily bump.

8 months agoi386: Apply LRA reload workaround to insns with high registers [PR82524]
Uros Bizjak [Wed, 8 Nov 2023 20:46:26 +0000 (21:46 +0100)]
i386: Apply LRA reload workaround to insns with high registers [PR82524]

LRA is not able to reload zero_extracted in-out operand with matched input
operand in the same way as strict_low_part in-out operand.  The patch
applies the strict_low_part workaround, where we allow LRA to generate
an instruction with non-matched input operand, which is split post reload
to the instruction that inserts non-matched input operand to an in-out
operand and the instruction that uses matched operand, also to
zero_extracted in-out operand case.

The generated code from the pr82524.c testcase improves from:

movl    %esi, %ecx
movl    %edi, %eax
movsbl  %ch, %esi
addl    %esi, %edx
movb    %dl, %ah

to:
movl    %edi, %eax
movl    %esi, %ecx
movb    %ch, %ah
addb    %dl, %ah

The compiler is now also able to handle non-commutative operations:

movl    %edi, %eax
movl    %esi, %ecx
movb    %ch, %ah
subb    %dl, %ah

and unary operations:

movl    %edi, %eax
movl    %esi, %edx
movb    %dh, %ah
negb    %ah

The patch also robustifies split condition of the splitters to ensure that
only alternatives with unmatched operands are split.

PR target/82524

gcc/ChangeLog:

* config/i386/i386.md (*add<mode>_1_slp):
Split insn only for unmatched operand 0.
(*sub<mode>_1_slp): Ditto.
(*<any_logic:code><mode>_1_slp): Merge pattern from "*and<mode>_1_slp"
and "*<any_logic:code><mode>_1_slp" using any_logic code iterator.
Split insn only for unmatched operand 0.
(*neg<mode>1_slp): Split insn only for unmatched operand 0.
(*one_cmpl<mode>_1_slp): Ditto.
(*ashl<mode>3_1_slp): Ditto.
(*<any_shiftrt:insn><mode>_1_slp): Ditto.
(*<any_rotate:insn><mode>_1_slp): Ditto.
(*addqi_ext<mode>_1): Redefine as define_insn_and_split.  Add
alternative 1 and split insn after reload for unmatched operand 0.
(*<plusminus:insn>qi_ext<mode>_2): Merge pattern from
"*addqi_ext<mode>_2" and "*subqi_ext<mode>_2" using plusminus code
iterator. Redefine as define_insn_and_split.  Add alternative 1
and split insn after reload for unmatched operand 0.
(*subqi_ext<mode>_1): Redefine as define_insn_and_split.  Add
alternative 1 and split insn after reload for unmatched operand 0.
(*<any_logic:code>qi_ext<mode>_0): Merge pattern from
"*andqi_ext<mode>_0" and and "*<any_logic:code>qi_ext<mode>_0" using
any_logic code iterator.
(*<any_logic:code>qi_ext<mode>_1): Merge pattern from
"*andqi_ext<mode>_1" and "*<any_logic:code>qi_ext<mode>_1" using
any_logic code iterator. Redefine as define_insn_and_split.  Add
alternative 1 and split insn after reload for unmatched operand 0.
(*<any_logic:code>qi_ext<mode>_1_cc): Merge pattern from
"*andqi_ext<mode>_1_cc" and "*xorqi_ext<mode>_1_cc" using any_logic
code iterator. Redefine as define_insn_and_split.  Add alternative 1
and split insn after reload for unmatched operand 0.
(*<any_logic:code>qi_ext<mode>_2): Merge pattern from
"*andqi_ext<mode>_2" and "*<any_or:code>qi_ext<mode>_2" using
any_logic code iterator. Redefine as define_insn_and_split.  Add
alternative 1 and split insn after reload for unmatched operand 0.
(*<any_logic:code>qi_ext<mode>_3): Redefine as define_insn_and_split.
Add alternative 1 and split insn after reload for unmatched operand 0.
(*negqi_ext<mode>_1): Rename from "*negqi_ext<mode>_2".  Add
alternative 1 and split insn after reload for unmatched operand 0.
(*one_cmplqi_ext<mode>_1): Ditto.
(*ashlqi_ext<mode>_1): Ditto.
(*<any_shiftrt:insn>qi_ext<mode>_1): Ditto.

gcc/testsuite/ChangeLog:

* gcc.target/i386/pr78904-1.c (test_sub): New test.
* gcc.target/i386/pr78904-1a.c (test_sub): Ditto.
* gcc.target/i386/pr78904-1b.c (test_sub): Ditto.
* gcc.target/i386/pr78904-2.c (test_sub): Ditto.
* gcc.target/i386/pr78904-2a.c (test_sub): Ditto.
* gcc.target/i386/pr78904-2b.c (test_sub): Ditto.
* gcc.target/i386/pr78952-4.c (test_sub): Ditto.
* gcc.target/i386/pr82524.c: New test.
* gcc.target/i386/pr82524-1.c: New test.
* gcc.target/i386/pr82524-2.c: New test.
* gcc.target/i386/pr82524-3.c: New test.

8 months agoFix SLP of emulated gathers
Richard Biener [Wed, 8 Nov 2023 14:42:16 +0000 (15:42 +0100)]
Fix SLP of emulated gathers

The following fixes an error in the SLP of emulated gathers,
discovered by x86 specific tests when enabling single-lane SLP.

* tree-vect-stmts.cc (vectorizable_load): Adjust offset
vector gathering for SLP of emulated gathers.

8 months agoTLC to vect_check_store_rhs and vect_slp_child_index_for_operand
Richard Biener [Wed, 8 Nov 2023 14:25:51 +0000 (15:25 +0100)]
TLC to vect_check_store_rhs and vect_slp_child_index_for_operand

This prepares us for the SLP of scatters.  We have to tell
vect_slp_child_index_for_operand whether we are dealing with
a scatter/gather stmt so this adds an argument similar to
the one we have for vect_get_operand_map.  This also refactors
vect_check_store_rhs to get the actual rhs and the associated
SLP node instead of leaving that to the caller.

* tree-vectorizer.h (vect_slp_child_index_for_operand):
Add gatherscatter_p argument.
* tree-vect-slp.cc (vect_slp_child_index_for_operand): Likewise.
Pass it on.
* tree-vect-stmts.cc (vect_check_store_rhs): Turn the rhs
argument into an output, also output the SLP node associated
with it.
(vectorizable_simd_clone_call): Adjust.
(vectorizable_store): Likewise.
(vectorizable_load): Likewise.

8 months agoFix SLP of masked loads
Richard Biener [Wed, 8 Nov 2023 14:18:21 +0000 (15:18 +0100)]
Fix SLP of masked loads

The following adjusts things to use the correct mask operand for
the SLP of masked loads and gathers.  Test coverage is from
runtime fails of i386 specific AVX512 tests when enabling single-lane
SLP.

* tree-vect-stmts.cc (vectorizable_load): Use the correct
vectorized mask operand.

8 months agoRISC-V: Removed unnecessary sign-extend for vsetvl
Lehua Ding [Wed, 8 Nov 2023 13:17:48 +0000 (21:17 +0800)]
RISC-V: Removed unnecessary sign-extend for vsetvl

Hi,

This patch try to combine bellow two insns and then further remove
unnecessary sign_extend operations. This optimization is borrowed
from LLVM (https://godbolt.org/z/4f6v56xej):
  (set (reg:DI 134 [ _1 ])
       (unspec:DI [
               (const_int 19 [0x13])
               (const_int 8 [0x8])
               (const_int 5 [0x5])
               (const_int 2 [0x2]) repeated x2
           ] UNSPEC_VSETVL))
  (set (reg/v:DI 135 [ <retval> ])
          (sign_extend:DI (subreg:SI (reg:DI 134 [ _1 ]) 0)))

The reason we can remove signe_extend is because currently the vl value
returned by the vsetvl instruction ranges from 0 to 65536 (uint16_t), and
bits 17 to 63 (including 31) are always 0, so there is no change after
sign_extend. Note that for HI and QI modes we cannot do this.
Of course, if the range returned by vsetvl later expands to 32 bits,
then this combine pattern needs to be removed. But that could be
a long time from now.

gcc/ChangeLog:

* config/riscv/vector.md (*vsetvldi_no_side_effects_si_extend):
New combine pattern.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/vsetvl/vsetvl_int.c: New test.

8 months agoImprove C99 compatibility of gcc.dg/setjmp-7.c test
Florian Weimer [Wed, 8 Nov 2023 10:19:10 +0000 (11:19 +0100)]
Improve C99 compatibility of gcc.dg/setjmp-7.c test

gcc/testsuite/ChangeLog:

* gcc.dg/setjmp-7.c (_setjmp): Declare.

8 months agoLibF7: Tweak IEEE double multiplication.
Georg-Johann Lay [Wed, 8 Nov 2023 11:43:49 +0000 (12:43 +0100)]
LibF7: Tweak IEEE double multiplication.

libgcc/config/avr/libf7/
* libf7-asm.sx (mul_mant) [AVR_HAVE_MUL]: Tweak code.

8 months agoRISC-V: Fix VSETVL VL check condition bug
Juzhe-Zhong [Wed, 8 Nov 2023 11:33:06 +0000 (19:33 +0800)]
RISC-V: Fix VSETVL VL check condition bug

When fixing the induction variable vectorization bug, notice there is a ICE bug
in VSETVL PASS:

0x178015b rtl_check_failed_code1(rtx_def const*, rtx_code, char const*, int, char const*)
        ../../../../gcc/gcc/rtl.cc:770
0x1079cdd rhs_regno(rtx_def const*)
        ../../../../gcc/gcc/rtl.h:1934
0x1dab360 vsetvl_info::parse_insn(rtl_ssa::insn_info*)
        ../../../../gcc/gcc/config/riscv/riscv-vsetvl.cc:1070
0x1daa272 vsetvl_info::vsetvl_info(rtl_ssa::insn_info*)
        ../../../../gcc/gcc/config/riscv/riscv-vsetvl.cc:746
0x1da5d98 pre_vsetvl::fuse_local_vsetvl_info()
        ../../../../gcc/gcc/config/riscv/riscv-vsetvl.cc:2708
0x1da94d9 pass_vsetvl::lazy_vsetvl()
        ../../../../gcc/gcc/config/riscv/riscv-vsetvl.cc:3444
0x1da977c pass_vsetvl::execute(function*)
        ../../../../gcc/gcc/config/riscv/riscv-vsetvl.cc:3504

Committed as it is obvious.

gcc/ChangeLog:

* config/riscv/riscv-vsetvl.cc: Fix ICE.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/base/vl-use-ice.c: New test.

8 months agolibgfortran: Remove empty array descriptor first dimension overwrite [PR112371]
Mikael Morin [Tue, 7 Nov 2023 10:24:04 +0000 (11:24 +0100)]
libgfortran: Remove empty array descriptor first dimension overwrite [PR112371]

Remove the forced overwrite of the first dimension of the result array
descriptor to set it to zero extent, in the function templates for
transformational functions doing an array reduction along a dimension.  This
overwrite, which happened before early returning in case the result array
was empty, was wrong because an array may have a non-zero extent in the
first dimension and still be empty if it has a zero extent in a higher
dimension.  Overwriting the dimension was resulting in wrong array result
upper bound for the first dimension in that case.

The offending piece of code was present in several places, and this removes
them all.  More precisely, there is only one case to fix for logical
reduction functions, and there are three cases for other reduction
functions, corresponding to non-masked reduction, reduction with array mask,
and reduction with scalar mask.  The impacted m4 files are
ifunction_logical.m4 for logical reduction functions, ifunction.m4 for
regular functions and types, ifunction-s.m4 for character minloc and maxloc,
ifunction-s2.m4 for character minval and maxval, and ifindloc1.m4 for
findloc.

PR fortran/112371

libgfortran/ChangeLog:

* m4/ifunction.m4 (START_ARRAY_FUNCTION, START_MASKED_ARRAY_FUNCTION,
SCALAR_ARRAY_FUNCTION): Remove overwrite of the first dimension of the
array descriptor.
* m4/ifunction-s.m4 (START_ARRAY_FUNCTION, START_MASKED_ARRAY_FUNCTION,
SCALAR_ARRAY_FUNCTION): Ditto.
* m4/ifunction-s2.m4 (START_ARRAY_FUNCTION,
START_MASKED_ARRAY_FUNCTION, SCALAR_ARRAY_FUNCTION): Ditto.
* m4/ifunction_logical.m4 (START_ARRAY_FUNCTION): Ditto.
* m4/ifindloc1.m4: Ditto.
* generated/all_l1.c: Regenerate.
* generated/all_l16.c: Regenerate.
* generated/all_l2.c: Regenerate.
* generated/all_l4.c: Regenerate.
* generated/all_l8.c: Regenerate.
* generated/any_l1.c: Regenerate.
* generated/any_l16.c: Regenerate.
* generated/any_l2.c: Regenerate.
* generated/any_l4.c: Regenerate.
* generated/any_l8.c: Regenerate.
* generated/count_16_l.c: Regenerate.
* generated/count_1_l.c: Regenerate.
* generated/count_2_l.c: Regenerate.
* generated/count_4_l.c: Regenerate.
* generated/count_8_l.c: Regenerate.
* generated/findloc1_c10.c: Regenerate.
* generated/findloc1_c16.c: Regenerate.
* generated/findloc1_c17.c: Regenerate.
* generated/findloc1_c4.c: Regenerate.
* generated/findloc1_c8.c: Regenerate.
* generated/findloc1_i1.c: Regenerate.
* generated/findloc1_i16.c: Regenerate.
* generated/findloc1_i2.c: Regenerate.
* generated/findloc1_i4.c: Regenerate.
* generated/findloc1_i8.c: Regenerate.
* generated/findloc1_r10.c: Regenerate.
* generated/findloc1_r16.c: Regenerate.
* generated/findloc1_r17.c: Regenerate.
* generated/findloc1_r4.c: Regenerate.
* generated/findloc1_r8.c: Regenerate.
* generated/findloc1_s1.c: Regenerate.
* generated/findloc1_s4.c: Regenerate.
* generated/iall_i1.c: Regenerate.
* generated/iall_i16.c: Regenerate.
* generated/iall_i2.c: Regenerate.
* generated/iall_i4.c: Regenerate.
* generated/iall_i8.c: Regenerate.
* generated/iany_i1.c: Regenerate.
* generated/iany_i16.c: Regenerate.
* generated/iany_i2.c: Regenerate.
* generated/iany_i4.c: Regenerate.
* generated/iany_i8.c: Regenerate.
* generated/iparity_i1.c: Regenerate.
* generated/iparity_i16.c: Regenerate.
* generated/iparity_i2.c: Regenerate.
* generated/iparity_i4.c: Regenerate.
* generated/iparity_i8.c: Regenerate.
* generated/maxloc1_16_i1.c: Regenerate.
* generated/maxloc1_16_i16.c: Regenerate.
* generated/maxloc1_16_i2.c: Regenerate.
* generated/maxloc1_16_i4.c: Regenerate.
* generated/maxloc1_16_i8.c: Regenerate.
* generated/maxloc1_16_r10.c: Regenerate.
* generated/maxloc1_16_r16.c: Regenerate.
* generated/maxloc1_16_r17.c: Regenerate.
* generated/maxloc1_16_r4.c: Regenerate.
* generated/maxloc1_16_r8.c: Regenerate.
* generated/maxloc1_16_s1.c: Regenerate.
* generated/maxloc1_16_s4.c: Regenerate.
* generated/maxloc1_4_i1.c: Regenerate.
* generated/maxloc1_4_i16.c: Regenerate.
* generated/maxloc1_4_i2.c: Regenerate.
* generated/maxloc1_4_i4.c: Regenerate.
* generated/maxloc1_4_i8.c: Regenerate.
* generated/maxloc1_4_r10.c: Regenerate.
* generated/maxloc1_4_r16.c: Regenerate.
* generated/maxloc1_4_r17.c: Regenerate.
* generated/maxloc1_4_r4.c: Regenerate.
* generated/maxloc1_4_r8.c: Regenerate.
* generated/maxloc1_4_s1.c: Regenerate.
* generated/maxloc1_4_s4.c: Regenerate.
* generated/maxloc1_8_i1.c: Regenerate.
* generated/maxloc1_8_i16.c: Regenerate.
* generated/maxloc1_8_i2.c: Regenerate.
* generated/maxloc1_8_i4.c: Regenerate.
* generated/maxloc1_8_i8.c: Regenerate.
* generated/maxloc1_8_r10.c: Regenerate.
* generated/maxloc1_8_r16.c: Regenerate.
* generated/maxloc1_8_r17.c: Regenerate.
* generated/maxloc1_8_r4.c: Regenerate.
* generated/maxloc1_8_r8.c: Regenerate.
* generated/maxloc1_8_s1.c: Regenerate.
* generated/maxloc1_8_s4.c: Regenerate.
* generated/maxval1_s1.c: Regenerate.
* generated/maxval1_s4.c: Regenerate.
* generated/maxval_i1.c: Regenerate.
* generated/maxval_i16.c: Regenerate.
* generated/maxval_i2.c: Regenerate.
* generated/maxval_i4.c: Regenerate.
* generated/maxval_i8.c: Regenerate.
* generated/maxval_r10.c: Regenerate.
* generated/maxval_r16.c: Regenerate.
* generated/maxval_r17.c: Regenerate.
* generated/maxval_r4.c: Regenerate.
* generated/maxval_r8.c: Regenerate.
* generated/minloc1_16_i1.c: Regenerate.
* generated/minloc1_16_i16.c: Regenerate.
* generated/minloc1_16_i2.c: Regenerate.
* generated/minloc1_16_i4.c: Regenerate.
* generated/minloc1_16_i8.c: Regenerate.
* generated/minloc1_16_r10.c: Regenerate.
* generated/minloc1_16_r16.c: Regenerate.
* generated/minloc1_16_r17.c: Regenerate.
* generated/minloc1_16_r4.c: Regenerate.
* generated/minloc1_16_r8.c: Regenerate.
* generated/minloc1_16_s1.c: Regenerate.
* generated/minloc1_16_s4.c: Regenerate.
* generated/minloc1_4_i1.c: Regenerate.
* generated/minloc1_4_i16.c: Regenerate.
* generated/minloc1_4_i2.c: Regenerate.
* generated/minloc1_4_i4.c: Regenerate.
* generated/minloc1_4_i8.c: Regenerate.
* generated/minloc1_4_r10.c: Regenerate.
* generated/minloc1_4_r16.c: Regenerate.
* generated/minloc1_4_r17.c: Regenerate.
* generated/minloc1_4_r4.c: Regenerate.
* generated/minloc1_4_r8.c: Regenerate.
* generated/minloc1_4_s1.c: Regenerate.
* generated/minloc1_4_s4.c: Regenerate.
* generated/minloc1_8_i1.c: Regenerate.
* generated/minloc1_8_i16.c: Regenerate.
* generated/minloc1_8_i2.c: Regenerate.
* generated/minloc1_8_i4.c: Regenerate.
* generated/minloc1_8_i8.c: Regenerate.
* generated/minloc1_8_r10.c: Regenerate.
* generated/minloc1_8_r16.c: Regenerate.
* generated/minloc1_8_r17.c: Regenerate.
* generated/minloc1_8_r4.c: Regenerate.
* generated/minloc1_8_r8.c: Regenerate.
* generated/minloc1_8_s1.c: Regenerate.
* generated/minloc1_8_s4.c: Regenerate.
* generated/minval1_s1.c: Regenerate.
* generated/minval1_s4.c: Regenerate.
* generated/minval_i1.c: Regenerate.
* generated/minval_i16.c: Regenerate.
* generated/minval_i2.c: Regenerate.
* generated/minval_i4.c: Regenerate.
* generated/minval_i8.c: Regenerate.
* generated/minval_r10.c: Regenerate.
* generated/minval_r16.c: Regenerate.
* generated/minval_r17.c: Regenerate.
* generated/minval_r4.c: Regenerate.
* generated/minval_r8.c: Regenerate.
* generated/norm2_r10.c: Regenerate.
* generated/norm2_r16.c: Regenerate.
* generated/norm2_r17.c: Regenerate.
* generated/norm2_r4.c: Regenerate.
* generated/norm2_r8.c: Regenerate.
* generated/parity_l1.c: Regenerate.
* generated/parity_l16.c: Regenerate.
* generated/parity_l2.c: Regenerate.
* generated/parity_l4.c: Regenerate.
* generated/parity_l8.c: Regenerate.
* generated/product_c10.c: Regenerate.
* generated/product_c16.c: Regenerate.
* generated/product_c17.c: Regenerate.
* generated/product_c4.c: Regenerate.
* generated/product_c8.c: Regenerate.
* generated/product_i1.c: Regenerate.
* generated/product_i16.c: Regenerate.
* generated/product_i2.c: Regenerate.
* generated/product_i4.c: Regenerate.
* generated/product_i8.c: Regenerate.
* generated/product_r10.c: Regenerate.
* generated/product_r16.c: Regenerate.
* generated/product_r17.c: Regenerate.
* generated/product_r4.c: Regenerate.
* generated/product_r8.c: Regenerate.
* generated/sum_c10.c: Regenerate.
* generated/sum_c16.c: Regenerate.
* generated/sum_c17.c: Regenerate.
* generated/sum_c4.c: Regenerate.
* generated/sum_c8.c: Regenerate.
* generated/sum_i1.c: Regenerate.
* generated/sum_i16.c: Regenerate.
* generated/sum_i2.c: Regenerate.
* generated/sum_i4.c: Regenerate.
* generated/sum_i8.c: Regenerate.
* generated/sum_r10.c: Regenerate.
* generated/sum_r16.c: Regenerate.
* generated/sum_r17.c: Regenerate.
* generated/sum_r4.c: Regenerate.
* generated/sum_r8.c: Regenerate.

gcc/testsuite/ChangeLog:

* gfortran.dg/bound_11.f90: New test.

8 months agolibgfortran: Remove early return if extent is zero [PR112371]
Mikael Morin [Tue, 7 Nov 2023 10:24:03 +0000 (11:24 +0100)]
libgfortran: Remove early return if extent is zero [PR112371]

Remove the early return present in function templates for transformational
functions doing a (masked) reduction of an array along a dimension.
This early return, which triggered if the extent in the reduction dimension
was zero, was wrong because even if the reduction operation degenerates to
a constant value in that case, one has to loop anyway along the other
dimensions to initialize every element of the resulting array with that
constant value.  The case of negative extent (not sure whether it may happen
in practice) which was also early returning, is handled by clamping to zero.

The offending piece of code was present in several places, and this removes
them all.  Namely, the impacted m4 files are ifunction.m4 for regular
functions and types, ifunction-s.m4 for character minloc and maxloc, and
ifunction-s2.m4 for character minval and maxval.

PR fortran/112371

libgfortran/ChangeLog:

* m4/ifunction.m4 (START_MASKED_ARRAY_FUNCTION): Remove early return if
extent is zero or less, and clamp negative value to zero.
* m4/ifunction-s.m4 (START_MASKED_ARRAY_FUNCTION): Ditto.
* m4/ifunction-s2.m4 (START_MASKED_ARRAY_FUNCTION): Ditto.
* generated/iall_i1.c: Regenerate.
* generated/iall_i16.c: Regenerate.
* generated/iall_i2.c: Regenerate.
* generated/iall_i4.c: Regenerate.
* generated/iall_i8.c: Regenerate.
* generated/iany_i1.c: Regenerate.
* generated/iany_i16.c: Regenerate.
* generated/iany_i2.c: Regenerate.
* generated/iany_i4.c: Regenerate.
* generated/iany_i8.c: Regenerate.
* generated/iparity_i1.c: Regenerate.
* generated/iparity_i16.c: Regenerate.
* generated/iparity_i2.c: Regenerate.
* generated/iparity_i4.c: Regenerate.
* generated/iparity_i8.c: Regenerate.
* generated/maxloc1_16_i1.c: Regenerate.
* generated/maxloc1_16_i16.c: Regenerate.
* generated/maxloc1_16_i2.c: Regenerate.
* generated/maxloc1_16_i4.c: Regenerate.
* generated/maxloc1_16_i8.c: Regenerate.
* generated/maxloc1_16_r10.c: Regenerate.
* generated/maxloc1_16_r16.c: Regenerate.
* generated/maxloc1_16_r17.c: Regenerate.
* generated/maxloc1_16_r4.c: Regenerate.
* generated/maxloc1_16_r8.c: Regenerate.
* generated/maxloc1_16_s1.c: Regenerate.
* generated/maxloc1_16_s4.c: Regenerate.
* generated/maxloc1_4_i1.c: Regenerate.
* generated/maxloc1_4_i16.c: Regenerate.
* generated/maxloc1_4_i2.c: Regenerate.
* generated/maxloc1_4_i4.c: Regenerate.
* generated/maxloc1_4_i8.c: Regenerate.
* generated/maxloc1_4_r10.c: Regenerate.
* generated/maxloc1_4_r16.c: Regenerate.
* generated/maxloc1_4_r17.c: Regenerate.
* generated/maxloc1_4_r4.c: Regenerate.
* generated/maxloc1_4_r8.c: Regenerate.
* generated/maxloc1_4_s1.c: Regenerate.
* generated/maxloc1_4_s4.c: Regenerate.
* generated/maxloc1_8_i1.c: Regenerate.
* generated/maxloc1_8_i16.c: Regenerate.
* generated/maxloc1_8_i2.c: Regenerate.
* generated/maxloc1_8_i4.c: Regenerate.
* generated/maxloc1_8_i8.c: Regenerate.
* generated/maxloc1_8_r10.c: Regenerate.
* generated/maxloc1_8_r16.c: Regenerate.
* generated/maxloc1_8_r17.c: Regenerate.
* generated/maxloc1_8_r4.c: Regenerate.
* generated/maxloc1_8_r8.c: Regenerate.
* generated/maxloc1_8_s1.c: Regenerate.
* generated/maxloc1_8_s4.c: Regenerate.
* generated/maxval1_s1.c: Regenerate.
* generated/maxval1_s4.c: Regenerate.
* generated/maxval_i1.c: Regenerate.
* generated/maxval_i16.c: Regenerate.
* generated/maxval_i2.c: Regenerate.
* generated/maxval_i4.c: Regenerate.
* generated/maxval_i8.c: Regenerate.
* generated/maxval_r10.c: Regenerate.
* generated/maxval_r16.c: Regenerate.
* generated/maxval_r17.c: Regenerate.
* generated/maxval_r4.c: Regenerate.
* generated/maxval_r8.c: Regenerate.
* generated/minloc1_16_i1.c: Regenerate.
* generated/minloc1_16_i16.c: Regenerate.
* generated/minloc1_16_i2.c: Regenerate.
* generated/minloc1_16_i4.c: Regenerate.
* generated/minloc1_16_i8.c: Regenerate.
* generated/minloc1_16_r10.c: Regenerate.
* generated/minloc1_16_r16.c: Regenerate.
* generated/minloc1_16_r17.c: Regenerate.
* generated/minloc1_16_r4.c: Regenerate.
* generated/minloc1_16_r8.c: Regenerate.
* generated/minloc1_16_s1.c: Regenerate.
* generated/minloc1_16_s4.c: Regenerate.
* generated/minloc1_4_i1.c: Regenerate.
* generated/minloc1_4_i16.c: Regenerate.
* generated/minloc1_4_i2.c: Regenerate.
* generated/minloc1_4_i4.c: Regenerate.
* generated/minloc1_4_i8.c: Regenerate.
* generated/minloc1_4_r10.c: Regenerate.
* generated/minloc1_4_r16.c: Regenerate.
* generated/minloc1_4_r17.c: Regenerate.
* generated/minloc1_4_r4.c: Regenerate.
* generated/minloc1_4_r8.c: Regenerate.
* generated/minloc1_4_s1.c: Regenerate.
* generated/minloc1_4_s4.c: Regenerate.
* generated/minloc1_8_i1.c: Regenerate.
* generated/minloc1_8_i16.c: Regenerate.
* generated/minloc1_8_i2.c: Regenerate.
* generated/minloc1_8_i4.c: Regenerate.
* generated/minloc1_8_i8.c: Regenerate.
* generated/minloc1_8_r10.c: Regenerate.
* generated/minloc1_8_r16.c: Regenerate.
* generated/minloc1_8_r17.c: Regenerate.
* generated/minloc1_8_r4.c: Regenerate.
* generated/minloc1_8_r8.c: Regenerate.
* generated/minloc1_8_s1.c: Regenerate.
* generated/minloc1_8_s4.c: Regenerate.
* generated/minval1_s1.c: Regenerate.
* generated/minval1_s4.c: Regenerate.
* generated/minval_i1.c: Regenerate.
* generated/minval_i16.c: Regenerate.
* generated/minval_i2.c: Regenerate.
* generated/minval_i4.c: Regenerate.
* generated/minval_i8.c: Regenerate.
* generated/minval_r10.c: Regenerate.
* generated/minval_r16.c: Regenerate.
* generated/minval_r17.c: Regenerate.
* generated/minval_r4.c: Regenerate.
* generated/minval_r8.c: Regenerate.
* generated/product_c10.c: Regenerate.
* generated/product_c16.c: Regenerate.
* generated/product_c17.c: Regenerate.
* generated/product_c4.c: Regenerate.
* generated/product_c8.c: Regenerate.
* generated/product_i1.c: Regenerate.
* generated/product_i16.c: Regenerate.
* generated/product_i2.c: Regenerate.
* generated/product_i4.c: Regenerate.
* generated/product_i8.c: Regenerate.
* generated/product_r10.c: Regenerate.
* generated/product_r16.c: Regenerate.
* generated/product_r17.c: Regenerate.
* generated/product_r4.c: Regenerate.
* generated/product_r8.c: Regenerate.
* generated/sum_c10.c: Regenerate.
* generated/sum_c16.c: Regenerate.
* generated/sum_c17.c: Regenerate.
* generated/sum_c4.c: Regenerate.
* generated/sum_c8.c: Regenerate.
* generated/sum_i1.c: Regenerate.
* generated/sum_i16.c: Regenerate.
* generated/sum_i2.c: Regenerate.
* generated/sum_i4.c: Regenerate.
* generated/sum_i8.c: Regenerate.
* generated/sum_r10.c: Regenerate.
* generated/sum_r16.c: Regenerate.
* generated/sum_r17.c: Regenerate.
* generated/sum_r4.c: Regenerate.
* generated/sum_r8.c: Regenerate.

gcc/testsuite/ChangeLog:

* gfortran.dg/bound_10.f90: New test.

8 months agolibgfortran: Don't skip allocation if size is zero [PR112412]
Mikael Morin [Tue, 7 Nov 2023 10:24:02 +0000 (11:24 +0100)]
libgfortran: Don't skip allocation if size is zero [PR112412]

In the function template of transformational functions doing a reduction
of an array along one dimension, if the passed in result array was
unallocated and the calculated allocation size was zero (this is the case
of empty result arrays), an early return used to skip the allocation.  This
change moves the allocation before the early return, so that empty result
arrays are not seen as unallocated.  This is possible because zero size is
explicitly supported by the allocation function.

The offending code is present in several places, and this updates them all.
More precisely, there is one place in the template for logical reductions,
and there are two places in the templates corresponding to masked reductions
with respectively array mask and scalar mask.  Templates for unmasked
reductions, which already allocate before returning, are not affected, but
unmasked reductions are checked nevertheless in the testcase.  The affected
m4 files are ifunction.m4 for regular functions and types, ifunction-s.m4
for character minloc and maxloc, ifunction-s2.m4 for character minval and
maxval, and ifunction_logical for logical reductions.

PR fortran/112412

libgfortran/ChangeLog:

* m4/ifunction.m4 (START_MASKED_ARRAY_FUNCTION, SCALAR_ARRAY_FUNCTION):
Don't skip allocation if the allocation size is zero.
* m4/ifunction-s.m4 (START_MASKED_ARRAY_FUNCTION,
SCALAR_ARRAY_FUNCTION): Ditto.
* m4/ifunction-s2.m4 (START_MASKED_ARRAY_FUNCTION,
SCALAR_ARRAY_FUNCTION): Ditto.
* m4/ifunction_logical.m4 (START_ARRAY_FUNCTION): Ditto.
* generated/all_l1.c: Regenerate.
* generated/all_l16.c: Regenerate.
* generated/all_l2.c: Regenerate.
* generated/all_l4.c: Regenerate.
* generated/all_l8.c: Regenerate.
* generated/any_l1.c: Regenerate.
* generated/any_l16.c: Regenerate.
* generated/any_l2.c: Regenerate.
* generated/any_l4.c: Regenerate.
* generated/any_l8.c: Regenerate.
* generated/count_16_l.c: Regenerate.
* generated/count_1_l.c: Regenerate.
* generated/count_2_l.c: Regenerate.
* generated/count_4_l.c: Regenerate.
* generated/count_8_l.c: Regenerate.
* generated/iall_i1.c: Regenerate.
* generated/iall_i16.c: Regenerate.
* generated/iall_i2.c: Regenerate.
* generated/iall_i4.c: Regenerate.
* generated/iall_i8.c: Regenerate.
* generated/iany_i1.c: Regenerate.
* generated/iany_i16.c: Regenerate.
* generated/iany_i2.c: Regenerate.
* generated/iany_i4.c: Regenerate.
* generated/iany_i8.c: Regenerate.
* generated/iparity_i1.c: Regenerate.
* generated/iparity_i16.c: Regenerate.
* generated/iparity_i2.c: Regenerate.
* generated/iparity_i4.c: Regenerate.
* generated/iparity_i8.c: Regenerate.
* generated/maxloc1_16_i1.c: Regenerate.
* generated/maxloc1_16_i16.c: Regenerate.
* generated/maxloc1_16_i2.c: Regenerate.
* generated/maxloc1_16_i4.c: Regenerate.
* generated/maxloc1_16_i8.c: Regenerate.
* generated/maxloc1_16_r10.c: Regenerate.
* generated/maxloc1_16_r16.c: Regenerate.
* generated/maxloc1_16_r17.c: Regenerate.
* generated/maxloc1_16_r4.c: Regenerate.
* generated/maxloc1_16_r8.c: Regenerate.
* generated/maxloc1_16_s1.c: Regenerate.
* generated/maxloc1_16_s4.c: Regenerate.
* generated/maxloc1_4_i1.c: Regenerate.
* generated/maxloc1_4_i16.c: Regenerate.
* generated/maxloc1_4_i2.c: Regenerate.
* generated/maxloc1_4_i4.c: Regenerate.
* generated/maxloc1_4_i8.c: Regenerate.
* generated/maxloc1_4_r10.c: Regenerate.
* generated/maxloc1_4_r16.c: Regenerate.
* generated/maxloc1_4_r17.c: Regenerate.
* generated/maxloc1_4_r4.c: Regenerate.
* generated/maxloc1_4_r8.c: Regenerate.
* generated/maxloc1_4_s1.c: Regenerate.
* generated/maxloc1_4_s4.c: Regenerate.
* generated/maxloc1_8_i1.c: Regenerate.
* generated/maxloc1_8_i16.c: Regenerate.
* generated/maxloc1_8_i2.c: Regenerate.
* generated/maxloc1_8_i4.c: Regenerate.
* generated/maxloc1_8_i8.c: Regenerate.
* generated/maxloc1_8_r10.c: Regenerate.
* generated/maxloc1_8_r16.c: Regenerate.
* generated/maxloc1_8_r17.c: Regenerate.
* generated/maxloc1_8_r4.c: Regenerate.
* generated/maxloc1_8_r8.c: Regenerate.
* generated/maxloc1_8_s1.c: Regenerate.
* generated/maxloc1_8_s4.c: Regenerate.
* generated/maxval1_s1.c: Regenerate.
* generated/maxval1_s4.c: Regenerate.
* generated/maxval_i1.c: Regenerate.
* generated/maxval_i16.c: Regenerate.
* generated/maxval_i2.c: Regenerate.
* generated/maxval_i4.c: Regenerate.
* generated/maxval_i8.c: Regenerate.
* generated/maxval_r10.c: Regenerate.
* generated/maxval_r16.c: Regenerate.
* generated/maxval_r17.c: Regenerate.
* generated/maxval_r4.c: Regenerate.
* generated/maxval_r8.c: Regenerate.
* generated/minloc1_16_i1.c: Regenerate.
* generated/minloc1_16_i16.c: Regenerate.
* generated/minloc1_16_i2.c: Regenerate.
* generated/minloc1_16_i4.c: Regenerate.
* generated/minloc1_16_i8.c: Regenerate.
* generated/minloc1_16_r10.c: Regenerate.
* generated/minloc1_16_r16.c: Regenerate.
* generated/minloc1_16_r17.c: Regenerate.
* generated/minloc1_16_r4.c: Regenerate.
* generated/minloc1_16_r8.c: Regenerate.
* generated/minloc1_16_s1.c: Regenerate.
* generated/minloc1_16_s4.c: Regenerate.
* generated/minloc1_4_i1.c: Regenerate.
* generated/minloc1_4_i16.c: Regenerate.
* generated/minloc1_4_i2.c: Regenerate.
* generated/minloc1_4_i4.c: Regenerate.
* generated/minloc1_4_i8.c: Regenerate.
* generated/minloc1_4_r10.c: Regenerate.
* generated/minloc1_4_r16.c: Regenerate.
* generated/minloc1_4_r17.c: Regenerate.
* generated/minloc1_4_r4.c: Regenerate.
* generated/minloc1_4_r8.c: Regenerate.
* generated/minloc1_4_s1.c: Regenerate.
* generated/minloc1_4_s4.c: Regenerate.
* generated/minloc1_8_i1.c: Regenerate.
* generated/minloc1_8_i16.c: Regenerate.
* generated/minloc1_8_i2.c: Regenerate.
* generated/minloc1_8_i4.c: Regenerate.
* generated/minloc1_8_i8.c: Regenerate.
* generated/minloc1_8_r10.c: Regenerate.
* generated/minloc1_8_r16.c: Regenerate.
* generated/minloc1_8_r17.c: Regenerate.
* generated/minloc1_8_r4.c: Regenerate.
* generated/minloc1_8_r8.c: Regenerate.
* generated/minloc1_8_s1.c: Regenerate.
* generated/minloc1_8_s4.c: Regenerate.
* generated/minval1_s1.c: Regenerate.
* generated/minval1_s4.c: Regenerate.
* generated/minval_i1.c: Regenerate.
* generated/minval_i16.c: Regenerate.
* generated/minval_i2.c: Regenerate.
* generated/minval_i4.c: Regenerate.
* generated/minval_i8.c: Regenerate.
* generated/minval_r10.c: Regenerate.
* generated/minval_r16.c: Regenerate.
* generated/minval_r17.c: Regenerate.
* generated/minval_r4.c: Regenerate.
* generated/minval_r8.c: Regenerate.
* generated/product_c10.c: Regenerate.
* generated/product_c16.c: Regenerate.
* generated/product_c17.c: Regenerate.
* generated/product_c4.c: Regenerate.
* generated/product_c8.c: Regenerate.
* generated/product_i1.c: Regenerate.
* generated/product_i16.c: Regenerate.
* generated/product_i2.c: Regenerate.
* generated/product_i4.c: Regenerate.
* generated/product_i8.c: Regenerate.
* generated/product_r10.c: Regenerate.
* generated/product_r16.c: Regenerate.
* generated/product_r17.c: Regenerate.
* generated/product_r4.c: Regenerate.
* generated/product_r8.c: Regenerate.
* generated/sum_c10.c: Regenerate.
* generated/sum_c16.c: Regenerate.
* generated/sum_c17.c: Regenerate.
* generated/sum_c4.c: Regenerate.
* generated/sum_c8.c: Regenerate.
* generated/sum_i1.c: Regenerate.
* generated/sum_i16.c: Regenerate.
* generated/sum_i2.c: Regenerate.
* generated/sum_i4.c: Regenerate.
* generated/sum_i8.c: Regenerate.
* generated/sum_r10.c: Regenerate.
* generated/sum_r16.c: Regenerate.
* generated/sum_r17.c: Regenerate.
* generated/sum_r4.c: Regenerate.
* generated/sum_r8.c: Regenerate.

gcc/testsuite/ChangeLog:

* gfortran.dg/allocated_4.f90: New test.

8 months agoRISC-V: Eliminate unused parameter warning.
xuli [Wed, 8 Nov 2023 08:46:02 +0000 (08:46 +0000)]
RISC-V: Eliminate unused parameter warning.

The parameter orig_fndecl is not used, use anonymous parameters instead.

../.././gcc/gcc/config/riscv/riscv-c.cc: In function â€˜bool riscv_check_builtin_call(location_t, vec<unsigned int>, tree, tree, unsigned int, tree_node**)’:
../.././gcc/gcc/config/riscv/riscv-c.cc:207:11: warning: unused parameter â€˜orig_fndecl’ [-Wunused-parameter]
      tree orig_fndecl, unsigned int nargs, tree *args)
           ^~~~~~~~~~~

gcc/ChangeLog:

* config/riscv/riscv-c.cc (riscv_check_builtin_call): Eliminate warning.

8 months ago[i386] APX: Fix ICE due to movti postreload splitter [PR112394]
Hongyu Wang [Tue, 7 Nov 2023 02:02:53 +0000 (10:02 +0800)]
[i386] APX: Fix ICE due to movti postreload splitter [PR112394]

When APX EGPR enabled, the TImode move pattern *movti_internal allows
move between gpr and sse reg using constraint pair ("r","Yd"). Then a
post-reload splitter transform such move to vec_extractv2di, while under
-msse4.1 -mno-avx EGPR is not allowed for its enabled alternative, which
caused ICE that insn does not match the constraint. To prevent such ICE,
we need to adjust the constraint correspond to "Yd". Add a new
constraint "jc" to disable EGPR under -mno-avx.

gcc/ChangeLog:

PR target/112394
* config/i386/constraints.md (jc): New constraint that prohibits
EGPR on -mno-avx.
* config/i386/i386.md (*movdi_internal): Change r constraint
corresponds to Yd.
(*movti_internal): Likewise.

gcc/testsuite/ChangeLog:

PR target/112394
* gcc.target/i386/pr112394.c: New test.

8 months agotest: Fix bb-slp-33.c for RVV
Juzhe-Zhong [Tue, 7 Nov 2023 15:13:15 +0000 (23:13 +0800)]
test: Fix bb-slp-33.c for RVV

gcc/testsuite/ChangeLog:

* gcc.dg/vect/bb-slp-33.c: Rewrite the condition.

8 months agoc-family: Enable -fpermissive for C and ObjC
Florian Weimer [Wed, 8 Nov 2023 05:41:15 +0000 (06:41 +0100)]
c-family: Enable -fpermissive for C and ObjC

Future changes will treat some C front end warnings similar to
-Wnarrowing.

gcc/

* doc/invoke.texi (Warning Options): Mention C diagnostics
for -fpermissive.

gcc/c-family/

* c.opt (fpermissive): Enable for C and ObjC.
* c-opts.cc (c_common_post_options): Enable -fpermissive.

8 months agoRISC-V: Normalize user vsetvl intrinsics[PR112092]
Juzhe-Zhong [Wed, 8 Nov 2023 06:05:00 +0000 (14:05 +0800)]
RISC-V: Normalize user vsetvl intrinsics[PR112092]

Since our user vsetvl intrinsics are defined as just calculate the VL output
which is the number of the elements to be processed. Such intrinsics do not
have any side effects.  We should normalize them when they have same ratio.

E.g __riscv_vsetvl_e8mf8 result is same as __riscv_vsetvl_e64m1.

Normalize them can allow us have better codegen.
Consider this following example:

#include "riscv_vector.h"

void foo(int32_t *in1, int32_t *in2, int32_t *in3, int32_t *out, size_t n, int cond, int avl) {

  size_t vl;
  if (cond)
    vl = __riscv_vsetvl_e32m1(avl);
  else
    vl = __riscv_vsetvl_e16mf2(avl);
  for (size_t i = 0; i < n; i += 1) {
    vint32m1_t a = __riscv_vle32_v_i32m1(in1, vl);
    vint32m1_t b = __riscv_vle32_v_i32m1_tu(a, in2, vl);
    vint32m1_t c = __riscv_vle32_v_i32m1_tu(b, in3, vl);
    __riscv_vse32_v_i32m1(out, c, vl);
  }
}

Before this patch:

foo:
        beq     a5,zero,.L2
        vsetvli a6,a6,e32,m1,tu,ma
.L3:
        li      a5,0
        beq     a4,zero,.L9
.L4:
        vle32.v v1,0(a0)
        addi    a5,a5,1
        vle32.v v1,0(a1)
        vle32.v v1,0(a2)
        vse32.v v1,0(a3)
        bne     a4,a5,.L4
.L9:
        ret
.L2:
        vsetvli zero,a6,e32,m1,tu,ma
        j       .L3

After this patch:

foo:
li a5,0
vsetvli zero,a6,e32,m1,tu,ma
beq a4,zero,.L9
.L4:
vle32.v v1,0(a0)
addi a5,a5,1
vle32.v v1,0(a1)
vle32.v v1,0(a2)
vse32.v v1,0(a3)
bne a4,a5,.L4
.L9:
ret

PR target/112092

gcc/ChangeLog:

* config/riscv/riscv-vector-builtins-bases.cc: Normalize the vsetvls.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/vsetvl/pr109743-1.c: Adapt test.
* gcc.target/riscv/rvv/vsetvl/pr109743-3.c: Ditto.
* gcc.target/riscv/rvv/vsetvl/vsetvl-11.c: Ditto.
* gcc.target/riscv/rvv/vsetvl/vsetvl-15.c: Ditto.
* gcc.target/riscv/rvv/vsetvl/vsetvl-22.c: Ditto.
* gcc.target/riscv/rvv/vsetvl/vsetvlmax-13.c: Ditto.
* gcc.target/riscv/rvv/vsetvl/vsetvlmax-15.c: Ditto.
* gcc.target/riscv/rvv/vsetvl/vsetvlmax-5.c: Ditto.
* gcc.target/riscv/rvv/vsetvl/vsetvlmax-7.c: Ditto.
* gcc.target/riscv/rvv/vsetvl/vsetvlmax-8.c: Ditto.
* gcc.target/riscv/rvv/vsetvl/pr112092-1.c: New test.
* gcc.target/riscv/rvv/vsetvl/pr112092-2.c: New test.

8 months agoi386: Fix isa attribute for TI/TF andnot mode
Haochen Jiang [Mon, 6 Nov 2023 06:34:01 +0000 (14:34 +0800)]
i386: Fix isa attribute for TI/TF andnot mode

gcc/ChangeLog:

PR target/111907
* config/i386/i386.md (avx_noavx512vl): New definition for isa
attribute.
* config/i386/sse.md (*andnot<mode>3): Change isa attribute from
avx_noavx512f to avx_noavx512vl.

gcc/testsuite/ChangeLog:

PR target/111907
* gcc.target/i386/pr111907.c: New test.

8 months agotestsuite: Rename c2x-*, gnu2x-* tests to c23-*, gnu23-*
Joseph Myers [Wed, 8 Nov 2023 00:15:22 +0000 (00:15 +0000)]
testsuite: Rename c2x-*, gnu2x-* tests to c23-*, gnu23-*

Completing the move to refer to C23 in place of C2X, rename all tests
with "c2x" or "gnu2x" in their names to use "c23" or "gnu23" instead.
17 files in the testsuite that referred to such tests (or, in one
case, a generated .i file to be scanned) by those names are updated
for the renaming.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc/testsuite/
* gcc.dg/atomic/c2x-stdatomic-lockfree-char8_t.c: Move to ...
* gcc.dg/atomic/c23-stdatomic-lockfree-char8_t.c: ... here.
* gcc.dg/atomic/c2x-stdatomic-var-init-1.c: Move to ...
* gcc.dg/atomic/c23-stdatomic-var-init-1.c: ... here.
* gcc.dg/atomic/gnu2x-stdatomic-lockfree-char8_t.c: Move to ...
* gcc.dg/atomic/gnu23-stdatomic-lockfree-char8_t.c: ... here.
Update reference to moved file.
* gcc.dg/c2x-align-1.c: Move to ...
* gcc.dg/c23-align-1.c: ... here.
* gcc.dg/c2x-align-6.c: Move to ...
* gcc.dg/c23-align-6.c: ... here.
* gcc.dg/c2x-attr-deprecated-1.c: Move to ...
* gcc.dg/c23-attr-deprecated-1.c: ... here.  Update reference to
moved file.
* gcc.dg/c2x-attr-deprecated-2.c: Move to ...
* gcc.dg/c23-attr-deprecated-2.c: ... here.
* gcc.dg/c2x-attr-deprecated-3.c: Move to ...
* gcc.dg/c23-attr-deprecated-3.c: ... here.
* gcc.dg/c2x-attr-deprecated-4.c: Move to ...
* gcc.dg/c23-attr-deprecated-4.c: ... here.
* gcc.dg/c2x-attr-fallthrough-1.c: Move to ...
* gcc.dg/c23-attr-fallthrough-1.c: ... here.
* gcc.dg/c2x-attr-fallthrough-2.c: Move to ...
* gcc.dg/c23-attr-fallthrough-2.c: ... here.
* gcc.dg/c2x-attr-fallthrough-3.c: Move to ...
* gcc.dg/c23-attr-fallthrough-3.c: ... here.
* gcc.dg/c2x-attr-fallthrough-4.c: Move to ...
* gcc.dg/c23-attr-fallthrough-4.c: ... here.
* gcc.dg/c2x-attr-fallthrough-5.c: Move to ...
* gcc.dg/c23-attr-fallthrough-5.c: ... here.
* gcc.dg/c2x-attr-fallthrough-6.c: Move to ...
* gcc.dg/c23-attr-fallthrough-6.c: ... here.
* gcc.dg/c2x-attr-maybe_unused-1.c: Move to ...
* gcc.dg/c23-attr-maybe_unused-1.c: ... here.
* gcc.dg/c2x-attr-maybe_unused-2.c: Move to ...
* gcc.dg/c23-attr-maybe_unused-2.c: ... here.
* gcc.dg/c2x-attr-maybe_unused-3.c: Move to ...
* gcc.dg/c23-attr-maybe_unused-3.c: ... here.
* gcc.dg/c2x-attr-maybe_unused-4.c: Move to ...
* gcc.dg/c23-attr-maybe_unused-4.c: ... here.
* gcc.dg/c2x-attr-nodiscard-1.c: Move to ...
* gcc.dg/c23-attr-nodiscard-1.c: ... here.
* gcc.dg/c2x-attr-nodiscard-2.c: Move to ...
* gcc.dg/c23-attr-nodiscard-2.c: ... here.
* gcc.dg/c2x-attr-nodiscard-3.c: Move to ...
* gcc.dg/c23-attr-nodiscard-3.c: ... here.
* gcc.dg/c2x-attr-nodiscard-4.c: Move to ...
* gcc.dg/c23-attr-nodiscard-4.c: ... here.
* gcc.dg/c2x-attr-noreturn-1.c: Move to ...
* gcc.dg/c23-attr-noreturn-1.c: ... here.
* gcc.dg/c2x-attr-noreturn-2.c: Move to ...
* gcc.dg/c23-attr-noreturn-2.c: ... here.
* gcc.dg/c2x-attr-noreturn-3.c: Move to ...
* gcc.dg/c23-attr-noreturn-3.c: ... here.
* gcc.dg/c2x-attr-syntax-1.c: Move to ...
* gcc.dg/c23-attr-syntax-1.c: ... here.
* gcc.dg/c2x-attr-syntax-2.c: Move to ...
* gcc.dg/c23-attr-syntax-2.c: ... here.
* gcc.dg/c2x-attr-syntax-3.c: Move to ...
* gcc.dg/c23-attr-syntax-3.c: ... here.
* gcc.dg/c2x-attr-syntax-4.c: Move to ...
* gcc.dg/c23-attr-syntax-4.c: ... here.
* gcc.dg/c2x-attr-syntax-5.c: Move to ...
* gcc.dg/c23-attr-syntax-5.c: ... here.
* gcc.dg/c2x-attr-syntax-6.c: Move to ...
* gcc.dg/c23-attr-syntax-6.c: ... here.
* gcc.dg/c2x-attr-syntax-7.c: Move to ...
* gcc.dg/c23-attr-syntax-7.c: ... here.
* gcc.dg/c2x-auto-1.c: Move to ...
* gcc.dg/c23-auto-1.c: ... here.
* gcc.dg/c2x-auto-2.c: Move to ...
* gcc.dg/c23-auto-2.c: ... here.
* gcc.dg/c2x-auto-3.c: Move to ...
* gcc.dg/c23-auto-3.c: ... here.
* gcc.dg/c2x-auto-4.c: Move to ...
* gcc.dg/c23-auto-4.c: ... here.
* gcc.dg/c2x-binary-constants-1.c: Move to ...
* gcc.dg/c23-binary-constants-1.c: ... here.
* gcc.dg/c2x-binary-constants-2.c: Move to ...
* gcc.dg/c23-binary-constants-2.c: ... here.
* gcc.dg/c2x-binary-constants-3.c: Move to ...
* gcc.dg/c23-binary-constants-3.c: ... here.
* gcc.dg/c2x-bool-1.c: Move to ...
* gcc.dg/c23-bool-1.c: ... here.
* gcc.dg/c2x-bool-2.c: Move to ...
* gcc.dg/c23-bool-2.c: ... here.
* gcc.dg/c2x-bool-limits-1.c: Move to ...
* gcc.dg/c23-bool-limits-1.c: ... here.
* gcc.dg/c2x-builtins-1.c: Move to ...
* gcc.dg/c23-builtins-1.c: ... here.
* gcc.dg/c2x-complit-1.c: Move to ...
* gcc.dg/c23-complit-1.c: ... here.
* gcc.dg/c2x-complit-2.c: Move to ...
* gcc.dg/c23-complit-2.c: ... here.
* gcc.dg/c2x-complit-3.c: Move to ...
* gcc.dg/c23-complit-3.c: ... here.
* gcc.dg/c2x-complit-4.c: Move to ...
* gcc.dg/c23-complit-4.c: ... here.
* gcc.dg/c2x-complit-5.c: Move to ...
* gcc.dg/c23-complit-5.c: ... here.
* gcc.dg/c2x-complit-6.c: Move to ...
* gcc.dg/c23-complit-6.c: ... here.
* gcc.dg/c2x-complit-7.c: Move to ...
* gcc.dg/c23-complit-7.c: ... here.
* gcc.dg/c2x-complit-8.c: Move to ...
* gcc.dg/c23-complit-8.c: ... here.
* gcc.dg/c2x-concat-1.c: Move to ...
* gcc.dg/c23-concat-1.c: ... here.
* gcc.dg/c2x-constexpr-1.c: Move to ...
* gcc.dg/c23-constexpr-1.c: ... here.
* gcc.dg/c2x-constexpr-2a.c: Move to ...
* gcc.dg/c23-constexpr-2a.c: ... here.  Update reference to moved
file.
* gcc.dg/c2x-constexpr-2b.c: Move to ...
* gcc.dg/c23-constexpr-2b.c: ... here.
* gcc.dg/c2x-constexpr-3.c: Move to ...
* gcc.dg/c23-constexpr-3.c: ... here.
* gcc.dg/c2x-constexpr-4.c: Move to ...
* gcc.dg/c23-constexpr-4.c: ... here.
* gcc.dg/c2x-constexpr-5.c: Move to ...
* gcc.dg/c23-constexpr-5.c: ... here.
* gcc.dg/c2x-constexpr-6.c: Move to ...
* gcc.dg/c23-constexpr-6.c: ... here.
* gcc.dg/c2x-constexpr-7.c: Move to ...
* gcc.dg/c23-constexpr-7.c: ... here.
* gcc.dg/c2x-constexpr-8.c: Move to ...
* gcc.dg/c23-constexpr-8.c: ... here.
* gcc.dg/c2x-constexpr-9.c: Move to ...
* gcc.dg/c23-constexpr-9.c: ... here.
* gcc.dg/c2x-digit-separators-1.c: Move to ...
* gcc.dg/c23-digit-separators-1.c: ... here.
* gcc.dg/c2x-digit-separators-2.c: Move to ...
* gcc.dg/c23-digit-separators-2.c: ... here.
* gcc.dg/c2x-digit-separators-3.c: Move to ...
* gcc.dg/c23-digit-separators-3.c: ... here.
* gcc.dg/c2x-empty-init-1.c: Move to ...
* gcc.dg/c23-empty-init-1.c: ... here.
* gcc.dg/c2x-empty-init-2.c: Move to ...
* gcc.dg/c23-empty-init-2.c: ... here.
* gcc.dg/c2x-empty-init-3.c: Move to ...
* gcc.dg/c23-empty-init-3.c: ... here.
* gcc.dg/c2x-enum-1.c: Move to ...
* gcc.dg/c23-enum-1.c: ... here.
* gcc.dg/c2x-enum-2.c: Move to ...
* gcc.dg/c23-enum-2.c: ... here.
* gcc.dg/c2x-enum-3.c: Move to ...
* gcc.dg/c23-enum-3.c: ... here.
* gcc.dg/c2x-enum-4.c: Move to ...
* gcc.dg/c23-enum-4.c: ... here.
* gcc.dg/c2x-enum-5.c: Move to ...
* gcc.dg/c23-enum-5.c: ... here.
* gcc.dg/c2x-enum-6.c: Move to ...
* gcc.dg/c23-enum-6.c: ... here.
* gcc.dg/c2x-enum-7.c: Move to ...
* gcc.dg/c23-enum-7.c: ... here.
* gcc.dg/c2x-enum-8.c: Move to ...
* gcc.dg/c23-enum-8.c: ... here.
* gcc.dg/c2x-float-1.c: Move to ...
* gcc.dg/c23-float-1.c: ... here.
* gcc.dg/c2x-float-10.c: Move to ...
* gcc.dg/c23-float-10.c: ... here.
* gcc.dg/c2x-float-11.c: Move to ...
* gcc.dg/c23-float-11.c: ... here.
* gcc.dg/c2x-float-12.c: Move to ...
* gcc.dg/c23-float-12.c: ... here.
* gcc.dg/c2x-float-13.c: Move to ...
* gcc.dg/c23-float-13.c: ... here.
* gcc.dg/c2x-float-2.c: Move to ...
* gcc.dg/c23-float-2.c: ... here.
* gcc.dg/c2x-float-3.c: Move to ...
* gcc.dg/c23-float-3.c: ... here.
* gcc.dg/c2x-float-4.c: Move to ...
* gcc.dg/c23-float-4.c: ... here.
* gcc.dg/c2x-float-5.c: Move to ...
* gcc.dg/c23-float-5.c: ... here.
* gcc.dg/c2x-float-6.c: Move to ...
* gcc.dg/c23-float-6.c: ... here.
* gcc.dg/c2x-float-7a.c: Move to ...
* gcc.dg/c23-float-7a.c: ... here.
* gcc.dg/c2x-float-7b.c: Move to ...
* gcc.dg/c23-float-7b.c: ... here.
* gcc.dg/c2x-float-7c.c: Move to ...
* gcc.dg/c23-float-7c.c: ... here.
* gcc.dg/c2x-float-8.c: Move to ...
* gcc.dg/c23-float-8.c: ... here.
* gcc.dg/c2x-float-9.c: Move to ...
* gcc.dg/c23-float-9.c: ... here.
* gcc.dg/c2x-float-no-dfp-1.c: Move to ...
* gcc.dg/c23-float-no-dfp-1.c: ... here.
* gcc.dg/c2x-float-no-dfp-2.c: Move to ...
* gcc.dg/c23-float-no-dfp-2.c: ... here.  Update reference to
moved file.
* gcc.dg/c2x-float-no-dfp-3.c: Move to ...
* gcc.dg/c23-float-no-dfp-3.c: ... here.
* gcc.dg/c2x-float-no-dfp-4.c: Move to ...
* gcc.dg/c23-float-no-dfp-4.c: ... here.  Update reference to
moved file.
* gcc.dg/c2x-floatn-1.c: Move to ...
* gcc.dg/c23-floatn-1.c: ... here.
* gcc.dg/c2x-floatn-2.c: Move to ...
* gcc.dg/c23-floatn-2.c: ... here.
* gcc.dg/c2x-floatn-3.c: Move to ...
* gcc.dg/c23-floatn-3.c: ... here.
* gcc.dg/c2x-floatn-4.c: Move to ...
* gcc.dg/c23-floatn-4.c: ... here.
* gcc.dg/c2x-floatn-5.c: Move to ...
* gcc.dg/c23-floatn-5.c: ... here.
* gcc.dg/c2x-floatn-6.c: Move to ...
* gcc.dg/c23-floatn-6.c: ... here.
* gcc.dg/c2x-floatn-7.c: Move to ...
* gcc.dg/c23-floatn-7.c: ... here.
* gcc.dg/c2x-floatn-8.c: Move to ...
* gcc.dg/c23-floatn-8.c: ... here.
* gcc.dg/c2x-fordecl-1.c: Move to ...
* gcc.dg/c23-fordecl-1.c: ... here.
* gcc.dg/c2x-fordecl-2.c: Move to ...
* gcc.dg/c23-fordecl-2.c: ... here.
* gcc.dg/c2x-fordecl-3.c: Move to ...
* gcc.dg/c23-fordecl-3.c: ... here.
* gcc.dg/c2x-fordecl-4.c: Move to ...
* gcc.dg/c23-fordecl-4.c: ... here.
* gcc.dg/c2x-has-c-attribute-1.c: Move to ...
* gcc.dg/c23-has-c-attribute-1.c: ... here.
* gcc.dg/c2x-has-c-attribute-2.c: Move to ...
* gcc.dg/c23-has-c-attribute-2.c: ... here.
* gcc.dg/c2x-has-c-attribute-3.c: Move to ...
* gcc.dg/c23-has-c-attribute-3.c: ... here.
* gcc.dg/c2x-has-c-attribute-4.c: Move to ...
* gcc.dg/c23-has-c-attribute-4.c: ... here.
* gcc.dg/c2x-labels-1.c: Move to ...
* gcc.dg/c23-labels-1.c: ... here.
* gcc.dg/c2x-labels-2.c: Move to ...
* gcc.dg/c23-labels-2.c: ... here.
* gcc.dg/c2x-labels-3.c: Move to ...
* gcc.dg/c23-labels-3.c: ... here.
* gcc.dg/c2x-limits-1.c: Move to ...
* gcc.dg/c23-limits-1.c: ... here.
* gcc.dg/c2x-no-dfp-1.c: Move to ...
* gcc.dg/c23-no-dfp-1.c: ... here.
* gcc.dg/c2x-nullptr-1.c: Move to ...
* gcc.dg/c23-nullptr-1.c: ... here.
* gcc.dg/c2x-nullptr-2.c: Move to ...
* gcc.dg/c23-nullptr-2.c: ... here.
* gcc.dg/c2x-nullptr-3.c: Move to ...
* gcc.dg/c23-nullptr-3.c: ... here.
* gcc.dg/c2x-nullptr-4.c: Move to ...
* gcc.dg/c23-nullptr-4.c: ... here.
* gcc.dg/c2x-nullptr-5.c: Move to ...
* gcc.dg/c23-nullptr-5.c: ... here.
* gcc.dg/c2x-nullptr-6.c: Move to ...
* gcc.dg/c23-nullptr-6.c: ... here.
* gcc.dg/c2x-old-style-definition-1.c: Move to ...
* gcc.dg/c23-old-style-definition-1.c: ... here.
* gcc.dg/c2x-old-style-definition-2.c: Move to ...
* gcc.dg/c23-old-style-definition-2.c: ... here.
* gcc.dg/c2x-old-style-definition-3.c: Move to ...
* gcc.dg/c23-old-style-definition-3.c: ... here.
* gcc.dg/c2x-old-style-definition-4.c: Move to ...
* gcc.dg/c23-old-style-definition-4.c: ... here.
* gcc.dg/c2x-old-style-definition-5.c: Move to ...
* gcc.dg/c23-old-style-definition-5.c: ... here.
* gcc.dg/c2x-old-style-definition-6.c: Move to ...
* gcc.dg/c23-old-style-definition-6.c: ... here.
* gcc.dg/c2x-parm-omit-1.c: Move to ...
* gcc.dg/c23-parm-omit-1.c: ... here.
* gcc.dg/c2x-parm-omit-2.c: Move to ...
* gcc.dg/c23-parm-omit-2.c: ... here.
* gcc.dg/c2x-parm-omit-3.c: Move to ...
* gcc.dg/c23-parm-omit-3.c: ... here.
* gcc.dg/c2x-parm-omit-4.c: Move to ...
* gcc.dg/c23-parm-omit-4.c: ... here.
* gcc.dg/c2x-qual-1.c: Move to ...
* gcc.dg/c23-qual-1.c: ... here.
* gcc.dg/c2x-qual-2.c: Move to ...
* gcc.dg/c23-qual-2.c: ... here.
* gcc.dg/c2x-qual-3.c: Move to ...
* gcc.dg/c23-qual-3.c: ... here.
* gcc.dg/c2x-qual-4.c: Move to ...
* gcc.dg/c23-qual-4.c: ... here.
* gcc.dg/c2x-qual-5.c: Move to ...
* gcc.dg/c23-qual-5.c: ... here.
* gcc.dg/c2x-qual-6.c: Move to ...
* gcc.dg/c23-qual-6.c: ... here.
* gcc.dg/c2x-qual-7.c: Move to ...
* gcc.dg/c23-qual-7.c: ... here.
* gcc.dg/c2x-static-assert-1.c: Move to ...
* gcc.dg/c23-static-assert-1.c: ... here.
* gcc.dg/c2x-static-assert-2.c: Move to ...
* gcc.dg/c23-static-assert-2.c: ... here.
* gcc.dg/c2x-static-assert-3.c: Move to ...
* gcc.dg/c23-static-assert-3.c: ... here.
* gcc.dg/c2x-static-assert-4.c: Move to ...
* gcc.dg/c23-static-assert-4.c: ... here.
* gcc.dg/c2x-stdarg-1.c: Move to ...
* gcc.dg/c23-stdarg-1.c: ... here.
* gcc.dg/c2x-stdarg-2.c: Move to ...
* gcc.dg/c23-stdarg-2.c: ... here.
* gcc.dg/c2x-stdarg-3.c: Move to ...
* gcc.dg/c23-stdarg-3.c: ... here.
* gcc.dg/c2x-stdarg-4.c: Move to ...
* gcc.dg/c23-stdarg-4.c: ... here.
* gcc.dg/c2x-stdarg-5.c: Move to ...
* gcc.dg/c23-stdarg-5.c: ... here.
* gcc.dg/c2x-stdatomic-1.c: Move to ...
* gcc.dg/c23-stdatomic-1.c: ... here.
* gcc.dg/c2x-stddef-1.c: Move to ...
* gcc.dg/c23-stddef-1.c: ... here.
* gcc.dg/c2x-stdint-1.c: Move to ...
* gcc.dg/c23-stdint-1.c: ... here.
* gcc.dg/c2x-thread-local-1.c: Move to ...
* gcc.dg/c23-thread-local-1.c: ... here.
* gcc.dg/c2x-thread-local-2.c: Move to ...
* gcc.dg/c23-thread-local-2.c: ... here.
* gcc.dg/c2x-typeof-1.c: Move to ...
* gcc.dg/c23-typeof-1.c: ... here.
* gcc.dg/c2x-typeof-2.c: Move to ...
* gcc.dg/c23-typeof-2.c: ... here.
* gcc.dg/c2x-typeof-3.c: Move to ...
* gcc.dg/c23-typeof-3.c: ... here.
* gcc.dg/c2x-unproto-1.c: Move to ...
* gcc.dg/c23-unproto-1.c: ... here.
* gcc.dg/c2x-unproto-2.c: Move to ...
* gcc.dg/c23-unproto-2.c: ... here.
* gcc.dg/c2x-unproto-3.c: Move to ...
* gcc.dg/c23-unproto-3.c: ... here.
* gcc.dg/c2x-unproto-4.c: Move to ...
* gcc.dg/c23-unproto-4.c: ... here.
* gcc.dg/c2x-unreachable-1.c: Move to ...
* gcc.dg/c23-unreachable-1.c: ... here.
* gcc.dg/c2x-utf8char-1.c: Move to ...
* gcc.dg/c23-utf8char-1.c: ... here.
* gcc.dg/c2x-utf8char-2.c: Move to ...
* gcc.dg/c23-utf8char-2.c: ... here.
* gcc.dg/c2x-utf8char-3.c: Move to ...
* gcc.dg/c23-utf8char-3.c: ... here.
* gcc.dg/c2x-utf8str-type.c: Move to ...
* gcc.dg/c23-utf8str-type.c: ... here.
* gcc.dg/c2x-utf8str.c: Move to ...
* gcc.dg/c23-utf8str.c: ... here.
* gcc.dg/cpp/c2x-elifdef-1.c: Move to ...
* gcc.dg/cpp/c23-elifdef-1.c: ... here.
* gcc.dg/cpp/c2x-elifdef-2.c: Move to ...
* gcc.dg/cpp/c23-elifdef-2.c: ... here.
* gcc.dg/cpp/c2x-scope-1.c: Move to ...
* gcc.dg/cpp/c23-scope-1.c: ... here.
* gcc.dg/cpp/c2x-scope-2.c: Move to ...
* gcc.dg/cpp/c23-scope-2.c: ... here.  Update reference to moved
file.
* gcc.dg/cpp/c2x-trigraphs-1.c: Move to ...
* gcc.dg/cpp/c23-trigraphs-1.c: ... here.
* gcc.dg/cpp/c2x-trigraphs-2.c: Move to ...
* gcc.dg/cpp/c23-trigraphs-2.c: ... here.
* gcc.dg/cpp/c2x-ucn-1.c: Move to ...
* gcc.dg/cpp/c23-ucn-1.c: ... here.
* gcc.dg/cpp/c2x-ucnid-1-utf8.c: Move to ...
* gcc.dg/cpp/c23-ucnid-1-utf8.c: ... here.
* gcc.dg/cpp/c2x-ucnid-1.c: Move to ...
* gcc.dg/cpp/c23-ucnid-1.c: ... here.
* gcc.dg/cpp/c2x-va-opt-1.c: Move to ...
* gcc.dg/cpp/c23-va-opt-1.c: ... here.
* gcc.dg/cpp/c2x-warning-1.c: Move to ...
* gcc.dg/cpp/c23-warning-1.c: ... here.
* gcc.dg/cpp/c2x-warning-2.c: Move to ...
* gcc.dg/cpp/c23-warning-2.c: ... here.
* gcc.dg/cpp/gnu2x-warning-1.c: Move to ...
* gcc.dg/cpp/gnu23-warning-1.c: ... here.
* gcc.dg/cpp/gnu2x-warning-2.c: Move to ...
* gcc.dg/cpp/gnu23-warning-2.c: ... here.
* gcc.dg/dfp/c2x-builtins-dfp-1.c: Move to ...
* gcc.dg/dfp/c23-builtins-dfp-1.c: ... here.
* gcc.dg/dfp/c2x-constants-1.c: Move to ...
* gcc.dg/dfp/c23-constants-1.c: ... here.
* gcc.dg/dfp/c2x-constants-2.c: Move to ...
* gcc.dg/dfp/c23-constants-2.c: ... here.
* gcc.dg/dfp/c2x-constexpr-dfp-1.c: Move to ...
* gcc.dg/dfp/c23-constexpr-dfp-1.c: ... here.
* gcc.dg/dfp/c2x-constexpr-dfp-2.c: Move to ...
* gcc.dg/dfp/c23-constexpr-dfp-2.c: ... here.
* gcc.dg/dfp/c2x-float-dfp-1.c: Move to ...
* gcc.dg/dfp/c23-float-dfp-1.c: ... here.
* gcc.dg/dfp/c2x-float-dfp-2.c: Move to ...
* gcc.dg/dfp/c23-float-dfp-2.c: ... here.  Update reference to
moved file.
* gcc.dg/dfp/c2x-float-dfp-3.c: Move to ...
* gcc.dg/dfp/c23-float-dfp-3.c: ... here.
* gcc.dg/dfp/c2x-float-dfp-4.c: Move to ...
* gcc.dg/dfp/c23-float-dfp-4.c: ... here.
* gcc.dg/dfp/c2x-float-dfp-5.c: Move to ...
* gcc.dg/dfp/c23-float-dfp-5.c: ... here.
* gcc.dg/dfp/c2x-float-dfp-6.c: Move to ...
* gcc.dg/dfp/c23-float-dfp-6.c: ... here.
* gcc.dg/dfp/c2x-float-dfp-7.c: Move to ...
* gcc.dg/dfp/c23-float-dfp-7.c: ... here.
* gcc.dg/dfp/c2x-float-dfp-8.c: Move to ...
* gcc.dg/dfp/c23-float-dfp-8.c: ... here.
* gcc.dg/dfp/c2x-keywords-1.c: Move to ...
* gcc.dg/dfp/c23-keywords-1.c: ... here.
* gcc.dg/dfp/c2x-keywords-2.c: Move to ...
* gcc.dg/dfp/c23-keywords-2.c: ... here.
* gcc.dg/format/c2x-dfp-printf-1.c: Move to ...
* gcc.dg/format/c23-dfp-printf-1.c: ... here.
* gcc.dg/format/c2x-dfp-scanf-1.c: Move to ...
* gcc.dg/format/c23-dfp-scanf-1.c: ... here.
* gcc.dg/format/c2x-printf-1.c: Move to ...
* gcc.dg/format/c23-printf-1.c: ... here.
* gcc.dg/format/c2x-scanf-1.c: Move to ...
* gcc.dg/format/c23-scanf-1.c: ... here.
* gcc.dg/format/c2x-strftime-1.c: Move to ...
* gcc.dg/format/c23-strftime-1.c: ... here.
* gcc.dg/gnu2x-attr-syntax-1.c: Move to ...
* gcc.dg/gnu23-attr-syntax-1.c: ... here.
* gcc.dg/gnu2x-attr-syntax-2.c: Move to ...
* gcc.dg/gnu23-attr-syntax-2.c: ... here.
* gcc.dg/gnu2x-attrs-1.c: Move to ...
* gcc.dg/gnu23-attrs-1.c: ... here.
* gcc.dg/gnu2x-attrs-2.c: Move to ...
* gcc.dg/gnu23-attrs-2.c: ... here.
* gcc.dg/gnu2x-auto-1.c: Move to ...
* gcc.dg/gnu23-auto-1.c: ... here.
* gcc.dg/gnu2x-builtins-no-dfp-1.c: Move to ...
* gcc.dg/gnu23-builtins-no-dfp-1.c: ... here.
* gcc.dg/gnu2x-complit-1.c: Move to ...
* gcc.dg/gnu23-complit-1.c: ... here.
* gcc.dg/gnu2x-complit-2.c: Move to ...
* gcc.dg/gnu23-complit-2.c: ... here.
* gcc.dg/gnu2x-constexpr-1.c: Move to ...
* gcc.dg/gnu23-constexpr-1.c: ... here.
* gcc.dg/gnu2x-empty-init-1.c: Move to ...
* gcc.dg/gnu23-empty-init-1.c: ... here.
* gcc.dg/gnu2x-empty-init-2.c: Move to ...
* gcc.dg/gnu23-empty-init-2.c: ... here.
* gcc.dg/gnu2x-enum-1.c: Move to ...
* gcc.dg/gnu23-enum-1.c: ... here.
* gcc.dg/gnu2x-static-assert-1.c: Move to ...
* gcc.dg/gnu23-static-assert-1.c: ... here.
* gcc.dg/gnu2x-stdarg-1.c: Move to ...
* gcc.dg/gnu23-stdarg-1.c: ... here.
* gcc.dg/gnu2x-typeof-1.c: Move to ...
* gcc.dg/gnu23-typeof-1.c: ... here.
* gcc.dg/gnu2x-utf8char-1.c: Move to ...
* gcc.dg/gnu23-utf8char-1.c: ... here.  Update reference to moved
file.
* gcc.dg/gnu2x-utf8str-type.c: Move to ...
* gcc.dg/gnu23-utf8str-type.c: ... here.  Update reference to
moved file.
* gcc.dg/gnu2x-utf8str.c: Move to ...
* gcc.dg/gnu23-utf8str.c: ... here.
* gcc.dg/torture/builtin-fp-int-inexact-c2x.c: Move to ...
* gcc.dg/torture/builtin-fp-int-inexact-c23.c: ... here.
* gcc.dg/torture/c2x-stdarg-split-1a.c: Move to ...
* gcc.dg/torture/c23-stdarg-split-1a.c: ... here.  Update
reference to moved file.
* gcc.dg/torture/c2x-stdarg-split-1b.c: Move to ...
* gcc.dg/torture/c23-stdarg-split-1b.c: ... here.
* objc.dg/attributes/gnu2x-attr-syntax-1.m: Move to ...
* objc.dg/attributes/gnu23-attr-syntax-1.m: ... here.  Update
reference to moved file.
* g++.dg/cpp/elifdef-2.C: Update reference to moved file.
* g++.dg/cpp/elifdef-4.C: Likewise.
* gcc.dg/c11-float-dfp-1.c: Likewise.
* gcc.dg/c11-float-dfp-2.c: Likewise.
* gcc.dg/cpp/gnu11-elifdef-1.c: Likewise.
* gcc.dg/dfp/ts18661-2-float-dfp-1.c: Likewise.

8 months agoDaily bump.
GCC Administrator [Wed, 8 Nov 2023 00:17:35 +0000 (00:17 +0000)]
Daily bump.

8 months agoRISC-V: Support FP floor to i/l/ll diff size autovec
Pan Li [Tue, 7 Nov 2023 14:24:41 +0000 (22:24 +0800)]
RISC-V: Support FP floor to i/l/ll diff size autovec

This patch would like to support the FP below API auto vectorization
with different type size

+----------+-----------+----------+
| API      | RV64      | RV32     |
+----------+-----------+----------+
| ifloor   | DF => SI  | DF => SI |
| ifloorf  | -         | -        |
| lfloor   | -         | DF => SI |
| lfloorf  | SF => DI  | -        |
| llfloor  | -         | -        |
| llfloorf | SF => DI  | SF => DI |
+----------+-----------+----------+

Given below code:
void
test_lfloorf (long *out, float *in, unsigned count)
{
  for (unsigned i = 0; i < count; i++)
    out[i] = __builtin_lceilf (in[i]);
}

Before this patch:
.L3:
  flw      fa0,0(s0)
  addi     s0,s0,4
  addi     s1,s1,8
  call     floorf
  fcvt.l.s a5,fa0,rtz
  sd       a5,-8(s1)
  bne      s2,s0,.L3

After this patch:
  fsrmi        2  // RDN mode
.L3:
  vsetvli      a5,a2,e32,mf2,ta,ma
  vle32.v      v2,0(a1)
  slli         a3,a5,2
  slli         a4,a5,3
  vfwcvt.x.f.v v1,v2
  sub          a2,a2,a5
  vse64.v      v1,0(a0)
  add          a1,a1,a3
  add          a0,a0,a4
  bne          a2,zero,.L3

Unfortunately, the HF mode is not include due to it requires
additional middle-end support from internal-fun.def.

gcc/ChangeLog:

* config/riscv/autovec.md: Remove the size check of lfloor.
* config/riscv/riscv-v.cc (expand_vec_lfloor): Leverage
emit_vec_rounding_to_integer for floor.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/autovec/unop/math-ifloor-1.c: New test.
* gcc.target/riscv/rvv/autovec/unop/math-ifloor-run-1.c: New test.
* gcc.target/riscv/rvv/autovec/unop/math-lfloor-rv32-0.c: New test.
* gcc.target/riscv/rvv/autovec/unop/math-lfloor-rv32-run-0.c: New test.
* gcc.target/riscv/rvv/autovec/unop/math-lfloorf-rv64-0.c: New test.
* gcc.target/riscv/rvv/autovec/unop/math-lfloorf-rv64-run-0.c: New test.
* gcc.target/riscv/rvv/autovec/unop/math-llfloorf-0.c: New test.
* gcc.target/riscv/rvv/autovec/unop/math-llfloorf-run-0.c: New test.
* gcc.target/riscv/rvv/autovec/vls/math-ifloor-1.c: New test.
* gcc.target/riscv/rvv/autovec/vls/math-lfloor-rv32-0.c: New test.
* gcc.target/riscv/rvv/autovec/vls/math-lfloorf-rv64-0.c: New test.
* gcc.target/riscv/rvv/autovec/vls/math-llfloorf-0.c: New test.

Signed-off-by: Pan Li <pan2.li@intel.com>
8 months agoFix libgomp build on targets that are not Linux-based or accelerators
Kwok Cheung Yeung [Tue, 7 Nov 2023 22:02:28 +0000 (22:02 +0000)]
Fix libgomp build on targets that are not Linux-based or accelerators

The patch 'openmp: Add support for the 'indirect' clause in C/C++'
introduced a new file target-indirect.c into the Makefile sources,
but that file was only present in config/linux/ and config/accel/,
so targets that are not Linux-based or GPU accelerators will not
pick it up and fail to build.

This is fixed by making the version in config/linux/ the default by
moving it into the base directory of libgomp.

2023-11-07  Kwok Cheung Yeung  <kcy@codesourcery.com>

libgomp/
* config/linux/target-indirect.c: Move to...
* target-indirect.c: ...here.

8 months agotestsuite: Refer more consistently to C23 not C2X
Joseph Myers [Tue, 7 Nov 2023 22:00:48 +0000 (22:00 +0000)]
testsuite: Refer more consistently to C23 not C2X

Continuing the move to refer to C23 in place of C2X throughout the
source tree, update testcase contents to use the "c23" or "gnu23"
option names in place of the old "c2x" or "gnu2x" names, except for
the few tests specifically intended to test the old names, and to
refer to C23 in comments.

This updates testcase *contents*; testcase naming (renaming c2x-*
tests to c23-* and gnu2x-* tests to gnu23-*), with a few consequent
changes to contents (where tests #include other tests, or refer to
them by name in comments) is to be addressed separately.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc/testsuite/
* c-c++-common/alias-1.c: Use "c23" or "gnu23" option names in
place of "c2x" or "gnu2x" names, and refer to C23 in comments in
place of C2X or C2x.
* gcc.dg/Wformat-overflow1.c: Likewise.
* gcc.dg/asm-scope-1.c: Likewise.
* gcc.dg/atomic/c2x-stdatomic-lockfree-char8_t.c: Likewise.
* gcc.dg/atomic/c2x-stdatomic-var-init-1.c: Likewise.
* gcc.dg/atomic/gnu2x-stdatomic-lockfree-char8_t.c: Likewise.
* gcc.dg/atomic/stdatomic-bitint-1.c: Likewise.
* gcc.dg/atomic/stdatomic-bitint-2.c: Likewise.
* gcc.dg/attr-assume-1.c: Likewise.
* gcc.dg/attr-assume-2.c: Likewise.
* gcc.dg/attr-assume-3.c: Likewise.
* gcc.dg/attr-assume-4.c: Likewise.
* gcc.dg/bitint-1.c: Likewise.
* gcc.dg/bitint-10.c: Likewise.
* gcc.dg/bitint-11.c: Likewise.
* gcc.dg/bitint-12.c: Likewise.
* gcc.dg/bitint-13.c: Likewise.
* gcc.dg/bitint-14.c: Likewise.
* gcc.dg/bitint-15.c: Likewise.
* gcc.dg/bitint-16.c: Likewise.
* gcc.dg/bitint-17.c: Likewise.
* gcc.dg/bitint-18.c: Likewise.
* gcc.dg/bitint-19.c: Likewise.
* gcc.dg/bitint-2.c: Likewise.
* gcc.dg/bitint-20.c: Likewise.
* gcc.dg/bitint-21.c: Likewise.
* gcc.dg/bitint-22.c: Likewise.
* gcc.dg/bitint-23.c: Likewise.
* gcc.dg/bitint-25.c: Likewise.
* gcc.dg/bitint-28.c: Likewise.
* gcc.dg/bitint-29.c: Likewise.
* gcc.dg/bitint-3.c: Likewise.
* gcc.dg/bitint-30.c: Likewise.
* gcc.dg/bitint-31.c: Likewise.
* gcc.dg/bitint-32.c: Likewise.
* gcc.dg/bitint-34.c: Likewise.
* gcc.dg/bitint-35.c: Likewise.
* gcc.dg/bitint-36.c: Likewise.
* gcc.dg/bitint-38.c: Likewise.
* gcc.dg/bitint-39.c: Likewise.
* gcc.dg/bitint-4.c: Likewise.
* gcc.dg/bitint-5.c: Likewise.
* gcc.dg/bitint-6.c: Likewise.
* gcc.dg/bitint-7.c: Likewise.
* gcc.dg/bitint-8.c: Likewise.
* gcc.dg/bitint-9.c: Likewise.
* gcc.dg/c11-attr-syntax-3.c: Likewise.
* gcc.dg/c11-builtins-1.c: Likewise.
* gcc.dg/c11-complit-1.c: Likewise.
* gcc.dg/c11-complit-2.c: Likewise.
* gcc.dg/c11-complit-3.c: Likewise.
* gcc.dg/c11-digit-separators-1.c: Likewise.
* gcc.dg/c11-empty-init-3.c: Likewise.
* gcc.dg/c11-enum-1.c: Likewise.
* gcc.dg/c11-enum-2.c: Likewise.
* gcc.dg/c11-enum-3.c: Likewise.
* gcc.dg/c11-enum-4.c: Likewise.
* gcc.dg/c11-enum-5.c: Likewise.
* gcc.dg/c11-enum-6.c: Likewise.
* gcc.dg/c11-floatn-5.c: Likewise.
* gcc.dg/c11-floatn-6.c: Likewise.
* gcc.dg/c11-floatn-7.c: Likewise.
* gcc.dg/c11-floatn-8.c: Likewise.
* gcc.dg/c11-fordecl-3.c: Likewise.
* gcc.dg/c11-fordecl-4.c: Likewise.
* gcc.dg/c11-keywords-1.c: Likewise.
* gcc.dg/c11-old-style-definition-1.c: Likewise.
* gcc.dg/c11-old-style-definition-2.c: Likewise.
* gcc.dg/c11-parm-omit-3.c: Likewise.
* gcc.dg/c11-qual-1.c: Likewise.
* gcc.dg/c11-static-assert-9.c: Likewise.
* gcc.dg/c11-stdarg-3.c: Likewise.
* gcc.dg/c11-unproto-1.c: Likewise.
* gcc.dg/c11-unproto-2.c: Likewise.
* gcc.dg/c11-utf8char-1.c: Likewise.
* gcc.dg/c17-nullptr-2.c: Likewise.
* gcc.dg/c2x-align-1.c: Likewise.
* gcc.dg/c2x-align-6.c: Likewise.
* gcc.dg/c2x-attr-deprecated-1.c: Likewise.
* gcc.dg/c2x-attr-deprecated-2.c: Likewise.
* gcc.dg/c2x-attr-deprecated-3.c: Likewise.
* gcc.dg/c2x-attr-deprecated-4.c: Likewise.
* gcc.dg/c2x-attr-fallthrough-1.c: Likewise.
* gcc.dg/c2x-attr-fallthrough-2.c: Likewise.
* gcc.dg/c2x-attr-fallthrough-3.c: Likewise.
* gcc.dg/c2x-attr-fallthrough-4.c: Likewise.
* gcc.dg/c2x-attr-fallthrough-5.c: Likewise.
* gcc.dg/c2x-attr-fallthrough-6.c: Likewise.
* gcc.dg/c2x-attr-maybe_unused-1.c: Likewise.
* gcc.dg/c2x-attr-maybe_unused-2.c: Likewise.
* gcc.dg/c2x-attr-maybe_unused-3.c: Likewise.
* gcc.dg/c2x-attr-maybe_unused-4.c: Likewise.
* gcc.dg/c2x-attr-nodiscard-1.c: Likewise.
* gcc.dg/c2x-attr-nodiscard-2.c: Likewise.
* gcc.dg/c2x-attr-nodiscard-3.c: Likewise.
* gcc.dg/c2x-attr-nodiscard-4.c: Likewise.
* gcc.dg/c2x-attr-noreturn-1.c: Likewise.
* gcc.dg/c2x-attr-noreturn-2.c: Likewise.
* gcc.dg/c2x-attr-noreturn-3.c: Likewise.
* gcc.dg/c2x-attr-syntax-1.c: Likewise.
* gcc.dg/c2x-attr-syntax-2.c: Likewise.
* gcc.dg/c2x-attr-syntax-3.c: Likewise.
* gcc.dg/c2x-attr-syntax-4.c: Likewise.
* gcc.dg/c2x-attr-syntax-5.c: Likewise.
* gcc.dg/c2x-attr-syntax-7.c: Likewise.
* gcc.dg/c2x-auto-1.c: Likewise.
* gcc.dg/c2x-auto-2.c: Likewise.
* gcc.dg/c2x-auto-3.c: Likewise.
* gcc.dg/c2x-auto-4.c: Likewise.
* gcc.dg/c2x-binary-constants-1.c: Likewise.
* gcc.dg/c2x-binary-constants-2.c: Likewise.
* gcc.dg/c2x-binary-constants-3.c: Likewise.
* gcc.dg/c2x-bool-1.c: Likewise.
* gcc.dg/c2x-bool-2.c: Likewise.
* gcc.dg/c2x-bool-limits-1.c: Likewise.
* gcc.dg/c2x-builtins-1.c: Likewise.
* gcc.dg/c2x-complit-1.c: Likewise.
* gcc.dg/c2x-complit-2.c: Likewise.
* gcc.dg/c2x-complit-3.c: Likewise.
* gcc.dg/c2x-complit-4.c: Likewise.
* gcc.dg/c2x-complit-5.c: Likewise.
* gcc.dg/c2x-complit-6.c: Likewise.
* gcc.dg/c2x-complit-7.c: Likewise.
* gcc.dg/c2x-complit-8.c: Likewise.
* gcc.dg/c2x-concat-1.c: Likewise.
* gcc.dg/c2x-constexpr-1.c: Likewise.
* gcc.dg/c2x-constexpr-2a.c: Likewise.
* gcc.dg/c2x-constexpr-2b.c: Likewise.
* gcc.dg/c2x-constexpr-3.c: Likewise.
* gcc.dg/c2x-constexpr-4.c: Likewise.
* gcc.dg/c2x-constexpr-5.c: Likewise.
* gcc.dg/c2x-constexpr-6.c: Likewise.
* gcc.dg/c2x-constexpr-7.c: Likewise.
* gcc.dg/c2x-constexpr-8.c: Likewise.
* gcc.dg/c2x-constexpr-9.c: Likewise.
* gcc.dg/c2x-digit-separators-1.c: Likewise.
* gcc.dg/c2x-digit-separators-2.c: Likewise.
* gcc.dg/c2x-digit-separators-3.c: Likewise.
* gcc.dg/c2x-empty-init-1.c: Likewise.
* gcc.dg/c2x-empty-init-2.c: Likewise.
* gcc.dg/c2x-empty-init-3.c: Likewise.
* gcc.dg/c2x-enum-1.c: Likewise.
* gcc.dg/c2x-enum-2.c: Likewise.
* gcc.dg/c2x-enum-3.c: Likewise.
* gcc.dg/c2x-enum-4.c: Likewise.
* gcc.dg/c2x-enum-5.c: Likewise.
* gcc.dg/c2x-enum-6.c: Likewise.
* gcc.dg/c2x-enum-7.c: Likewise.
* gcc.dg/c2x-enum-8.c: Likewise.
* gcc.dg/c2x-float-1.c: Likewise.
* gcc.dg/c2x-float-10.c: Likewise.
* gcc.dg/c2x-float-11.c: Likewise.
* gcc.dg/c2x-float-12.c: Likewise.
* gcc.dg/c2x-float-13.c: Likewise.
* gcc.dg/c2x-float-2.c: Likewise.
* gcc.dg/c2x-float-3.c: Likewise.
* gcc.dg/c2x-float-4.c: Likewise.
* gcc.dg/c2x-float-5.c: Likewise.
* gcc.dg/c2x-float-6.c: Likewise.
* gcc.dg/c2x-float-7a.c: Likewise.
* gcc.dg/c2x-float-7b.c: Likewise.
* gcc.dg/c2x-float-7c.c: Likewise.
* gcc.dg/c2x-float-8.c: Likewise.
* gcc.dg/c2x-float-9.c: Likewise.
* gcc.dg/c2x-float-no-dfp-1.c: Likewise.
* gcc.dg/c2x-float-no-dfp-2.c: Likewise.
* gcc.dg/c2x-float-no-dfp-3.c: Likewise.
* gcc.dg/c2x-float-no-dfp-4.c: Likewise.
* gcc.dg/c2x-floatn-1.c: Likewise.
* gcc.dg/c2x-floatn-2.c: Likewise.
* gcc.dg/c2x-floatn-3.c: Likewise.
* gcc.dg/c2x-floatn-4.c: Likewise.
* gcc.dg/c2x-floatn-5.c: Likewise.
* gcc.dg/c2x-floatn-6.c: Likewise.
* gcc.dg/c2x-floatn-7.c: Likewise.
* gcc.dg/c2x-floatn-8.c: Likewise.
* gcc.dg/c2x-fordecl-1.c: Likewise.
* gcc.dg/c2x-fordecl-2.c: Likewise.
* gcc.dg/c2x-fordecl-3.c: Likewise.
* gcc.dg/c2x-fordecl-4.c: Likewise.
* gcc.dg/c2x-has-c-attribute-1.c: Likewise.
* gcc.dg/c2x-has-c-attribute-2.c: Likewise.
* gcc.dg/c2x-has-c-attribute-3.c: Likewise.
* gcc.dg/c2x-has-c-attribute-4.c: Likewise.
* gcc.dg/c2x-labels-1.c: Likewise.
* gcc.dg/c2x-labels-2.c: Likewise.
* gcc.dg/c2x-labels-3.c: Likewise.
* gcc.dg/c2x-limits-1.c: Likewise.
* gcc.dg/c2x-no-dfp-1.c: Likewise.
* gcc.dg/c2x-nullptr-1.c: Likewise.
* gcc.dg/c2x-nullptr-2.c: Likewise.
* gcc.dg/c2x-nullptr-3.c: Likewise.
* gcc.dg/c2x-nullptr-4.c: Likewise.
* gcc.dg/c2x-nullptr-5.c: Likewise.
* gcc.dg/c2x-nullptr-6.c: Likewise.
* gcc.dg/c2x-old-style-definition-1.c: Likewise.
* gcc.dg/c2x-old-style-definition-2.c: Likewise.
* gcc.dg/c2x-old-style-definition-3.c: Likewise.
* gcc.dg/c2x-old-style-definition-4.c: Likewise.
* gcc.dg/c2x-old-style-definition-5.c: Likewise.
* gcc.dg/c2x-old-style-definition-6.c: Likewise.
* gcc.dg/c2x-parm-omit-1.c: Likewise.
* gcc.dg/c2x-parm-omit-2.c: Likewise.
* gcc.dg/c2x-parm-omit-3.c: Likewise.
* gcc.dg/c2x-parm-omit-4.c: Likewise.
* gcc.dg/c2x-qual-1.c: Likewise.
* gcc.dg/c2x-qual-2.c: Likewise.
* gcc.dg/c2x-qual-3.c: Likewise.
* gcc.dg/c2x-qual-4.c: Likewise.
* gcc.dg/c2x-qual-5.c: Likewise.
* gcc.dg/c2x-qual-6.c: Likewise.
* gcc.dg/c2x-qual-7.c: Likewise.
* gcc.dg/c2x-static-assert-1.c: Likewise.
* gcc.dg/c2x-static-assert-2.c: Likewise.
* gcc.dg/c2x-static-assert-3.c: Likewise.
* gcc.dg/c2x-static-assert-4.c: Likewise.
* gcc.dg/c2x-stdarg-1.c: Likewise.
* gcc.dg/c2x-stdarg-2.c: Likewise.
* gcc.dg/c2x-stdarg-3.c: Likewise.
* gcc.dg/c2x-stdarg-4.c: Likewise.
* gcc.dg/c2x-stdarg-5.c: Likewise.
* gcc.dg/c2x-stdatomic-1.c: Likewise.
* gcc.dg/c2x-stddef-1.c: Likewise.
* gcc.dg/c2x-stdint-1.c: Likewise.
* gcc.dg/c2x-thread-local-1.c: Likewise.
* gcc.dg/c2x-thread-local-2.c: Likewise.
* gcc.dg/c2x-typeof-1.c: Likewise.
* gcc.dg/c2x-typeof-2.c: Likewise.
* gcc.dg/c2x-typeof-3.c: Likewise.
* gcc.dg/c2x-unproto-1.c: Likewise.
* gcc.dg/c2x-unproto-2.c: Likewise.
* gcc.dg/c2x-unproto-3.c: Likewise.
* gcc.dg/c2x-unproto-4.c: Likewise.
* gcc.dg/c2x-unreachable-1.c: Likewise.
* gcc.dg/c2x-utf8char-1.c: Likewise.
* gcc.dg/c2x-utf8char-2.c: Likewise.
* gcc.dg/c2x-utf8char-3.c: Likewise.
* gcc.dg/c2x-utf8str-type.c: Likewise.
* gcc.dg/c2x-utf8str.c: Likewise.
* gcc.dg/c90-auto-1.c: Likewise.
* gcc.dg/c90-complit-2.c: Likewise.
* gcc.dg/cpp/c11-warning-3.c: Likewise.
* gcc.dg/cpp/c2x-elifdef-1.c: Likewise.
* gcc.dg/cpp/c2x-elifdef-2.c: Likewise.
* gcc.dg/cpp/c2x-scope-1.c: Likewise.
* gcc.dg/cpp/c2x-scope-2.c: Likewise.
* gcc.dg/cpp/c2x-trigraphs-1.c: Likewise.
* gcc.dg/cpp/c2x-trigraphs-2.c: Likewise.
* gcc.dg/cpp/c2x-ucn-1.c: Likewise.
* gcc.dg/cpp/c2x-ucnid-1-utf8.c: Likewise.
* gcc.dg/cpp/c2x-ucnid-1.c: Likewise.
* gcc.dg/cpp/c2x-va-opt-1.c: Likewise.
* gcc.dg/cpp/c2x-warning-1.c: Likewise.
* gcc.dg/cpp/c2x-warning-2.c: Likewise.
* gcc.dg/cpp/gnu11-warning-3.c: Likewise.
* gcc.dg/cpp/gnu2x-warning-1.c: Likewise.
* gcc.dg/cpp/gnu2x-warning-2.c: Likewise.
* gcc.dg/cr-decimal-dig-2.c: Likewise.
* gcc.dg/cr-decimal-dig-3.c: Likewise.
* gcc.dg/dfp/bid-non-canonical-d128-1.c: Likewise.
* gcc.dg/dfp/bid-non-canonical-d128-2.c: Likewise.
* gcc.dg/dfp/bid-non-canonical-d128-3.c: Likewise.
* gcc.dg/dfp/bid-non-canonical-d128-4.c: Likewise.
* gcc.dg/dfp/bid-non-canonical-d32-1.c: Likewise.
* gcc.dg/dfp/bid-non-canonical-d32-2.c: Likewise.
* gcc.dg/dfp/bid-non-canonical-d64-1.c: Likewise.
* gcc.dg/dfp/bid-non-canonical-d64-2.c: Likewise.
* gcc.dg/dfp/bitint-1.c: Likewise.
* gcc.dg/dfp/bitint-2.c: Likewise.
* gcc.dg/dfp/bitint-3.c: Likewise.
* gcc.dg/dfp/bitint-4.c: Likewise.
* gcc.dg/dfp/bitint-5.c: Likewise.
* gcc.dg/dfp/bitint-6.c: Likewise.
* gcc.dg/dfp/bitint-7.c: Likewise.
* gcc.dg/dfp/bitint-8.c: Likewise.
* gcc.dg/dfp/c2x-builtins-dfp-1.c: Likewise.
* gcc.dg/dfp/c2x-constants-1.c: Likewise.
* gcc.dg/dfp/c2x-constants-2.c: Likewise.
* gcc.dg/dfp/c2x-constexpr-dfp-1.c: Likewise.
* gcc.dg/dfp/c2x-constexpr-dfp-2.c: Likewise.
* gcc.dg/dfp/c2x-float-dfp-1.c: Likewise.
* gcc.dg/dfp/c2x-float-dfp-2.c: Likewise.
* gcc.dg/dfp/c2x-float-dfp-3.c: Likewise.
* gcc.dg/dfp/c2x-float-dfp-4.c: Likewise.
* gcc.dg/dfp/c2x-float-dfp-5.c: Likewise.
* gcc.dg/dfp/c2x-float-dfp-6.c: Likewise.
* gcc.dg/dfp/c2x-float-dfp-7.c: Likewise.
* gcc.dg/dfp/c2x-float-dfp-8.c: Likewise.
* gcc.dg/dfp/c2x-keywords-1.c: Likewise.
* gcc.dg/dfp/c2x-keywords-2.c: Likewise.
* gcc.dg/dfp/tr24732-float-dfp-1.c: Likewise.
* gcc.dg/dfp/ts18661-2-float-dfp-1.c: Likewise.
* gcc.dg/fixed-point/bitint-1.c: Likewise.
* gcc.dg/format/c11-printf-1.c: Likewise.
* gcc.dg/format/c11-scanf-1.c: Likewise.
* gcc.dg/format/c2x-dfp-printf-1.c: Likewise.
* gcc.dg/format/c2x-dfp-scanf-1.c: Likewise.
* gcc.dg/format/c2x-printf-1.c: Likewise.
* gcc.dg/format/c2x-scanf-1.c: Likewise.
* gcc.dg/format/c2x-strftime-1.c: Likewise.
* gcc.dg/format/ext-10.c: Likewise.
* gcc.dg/format/ext-9.c: Likewise.
* gcc.dg/gnu11-typeof-2.c: Likewise.
* gcc.dg/gnu2x-attr-syntax-1.c: Likewise.
* gcc.dg/gnu2x-attr-syntax-2.c: Likewise.
* gcc.dg/gnu2x-attrs-1.c: Likewise.
* gcc.dg/gnu2x-attrs-2.c: Likewise.
* gcc.dg/gnu2x-auto-1.c: Likewise.
* gcc.dg/gnu2x-builtins-no-dfp-1.c: Likewise.
* gcc.dg/gnu2x-complit-1.c: Likewise.
* gcc.dg/gnu2x-complit-2.c: Likewise.
* gcc.dg/gnu2x-constexpr-1.c: Likewise.
* gcc.dg/gnu2x-empty-init-1.c: Likewise.
* gcc.dg/gnu2x-empty-init-2.c: Likewise.
* gcc.dg/gnu2x-enum-1.c: Likewise.
* gcc.dg/gnu2x-static-assert-1.c: Likewise.
* gcc.dg/gnu2x-stdarg-1.c: Likewise.
* gcc.dg/gnu2x-typeof-1.c: Likewise.
* gcc.dg/gnu2x-utf8char-1.c: Likewise.
* gcc.dg/gnu2x-utf8str-type.c: Likewise.
* gcc.dg/gnu2x-utf8str.c: Likewise.
* gcc.dg/gomp/attrs-1.c: Likewise.
* gcc.dg/gomp/attrs-10.c: Likewise.
* gcc.dg/gomp/attrs-11.c: Likewise.
* gcc.dg/gomp/attrs-12.c: Likewise.
* gcc.dg/gomp/attrs-13.c: Likewise.
* gcc.dg/gomp/attrs-14.c: Likewise.
* gcc.dg/gomp/attrs-15.c: Likewise.
* gcc.dg/gomp/attrs-16.c: Likewise.
* gcc.dg/gomp/attrs-17.c: Likewise.
* gcc.dg/gomp/attrs-18.c: Likewise.
* gcc.dg/gomp/attrs-19.c: Likewise.
* gcc.dg/gomp/attrs-2.c: Likewise.
* gcc.dg/gomp/attrs-20.c: Likewise.
* gcc.dg/gomp/attrs-21.c: Likewise.
* gcc.dg/gomp/attrs-3.c: Likewise.
* gcc.dg/gomp/attrs-4.c: Likewise.
* gcc.dg/gomp/attrs-5.c: Likewise.
* gcc.dg/gomp/attrs-6.c: Likewise.
* gcc.dg/gomp/attrs-7.c: Likewise.
* gcc.dg/gomp/attrs-8.c: Likewise.
* gcc.dg/gomp/attrs-9.c: Likewise.
* gcc.dg/limits-width-2.c: Likewise.
* gcc.dg/qual-return-10.c: Likewise.
* gcc.dg/qual-return-9.c: Likewise.
* gcc.dg/sso-19.c: Likewise.
* gcc.dg/stdckdint-1.c: Likewise.
* gcc.dg/stdckdint-2.c: Likewise.
* gcc.dg/stdint-width-2.c: Likewise.
* gcc.dg/tm/attrs-1.c: Likewise.
* gcc.dg/torture/bitint-1.c: Likewise.
* gcc.dg/torture/bitint-10.c: Likewise.
* gcc.dg/torture/bitint-11.c: Likewise.
* gcc.dg/torture/bitint-12.c: Likewise.
* gcc.dg/torture/bitint-13.c: Likewise.
* gcc.dg/torture/bitint-14.c: Likewise.
* gcc.dg/torture/bitint-15.c: Likewise.
* gcc.dg/torture/bitint-16.c: Likewise.
* gcc.dg/torture/bitint-17.c: Likewise.
* gcc.dg/torture/bitint-18.c: Likewise.
* gcc.dg/torture/bitint-19.c: Likewise.
* gcc.dg/torture/bitint-2.c: Likewise.
* gcc.dg/torture/bitint-20.c: Likewise.
* gcc.dg/torture/bitint-21.c: Likewise.
* gcc.dg/torture/bitint-22.c: Likewise.
* gcc.dg/torture/bitint-23.c: Likewise.
* gcc.dg/torture/bitint-24.c: Likewise.
* gcc.dg/torture/bitint-25.c: Likewise.
* gcc.dg/torture/bitint-26.c: Likewise.
* gcc.dg/torture/bitint-27.c: Likewise.
* gcc.dg/torture/bitint-28.c: Likewise.
* gcc.dg/torture/bitint-29.c: Likewise.
* gcc.dg/torture/bitint-3.c: Likewise.
* gcc.dg/torture/bitint-30.c: Likewise.
* gcc.dg/torture/bitint-31.c: Likewise.
* gcc.dg/torture/bitint-32.c: Likewise.
* gcc.dg/torture/bitint-33.c: Likewise.
* gcc.dg/torture/bitint-34.c: Likewise.
* gcc.dg/torture/bitint-35.c: Likewise.
* gcc.dg/torture/bitint-36.c: Likewise.
* gcc.dg/torture/bitint-37.c: Likewise.
* gcc.dg/torture/bitint-38.c: Likewise.
* gcc.dg/torture/bitint-39.c: Likewise.
* gcc.dg/torture/bitint-4.c: Likewise.
* gcc.dg/torture/bitint-40.c: Likewise.
* gcc.dg/torture/bitint-41.c: Likewise.
* gcc.dg/torture/bitint-42.c: Likewise.
* gcc.dg/torture/bitint-5.c: Likewise.
* gcc.dg/torture/bitint-6.c: Likewise.
* gcc.dg/torture/bitint-7.c: Likewise.
* gcc.dg/torture/bitint-8.c: Likewise.
* gcc.dg/torture/bitint-9.c: Likewise.
* gcc.dg/torture/builtin-fp-int-inexact-c2x.c: Likewise.
* gcc.dg/torture/c2x-stdarg-split-1a.c: Likewise.
* gcc.dg/torture/c2x-stdarg-split-1b.c: Likewise.
* gcc.dg/torture/float128-nan-floath.c: Likewise.
* gcc.dg/torture/float128x-nan-floath.c: Likewise.
* gcc.dg/torture/float16-nan-floath.c: Likewise.
* gcc.dg/torture/float32-nan-floath.c: Likewise.
* gcc.dg/torture/float32x-nan-floath.c: Likewise.
* gcc.dg/torture/float64-nan-floath.c: Likewise.
* gcc.dg/torture/float64x-nan-floath.c: Likewise.
* gcc.target/i386/excess-precision-11.c: Likewise.
* gcc.target/i386/excess-precision-12.c: Likewise.
* lib/target-supports.exp: Likewise.
* objc.dg/attributes/gnu2x-attr-syntax-1.m: Likewise.

8 months agotest: Recover sdiv_pow2 check and remove test of RISC-V
Juzhe-Zhong [Tue, 7 Nov 2023 14:45:05 +0000 (22:45 +0800)]
test: Recover sdiv_pow2 check and remove test of RISC-V

gcc/testsuite/ChangeLog:

* gcc.dg/vect/vect-sdiv-pow2-1.c: Recover scan check.
* lib/target-supports.exp: Remove riscv.

8 months agovect/ifcvt: Add vec_cond fallback and check for vector versioning.
Robin Dapp [Mon, 6 Nov 2023 10:24:37 +0000 (11:24 +0100)]
vect/ifcvt: Add vec_cond fallback and check for vector versioning.

This restricts tree-ifcvt to only create COND_OPs when we versioned the
loop for vectorization.  Apart from that it re-creates a VEC_COND_EXPR
in vect_expand_fold_left if we emitted a COND_OP.

gcc/ChangeLog:

PR tree-optimization/112361
PR target/112359
PR middle-end/112406

* tree-if-conv.cc (convert_scalar_cond_reduction): Remember if
loop was versioned and only then create COND_OPs.
(predicate_scalar_phi): Do not create COND_OP when not
vectorizing.
* tree-vect-loop.cc (vect_expand_fold_left): Re-create
VEC_COND_EXPR.
(vectorize_fold_left_reduction): Pass mask to
vect_expand_fold_left.

gcc/testsuite/ChangeLog:

* gcc.dg/pr112359.c: New test.

8 months agolibstdc++: [_Hashtable] Add missing node destructor call
François Dumont [Mon, 6 Nov 2023 18:34:50 +0000 (19:34 +0100)]
libstdc++: [_Hashtable] Add missing node destructor call

libstdc++-v3/ChangeLog:

* include/bits/hashtable_policy.h
(_Hashtable_alloc<>::_M_allocate_node): Add missing call to node destructor
on construct exception.

8 months agoc: Change T2X_* format checking macros to T23_*
Joseph Myers [Tue, 7 Nov 2023 20:03:37 +0000 (20:03 +0000)]
c: Change T2X_* format checking macros to T23_*

Analogous to previous changes to code that matched "c2x"
(case-insensitive), also update T2X_* macros used in format checking
tables to be named T23_*.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc/c-family/
* c-format.h (T2X_UI): Rename to T23_UI.
(T2X_UL): Rename to T23_UL.
(T2X_ULL): Rename to T23_ULL.
(T2X_US): Rename to T23_US.
(T2X_UC): Rename to T23_UC.
(T2X_ST): Rename to T23_ST.
(T2X_UPD): Rename to T23_UPD.
(T2X_UIM): Rename to T23_UIM.
(T2X_D32): Rename to T23_D32.
(T2X_D64): Rename to T23_D64.
(T2X_D128): Rename to T23_D128.
(T2X_I8): Rename to T23_I8.
(T2X_I16): Rename to T23_I16.
(T2X_I32): Rename to T23_I32.
(T2X_I64): Rename to T23_I64.
(T2X_U8): Rename to T23_U8.
(T2X_U16): Rename to T23_U16.
(T2X_U32): Rename to T23_U32.
(T2X_U64): Rename to T23_U64.
(T2X_IF8): Rename to T23_IF8.
(T2X_IF16): Rename to T23_IF16.
(T2X_IF32): Rename to T23_IF32.
(T2X_IF64): Rename to T23_IF64.
(T2X_UF8): Rename to T23_UF8.
(T2X_UF16): Rename to T23_UF16.
(T2X_UF32): Rename to T23_UF32.
(T2X_UF64): Rename to T23_UF64.
* c-format.cc: Update all uses of T2X_* macros to use T23_*.

8 months agoi386: Make flags_reg_operand a special predicate
Uros Bizjak [Tue, 7 Nov 2023 18:32:14 +0000 (19:32 +0100)]
i386: Make flags_reg_operand a special predicate

There is no need to check the mode in flags_reg_operand predicate. The
mode in flags setting instructions is checked with ix86_match_ccmode.

The patch avoids "warning: operand X missing mode?" warnings with
VOIDmode flags_reg_operand predicate.

gcc/ChangeLog:

* config/i386/predicates.md ("flags_reg_operand"):
Make predicate special to avoid automatic mode checks.

8 months agogcc/configure: Regenerate
Martin Jambor [Tue, 7 Nov 2023 17:47:09 +0000 (18:47 +0100)]
gcc/configure: Regenerate

Probabaly because of a re-base of changes to gcc/configure there are
line comment mismatches in between what we have and what would be
generated. This patch brings them in line so that consitency
checkers are happy.

gcc/ChangeLog:

2023-11-07  Martin Jambor  <mjambor@suse.cz>

* configure: Regenerate.

8 months agotestsuite: nodiscard-reason-nonstring.C FAIL in C++26
Marek Polacek [Tue, 7 Nov 2023 15:41:41 +0000 (10:41 -0500)]
testsuite: nodiscard-reason-nonstring.C FAIL in C++26

Since r14-5071, we emit an extra error for this test (the first one):

nodiscard-reason-nonstring.C:5:13: error: expected string-literal before numeric constant
nodiscard-reason-nonstring.C:5:36: error: 'nodiscard' attribute argument must be a string constant

so the test needs adjusting.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/nodiscard-reason-nonstring.C: Adjust dg-error.

8 months agoopenmp: Add support for the 'indirect' clause in C/C++
Kwok Cheung Yeung [Tue, 7 Nov 2023 15:18:29 +0000 (15:18 +0000)]
openmp: Add support for the 'indirect' clause in C/C++

This adds support for the 'indirect' clause in the 'declare target'
directive.  Functions declared as indirect may be called via function
pointers passed from the host in offloaded code.

Virtual calls to member functions via the object pointer in C++ are
currently not supported in target regions.

2023-11-07  Kwok Cheung Yeung  <kcy@codesourcery.com>

gcc/c-family/
* c-attribs.cc (c_common_attribute_table): Add attribute for
indirect functions.
* c-pragma.h (enum parma_omp_clause): Add entry for indirect clause.

gcc/c/
* c-decl.cc (c_decl_attributes): Add attribute for indirect
functions.
* c-lang.h (c_omp_declare_target_attr): Add indirect field.
* c-parser.cc (c_parser_omp_clause_name): Handle indirect clause.
(c_parser_omp_clause_indirect): New.
(c_parser_omp_all_clauses): Handle indirect clause.
(OMP_DECLARE_TARGET_CLAUSE_MASK): Add indirect clause to mask.
(c_parser_omp_declare_target): Handle indirect clause.  Emit error
message if device_type or indirect clauses used alone.  Emit error
if indirect clause used with device_type that is not 'any'.
(OMP_BEGIN_DECLARE_TARGET_CLAUSE_MASK): Add indirect clause to mask.
(c_parser_omp_begin): Handle indirect clause.
* c-typeck.cc (c_finish_omp_clauses): Handle indirect clause.

gcc/cp/
* cp-tree.h (cp_omp_declare_target_attr): Add indirect field.
* decl2.cc (cplus_decl_attributes): Add attribute for indirect
functions.
* parser.cc (cp_parser_omp_clause_name): Handle indirect clause.
(cp_parser_omp_clause_indirect): New.
(cp_parser_omp_all_clauses): Handle indirect clause.
(handle_omp_declare_target_clause): Add extra parameter.  Add
indirect attribute for indirect functions.
(OMP_DECLARE_TARGET_CLAUSE_MASK): Add indirect clause to mask.
(cp_parser_omp_declare_target): Handle indirect clause.  Emit error
message if device_type or indirect clauses used alone.  Emit error
if indirect clause used with device_type that is not 'any'.
(OMP_BEGIN_DECLARE_TARGET_CLAUSE_MASK): Add indirect clause to mask.
(cp_parser_omp_begin): Handle indirect clause.
* semantics.cc (finish_omp_clauses): Handle indirect clause.

gcc/
* lto-cgraph.cc (enum LTO_symtab_tags): Add tag for indirect
functions.
(output_offload_tables): Write indirect functions.
(input_offload_tables): read indirect functions.
* lto-section-names.h (OFFLOAD_IND_FUNC_TABLE_SECTION_NAME): New.
* omp-builtins.def (BUILT_IN_GOMP_TARGET_MAP_INDIRECT_PTR): New.
* omp-offload.cc (offload_ind_funcs): New.
(omp_discover_implicit_declare_target): Add functions marked with
'omp declare target indirect' to indirect functions list.
(omp_finish_file): Add indirect functions to section for offload
indirect functions.
(execute_omp_device_lower): Redirect indirect calls on target by
passing function pointer to BUILT_IN_GOMP_TARGET_MAP_INDIRECT_PTR.
(pass_omp_device_lower::gate): Run pass_omp_device_lower if
indirect functions are present on an accelerator device.
* omp-offload.h (offload_ind_funcs): New.
* tree-core.h (omp_clause_code): Add OMP_CLAUSE_INDIRECT.
* tree.cc (omp_clause_num_ops): Add entry for OMP_CLAUSE_INDIRECT.
(omp_clause_code_name): Likewise.
* tree.h (OMP_CLAUSE_INDIRECT_EXPR): New.
* config/gcn/mkoffload.cc (process_asm): Process offload_ind_funcs
section.  Count number of indirect functions.
(process_obj): Emit number of indirect functions.
* config/nvptx/mkoffload.cc (ind_func_ids, ind_funcs_tail): New.
(process): Emit offload_ind_func_table in PTX code.  Emit indirect
function names and count in image.
* config/nvptx/nvptx.cc (nvptx_record_offload_symbol): Mark
indirect functions in PTX code with IND_FUNC_MAP.

gcc/testsuite/
* c-c++-common/gomp/declare-target-7.c: Update expected error message.
* c-c++-common/gomp/declare-target-indirect-1.c: New.
* c-c++-common/gomp/declare-target-indirect-2.c: New.
* g++.dg/gomp/attrs-21.C (v12): Update expected error message.
* g++.dg/gomp/declare-target-indirect-1.C: New.
* gcc.dg/gomp/attrs-21.c (v12): Update expected error message.

include/
* gomp-constants.h (GOMP_VERSION): Increment to 3.
(GOMP_VERSION_SUPPORTS_INDIRECT_FUNCS): New.

libgcc/
* offloadstuff.c (OFFLOAD_IND_FUNC_TABLE_SECTION_NAME): New.
(__offload_ind_func_table): New.
(__offload_ind_funcs_end): New.
(__OFFLOAD_TABLE__): Add entries for indirect functions.

libgomp/
* Makefile.am (libgomp_la_SOURCES): Add target-indirect.c.
* Makefile.in: Regenerate.
* libgomp-plugin.h (GOMP_INDIRECT_ADDR_MAP): New define.
(GOMP_OFFLOAD_load_image): Add extra argument.
* libgomp.h (struct indirect_splay_tree_key_s): New.
(indirect_splay_tree_node, indirect_splay_tree,
indirect_splay_tree_key): New.
(indirect_splay_compare): New.
* libgomp.map (GOMP_5.1.1): Add GOMP_target_map_indirect_ptr.
* libgomp.texi (OpenMP 5.1): Update documentation on indirect
calls in target region and on indirect clause.
(Other new OpenMP 5.2 features): Add entry for virtual function calls.
* libgomp_g.h (GOMP_target_map_indirect_ptr): Add prototype.
* oacc-host.c (host_load_image): Add extra argument.
* target.c (gomp_load_image_to_device): If the GOMP_VERSION is high
enough, read host indirect functions table and pass to
load_image_func.
* config/accel/target-indirect.c: New.
* config/linux/target-indirect.c: New.
* config/gcn/team.c (build_indirect_map): Add prototype.
(gomp_gcn_enter_kernel): Initialize support for indirect
function calls on GCN target.
* config/nvptx/team.c (build_indirect_map): Add prototype.
(gomp_nvptx_main): Initialize support for indirect function
calls on NVPTX target.
* plugin/plugin-gcn.c (struct gcn_image_desc): Add field for
indirect functions count.
(GOMP_OFFLOAD_load_image): Add extra argument.  If the GOMP_VERSION
is high enough, build address translation table and copy it to target
memory.
* plugin/plugin-nvptx.c (nvptx_tdata): Add field for indirect
functions count.
(GOMP_OFFLOAD_load_image): Add extra argument.  If the GOMP_VERSION
is high enough, Build address translation table and copy it to target
memory.
* testsuite/libgomp.c-c++-common/declare-target-indirect-1.c: New.
* testsuite/libgomp.c-c++-common/declare-target-indirect-2.c: New.
* testsuite/libgomp.c++/declare-target-indirect-1.C: New.

8 months agoOpenMP: invoke.texi - mention C attribute syntax for -fopenmp(-simd)
Tobias Burnus [Tue, 7 Nov 2023 15:23:45 +0000 (16:23 +0100)]
OpenMP: invoke.texi - mention C attribute syntax for -fopenmp(-simd)

gcc/ChangeLog:

* doc/invoke.texi (-fopenmp, -fopenmp-simd): Adjust wording for
attribute syntax supported also in C.

8 months agoaarch64: Add a %Z operand modifier for SVE registers
Richard Sandiford [Tue, 7 Nov 2023 15:22:57 +0000 (15:22 +0000)]
aarch64: Add a %Z operand modifier for SVE registers

This patch adds a %Z operand modifier that prints registers as SVE z
registers.  The SME patches need this, but so do Tamar's patches.
I'm separating this out to unblock those.

We should probably document the [wxbhsdqZ] modifiers as
user-facing, but doing that for all of them is a separate patch.

gcc/
* config/aarch64/aarch64.cc (aarch64_print_operand): Add a %Z
modifier for SVE registers.

8 months agoc: Refer more consistently to C23 not C2X
Joseph Myers [Tue, 7 Nov 2023 14:19:36 +0000 (14:19 +0000)]
c: Refer more consistently to C23 not C2X

Continuing the move to refer to C23 in place of C2X throughout the
source tree, update documentation, diagnostics, comments, variable and
function names, etc., to use the C23 name.

Testsuite updates are left for a future patch, except for testcases
that test diagnostics that previously mentioned C2X (but in those
testcases, sometimes other comments are updated, not just the
diagnostic expectations).

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc/
* builtins.def (DEF_C2X_BUILTIN): Rename to DEF_C23_BUILTIN and
use flag_isoc23 and function_c23_misc.
* config/rl78/rl78.cc (rl78_option_override): Compare
lang_hooks.name with "GNU C23" not "GNU C2X".
* coretypes.h (function_c2x_misc): Rename to function_c23_misc.
* doc/cpp.texi (@code{__has_attribute}): Refer to C23 instead of
C2x.
* doc/extend.texi: Likewise.
* doc/invoke.texi: Likewise.
* dwarf2out.cc (highest_c_language, gen_compile_unit_die): Compare
against and return "GNU C23" language string instead of "GNU C2X".
* ginclude/float.h: Refer to C23 instead of C2X in comments.
* ginclude/stdint-gcc.h: Likewise.
* glimits.h: Likewise.
* tree.h: Likewise.

gcc/ada/
* gcc-interface/utils.cc (flag_isoc2x): Rename to flag_isoc23.

gcc/c-family/
* c-common.cc (flag_isoc2x): Rename to flag_isoc23.
(c_common_reswords): Use D_C23 instead of D_C2X.
* c-common.h: Refer throughout to C23 instead of C2X in comments.
(D_C2X): Rename to D_C23.
(flag_isoc2x): Rename to flag_isoc23.
* c-cppbuiltin.cc (builtin_define_float_constants): Use
flag_isoc23 instead of flag_isoc2x.  Refer to C23 instead of C2x
in comments.
* c-format.cc: Use STD_C23 instead of STD_C2X and flag_isoc23
instead of flag_isoc2x.  Refer to C23 instead of C2X in comments.
* c-format.h: Use STD_C23 instead of STD_C2X.
* c-lex.cc: Use warn_c11_c23_compat instead of warn_c11_c2x_compat
and flag_isoc23 instead of flag_isoc2x.  Refer to C23 instead of
C2X in diagnostics.
* c-opts.cc: Use flag_isoc23 instead of flag_isoc2x.  Refer to C23
instead of C2X in comments.
(set_std_c2x): Rename to set_std_c23.
* c.opt (Wc11-c23-compat): Use CPP(cpp_warn_c11_c23_compat)
CppReason(CPP_W_C11_C23_COMPAT) Var(warn_c11_c23_compat) instead
of CPP(cpp_warn_c11_c2x_compat) CppReason(CPP_W_C11_C2X_COMPAT)
Var(warn_c11_c2x_compat).

gcc/c/
* c-decl.cc: Use flag_isoc23 instead of flag_isoc2x and c23_auto_p
instead of c2x_auto_p.  Refer to C23 instead of C2X in diagnostics
and comments.
* c-errors.cc: Use flag_isoc23 instead of flag_isoc2x and
warn_c11_c23_compat instead of warn_c11_c2x_compat.  Refer to C23
instead of C2X in comments.
* c-parser.cc: Use flag_isoc23 instead of flag_isoc2x,
warn_c11_c23_compat instead of warn_c11_c2x_compat, c23_auto_p
instead of c2x_auto_p and D_C23 instead of D_C2X.  Refer to C23
instead of C2X in diagnostics and comments.
* c-tree.h: Refer to C23 instead of C2X in comments.
(struct c_declspecs): Rename c2x_auto_p to c23_auto_p.
* c-typeck.cc: Use flag_isoc23 instead of flag_isoc2x and
warn_c11_c23_compat instead of warn_c11_c2x_compat.  Refer to C23
instead of C2X in diagnostics and comments.

gcc/fortran/
* gfortran.h (gfc_real_info): Refer to C23 instead of C2X in
comment.

gcc/lto/
* lto-lang.cc (flag_isoc2x): Rename to flag_isoc23.

gcc/testsuite/
* gcc.dg/binary-constants-2.c: Refer to C23 instead of C2X.
* gcc.dg/binary-constants-3.c: Likewise.
* gcc.dg/bitint-23.c: Likewise.
* gcc.dg/bitint-26.c: Likewise.
* gcc.dg/bitint-27.c: Likewise.
* gcc.dg/c11-attr-syntax-1.c: Likewise.
* gcc.dg/c11-attr-syntax-2.c: Likewise.
* gcc.dg/c11-floatn-1.c: Likewise.
* gcc.dg/c11-floatn-2.c: Likewise.
* gcc.dg/c11-floatn-3.c: Likewise.
* gcc.dg/c11-floatn-4.c: Likewise.
* gcc.dg/c11-floatn-5.c: Likewise.
* gcc.dg/c11-floatn-6.c: Likewise.
* gcc.dg/c11-floatn-7.c: Likewise.
* gcc.dg/c11-floatn-8.c: Likewise.
* gcc.dg/c2x-attr-syntax-4.c: Likewise.
* gcc.dg/c2x-attr-syntax-6.c: Likewise.
* gcc.dg/c2x-attr-syntax-7.c: Likewise.
* gcc.dg/c2x-binary-constants-2.c: Likewise.
* gcc.dg/c2x-floatn-5.c: Likewise.
* gcc.dg/c2x-floatn-6.c: Likewise.
* gcc.dg/c2x-floatn-7.c: Likewise.
* gcc.dg/c2x-floatn-8.c: Likewise.
* gcc.dg/c2x-nullptr-4.c: Likewise.
* gcc.dg/c2x-qual-2.c: Likewise.
* gcc.dg/c2x-qual-3.c: Likewise.
* gcc.dg/c2x-qual-6.c: Likewise.
* gcc.dg/cpp/c11-warning-1.c: Likewise.
* gcc.dg/cpp/c11-warning-2.c: Likewise.
* gcc.dg/cpp/c11-warning-3.c: Likewise.
* gcc.dg/cpp/c2x-warning-2.c: Likewise.
* gcc.dg/cpp/gnu11-elifdef-3.c: Likewise.
* gcc.dg/cpp/gnu11-elifdef-4.c: Likewise.
* gcc.dg/cpp/gnu11-warning-1.c: Likewise.
* gcc.dg/cpp/gnu11-warning-2.c: Likewise.
* gcc.dg/cpp/gnu11-warning-3.c: Likewise.
* gcc.dg/cpp/gnu2x-warning-2.c: Likewise.
* gcc.dg/dfp/c11-constants-1.c: Likewise.
* gcc.dg/dfp/c11-constants-2.c: Likewise.
* gcc.dg/dfp/c2x-constants-2.c: Likewise.
* gcc.dg/dfp/constants-pedantic.c: Likewise.
* gcc.dg/pr30260.c: Likewise.
* gcc.dg/system-binary-constants-1.c: Likewise.

libcpp/
* directives.cc: Refer to C23 instead of C2X in diagnostics and
comments.
(STDC2X): Rename to STDC23.
* expr.cc: Use cpp_warn_c11_c23_compat instead of
cpp_warn_c11_c2x_compat and CPP_W_C11_C23_COMPAT instead of
CPP_W_C11_C2X_COMPAT.  Refer to C23 instead of C2X in diagnostics
and comments.
* include/cpplib.h: Refer to C23 instead of C2X in diagnostics and
comments.
(CLK_GNUC2X): Rename to CLK_GNUC23.
(CLK_STDC2X): Rename to CLK_STDC23.
(CPP_W_C11_C2X_COMPAT): Rename to CPP_W_C11_C23_COMPAT.
* init.cc: Use GNUC23 instead of GNUC2X, STDC23 instead of STDC2X
and cpp_warn_c11_c23_compat instead of cpp_warn_c11_c2x_compat.
* lex.cc (maybe_va_opt_error): Refer to C23 instead of C2X in
diagnostic.
* macro.cc (_cpp_arguments_ok): Refer to C23 instead of C2X in
comment.

8 months agotest: Fix FAIL of pr65518.c for RVV[PR112420]
Juzhe-Zhong [Tue, 7 Nov 2023 13:30:14 +0000 (21:30 +0800)]
test: Fix FAIL of pr65518.c for RVV[PR112420]

PR target/112420

gcc/testsuite/ChangeLog:

* gcc.dg/vect/pr65518.c: Fix check for RVV.

8 months agolibstdc++/112351 - deal with __gthread_once failure during locale init
Richard Biener [Mon, 6 Nov 2023 10:31:40 +0000 (11:31 +0100)]
libstdc++/112351 - deal with __gthread_once failure during locale init

The following makes the C++98 locale init path follow the way the
C++11 performs initialization.  This way we deal with pthread_once
failing, falling back to non-threadsafe initialization which, given we
initialize from the library, should be serialized by the dynamic
loader already.

PR libstdc++/112351
libstdc++-v3/
* src/c++98/locale.cc (locale::facet::_S_initialize_once):
Check whether _S_c_locale is already initialized.
(locale::facet::_S_get_c_locale): Always perform non-threadsafe
init when threadsafe init failed.

8 months agotestsuite/vect: Make check more accurate.
Robin Dapp [Tue, 7 Nov 2023 08:15:02 +0000 (09:15 +0100)]
testsuite/vect: Make check more accurate.

Similar to before this modifies a check so we do only match a
vectorization attempt if it succeeded.  On riscv we potentially try
several modes if which some may fail.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/vect-cond-reduc-4.c: Make check more accurate.

8 months agotestsuite: Change expectation for bb-slp-over-widen-n.c
Robin Dapp [Tue, 7 Nov 2023 07:58:07 +0000 (08:58 +0100)]
testsuite: Change expectation for bb-slp-over-widen-n.c

This patch makes sure we check for
  note: Basic block will be vectorized using SLP
instead of
  optimized: basic block
which will also match
  optimized: basic block part
of which there are many more in an RVV dump.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/bb-slp-over-widen-1.c: Change test expectation.
* gcc.dg/vect/bb-slp-over-widen-2.c: Ditto.

8 months agoRISC-V: Add RISC-V into vect_cmdline_needed
Juzhe-Zhong [Tue, 7 Nov 2023 11:46:34 +0000 (19:46 +0800)]
RISC-V: Add RISC-V into vect_cmdline_needed

Like all other targets, we add RISC-V into vect_cmdline_needed.

This patch fixes following FAILs:

FAIL: gcc.dg/tree-ssa/gen-vect-11b.c scan-tree-dump-times vect "vectorized 0 loops" 1
FAIL: gcc.dg/tree-ssa/gen-vect-11c.c scan-tree-dump-times vect "vectorized 0 loops" 1
FAIL: gcc.dg/tree-ssa/gen-vect-26.c scan-tree-dump-times vect "Alignment of access forced using peeling" 1
FAIL: gcc.dg/tree-ssa/gen-vect-28.c scan-tree-dump-times vect "Alignment of access forced using peeling" 1

gcc/testsuite/ChangeLog:

* lib/target-supports.exp: Add RISC-V.

8 months agotestsuite: check for and use -mno-strict-align where needed
Alexandre Oliva [Tue, 7 Nov 2023 11:02:03 +0000 (08:02 -0300)]
testsuite: check for and use -mno-strict-align where needed

Various tests fail on powerpc if the toolchain is configured to enable
-mstrict-align by default.  This patch introduces -mno-strict-align on
tests found to fail that way, when the target supports this option.

I suppose !non_strict_align could be used to skip tests, instead of or
in addition to this tweak, and that might be desirable if they still
fail on targets that do no support -mno-strict-align, but I haven't
observed such scenarios.

The p9-vec-length tests expect vectorization on loop bodies and
epilogues that reference arrays that are not known to be more aligned
than their small element types.

Though VSX vectors work best with 32- or 64-bit alignment, unaligned
vector loads and stores are expected by the tests.  However, with
-mstrict-align by default, vector loads and stores not known to be
aligned end up open coded, which doesn't match the asm output
expectations coded in the tests.

for  gcc/ChangeLog

* doc/sourcebuild.texi (opt_mstrict_align): New target.

for  gcc/testsuite/ChangeLog

* lib/target-supports.exp
(check_effective_target_opt_mstrict_align): New.
* gcc.dg/strlenopt-80.c: Add -mno-strict-align if supported.
* gcc.target/powerpc/prefix-ds-dq.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-1.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-2.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-3.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-4.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-5.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-6.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-7.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-8.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-run-1.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-run-2.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-run-3.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-run-4.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-run-5.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-run-6.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-run-7.c: Likewise.
* gcc.target/powerpc/p9-vec-length-epil-run-8.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-1.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-2.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-3.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-4.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-5.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-6.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-7.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-8.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-run-1.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-run-2.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-run-3.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-run-4.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-run-5.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-run-6.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-run-7.c: Likewise.
* gcc.target/powerpc/p9-vec-length-full-run-8.c: Likewise.

8 months agoRISC-V: Use stdint-gcc.h in xtheadmemidx-helpers.h
Christoph Müllner [Tue, 7 Nov 2023 09:43:08 +0000 (10:43 +0100)]
RISC-V: Use stdint-gcc.h in xtheadmemidx-helpers.h

stdint.h can be replaced with stdint-gcc.h to resolve some missing
system headers in non-multilib installations.

Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu>
gcc/testsuite/ChangeLog:

* gcc.target/riscv/xtheadmemidx-helpers.h:
Replace stdint.h with stdint-gcc.h.

8 months agoRISC-V: Add ABI requirement for XTheadFMemIdx tests
Christoph Müllner [Mon, 6 Nov 2023 07:56:17 +0000 (08:56 +0100)]
RISC-V: Add ABI requirement for XTheadFMemIdx tests

The XTheadFMemIdx tests set the required ABI for RV32, but not
for RV64, which has the effect that the tests are expected to
succeed for RV64/LP64.  Let's set the ABI to LP64D in these
tests to clarify the requirements.

Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu>
gcc/testsuite/ChangeLog:

* gcc.target/riscv/xtheadfmemidx-index-update.c: Add ABI.
* gcc.target/riscv/xtheadfmemidx-index-xtheadbb-update.c: Likewise.
* gcc.target/riscv/xtheadfmemidx-index-xtheadbb.c: Likewise.
* gcc.target/riscv/xtheadfmemidx-index.c: Likewise.
* gcc.target/riscv/xtheadfmemidx-uindex-update.c: Likewise.
* gcc.target/riscv/xtheadfmemidx-uindex-xtheadbb-update.c: Likewise.
* gcc.target/riscv/xtheadfmemidx-uindex-xtheadbb.c: Likewise.
* gcc.target/riscv/xtheadfmemidx-uindex.c: Likewise.

8 months agoada: Fix debug info for aliased packed array with unconstrained nominal subtype
Eric Botcazou [Tue, 17 Oct 2023 17:20:26 +0000 (19:20 +0200)]
ada: Fix debug info for aliased packed array with unconstrained nominal subtype

The front-end now rewrites it as a renaming when it is initialized with a
function call and the same processing must be applied in the renaming case
as in the regular case for this kind of special objects.

gcc/ada/

* gcc-interface/decl.cc (gnat_to_gnu_entity) <E_Variable>: Apply the
specific rewriting done for an aliased object with an unconstrained
array nominal subtype in the renaming case too.

8 months agoada: Fix spurious -Wstringop-overflow with link time optimization
Eric Botcazou [Thu, 12 Oct 2023 12:26:46 +0000 (14:26 +0200)]
ada: Fix spurious -Wstringop-overflow with link time optimization

It comes from an incomplete optimization performed by LTO that is caused by
an obsolete transformation done in Gigi, which is redundant with the common
uniquization of constant CONSTRUCTORs now performed during gimplification.

gcc/ada/

* gcc-interface/trans.cc (gnat_gimplify_expr) <CALL_EXPR>: Delete.

8 months agoada: Compiler crash on early alignment clause
Bob Duff [Wed, 18 Oct 2023 13:54:06 +0000 (09:54 -0400)]
ada: Compiler crash on early alignment clause

This patch fixes a bug: if "for T'Alignment use..." is followed
by "for T use (<enum rep>);" the compiler crashes. A workaround is
to move the alignment clause after the enumeration rep clause.

gcc/ada/

* sem_ch13.ads (Set_Enum_Esize): Do not set alignment.
* sem_ch13.adb (Set_Enum_Esize): Do not set alignment. Archaeology
seems to show that this line of code dates from when "Alignment =
0" meant "the Alignment is not known at compile time" and "the
Alignment is not yet known at compile time" as well as "the
Alignment is zero". In any case, it seems to be unnecessary, and
in this case harmful, because gigi would crash. Alignment_Clause
is set (because there is one), so gigi would query the Alignment,
but Alignment was destroyed.

8 months agoada: Update the logo in the gnat doc
Julien Bortolussi [Thu, 12 Oct 2023 15:50:15 +0000 (17:50 +0200)]
ada: Update the logo in the gnat doc

Update the logo and the background color in the top right corner of the
GNAT User’s Guide for Native Platforms

gcc/ada/

* doc/share/conf.py: Changed the background color and the logo.

8 months agoada: Fix incorrect resolution of overloaded function call in instance
Eric Botcazou [Sun, 15 Oct 2023 11:00:10 +0000 (13:00 +0200)]
ada: Fix incorrect resolution of overloaded function call in instance

The problem occurs when the function call is the operand of an equality
operator, the type used to do the comparison is declared outside of the
generic construct but visible inside it, and this generic construct also
declares two functions with the same profile except for the result type,
one result type being the aforementioned type, the other being derived
from this type but not visible inside the generic construct.  When the
second operand is either a literal or also overloaded, the call may be
resolved to the second function instead of the first in instances.

gcc/ada/

* gen_il-fields.ads (Opt_Field_Enum): Add Compare_Type.
* gen_il-gen-gen_nodes.adb (N_Op_Eq): Likewise.
(N_Op_Ge): Likewise.
(N_Op_Gt): Likewise.
(N_Op_Le): Likewise.
(N_Op_Lt): Likewise.
(N_Op_Ne): Likewise.
* sinfo.ads (Compare_Type): Document new field.
* sem_ch4.adb (Analyze_Comparison_Equality_Op): If the entity is
already present, set the Compare_Type on overloaded operands if it
is present on the node.
* sem_ch12.adb (Check_Private_View): Look into the Compare_Type
instead of the Etype for comparison operators.
(Copy_Generic_Node): Remove obsolete code for comparison
operators.
(Save_Global_References.Save_References): Do not walk into the
descendants of N_Implicit_Label_Declaration nodes.
(Save_Global_References.Set_Global_Type): Look into the
Compare_Type instead of the Etype for comparison operators.
* sem_res.adb (Resolve_Comparison_Op): Set Compare_Type.
(Resolve_Equality_Op): Likewise.

8 months agoada: Fix Ada.Directories.Modification_Time on Windows
Ronan Desplanques [Mon, 16 Oct 2023 15:09:25 +0000 (17:09 +0200)]
ada: Fix Ada.Directories.Modification_Time on Windows

Before this patch, Ada.Directories.Modification_Time called
GetFileAttributesExA under the hood on Windows. That would sometimes
fail to work with files whose names were non-ASCII.

This patch replaces the call to GetFileAttributesExA with a call to
GetFileAttributesEx preceded by an encoding scheme conversion, as is
done in other functions of the run-time library. This fixes the issues
that were observed with the previous implementations.

gcc/ada/

* adaint.c (__gnat_file_time): Fix Windows version.

8 months agoada: Elide temporary for aliased array with unconstrained nominal subtype
Eric Botcazou [Mon, 16 Oct 2023 19:16:38 +0000 (21:16 +0200)]
ada: Elide temporary for aliased array with unconstrained nominal subtype

When the array is initialized with the result of a call to a function whose
result type is unconstrained, then the result is allocated with its bounds,
so the array can be rewritten as a renaming of the result in this case too.

gcc/ada/

* exp_ch3.adb (Expand_N_Object_Declaration): Fold initialization
expression of Nominal_Subtype_Is_Constrained_Array constant into
the computation of Rewrite_As_Renaming and remove the constant.
Set it to True for an aliased array with unconstrained nominal
subtype if the subtype of the expression is also unconstrained.

8 months agoada: Fix expansion of type aspects with handling of aspects
Piotr Trojanek [Mon, 16 Oct 2023 15:14:46 +0000 (17:14 +0200)]
ada: Fix expansion of type aspects with handling of aspects

The new handling of aspects stores the aspect expression as the
Expression_Copy of the aspect and not as the Entity of the aspect
identified. This has been changed for most of the aspects, but not for
Type_Invariant and Default_Initial_Condition, which have custom
expansion. Apparently this change only affects GNATprove and not GNAT.

gcc/ada/

* exp_util.adb (Add_Own_DIC, Add_Own_Invariants): Store the aspect
expression in Expression_Copy.

8 months agoada: Rename Is_Limited_View to reflect actual query
Yannick Moy [Mon, 16 Oct 2023 10:24:46 +0000 (12:24 +0200)]
ada: Rename Is_Limited_View to reflect actual query

Function Sem_Aux.Is_Limited_View returns whether the type is
"inherently limited" in a slightly different way from the "immutably
limited" definition in Ada 2012. Rename for clarity.

gcc/ada/

* exp_aggr.adb: Apply the renaming.
* exp_ch3.adb: Same.
* exp_ch4.adb: Same.
* exp_ch6.adb: Same.
* exp_ch7.adb: Same.
* exp_util.adb: Same.
* freeze.adb: Same.
* sem_aggr.adb: Same.
* sem_attr.adb: Same.
* sem_aux.adb: Alphabetize Is_Limited_Type. Rename.
* sem_aux.ads: Same.
* sem_ch3.adb: Apply the renaming.
* sem_ch6.adb: Same.
* sem_ch8.adb: Same.
* sem_prag.adb: Same.
* sem_res.adb: Same.
* sem_util.adb: Same.

8 months agoada: Implement Aspects as fields under nodes
Viljar Indus [Wed, 26 Jul 2023 10:29:14 +0000 (13:29 +0300)]
ada: Implement Aspects as fields under nodes

In the previous implementation Aspect Specifications were
stored in a separate table and not directly under each node.
This implementation included a lot of extra code that needed
to be maintained manually.

The new implementation stores Aspect_Specfications as a syntactic
field under each node. This removes the extra code that was needed
to store, traverse and clone aspects for nodes.

gcc/ada/

* aspects.adb (Exchange_Aspects): Removed. This method was
typically called after a Rewrite method. Now since the Rewrite
switches the aspects between the new and the old node it is no
longer needed.
(Has_Aspects): Converted to a utility method that performs the same
before as the previous Has_Aspects field did. Meaning it shows whether
a node actually has aspects or not.
(Copy_Aspects): New utility method that performs a deep copy of the
From nodes aspects.
(Aspect_Specfications): Removed. No longer needed. Replaced
by the primitive operation for the Aspect_Specification fields.
(Set_Aspect_Specifications): Likewise.
(Aspect_Specifications_Hash_Table): Remove the table and all the
utility methods for storing the old aspects.
* aspects.ads: Likewise.
* atree.adb (Copy_Separate_Tree): Remove custom code for aspects.
(New_Copy): Likewise.
(Replace): Likewise.
(Rewrite): Likewise.
* exp_ch3.adb (Expand_N_Object_Declaration): Keep the aspects from the old node.
* exp_ch6.adb (Validate_Subprogram_Calls): Previously aspects were ignored
because they were not on the tree. Explicitly ignore them here
when traversing the tree.
* exp_unst.adb (Build_Tables): Likewise
* gen_il-fields.ads: Remove Has_Aspects and add
Aspect_Specifications fields.
* gen_il-gen-gen_nodes.adb: Add Aspect_Specification fields
for all nodes that can have aspects. Additionally add
Expression_Copy for Aspect_Speficiations to avoid reusing
the Associated_Node for generic instantiation and aspect
analysis.
* ghost.adb (Remove_Ignored_Ghost_Node): Remove call to Remove_Aspects.
The rewritten node is a Null_Statement that cannot have aspects
and there is not anything to gain from removing them from the
Orignal_Node of N since it technically is not part of the active
tree.
* inline.adb (Process_Formals_In_Aspects): Simplify code for node traversal.
* par-ch13.adb: Avoid setting the parent explicitly for the
Aspect_Specifications list. This is done explicitly in the setter.
* par-ch6.adb: Likewise.
* par_sco.adb (Traverse_Aspects): Handle early return.
* sem_ch10.adb: Simplify code for Analyze_Aspect_Specifications.
* sem_ch11.adb: Likewise.
* sem_ch12.adb (Analyze_Formal_Derived_Interface_Type): Keep the aspects from
the orignal node after rewrite.
(Analyze_Formal_Derived_Type): Likewise.
(Analyze_Formal_Interface_Type): Likewise.
(Analyze_Formal_Object_Declaration): Simplify code for
Analyze_Aspect_Specifications.
(Analyze_Formal_Package_Declaration): Likewise.
(Analyze_Formal_Subprogram_Declaration): Likewise.
(Analyze_Formal_Type_Declaration): Likewise.
(Analyze_Generic_Package_Declaration): Remove Exchange_Aspects.
The new node already has the correct aspects after the rewrite.
Also simplify code for Analyze_Aspect_Specifications.
(Analyze_Generic_Subprogram_Declaration): Likewise.
(Analyze_Package_Instantiation): Simplify code for
Analyze_Aspect_Specifications.
(Build_Instance_Compilation_Unit_Nodes): Remove explicit copy of
aspects that is no longer needed.
(Save_References): Update the traversal code to handle
Aspect_Specifications in the tree.
(Copy_Generic_Node): Remove explicit copy for aspects. New_Copy
took care of that already.
* sem_ch13.adb (Analyze_Aspect_Specifications): Add early return to simplify
code for its calls. Avoid reusing the Entity(Associated_Node)
field for storing the original expression. Instead use the
new Expression_Copy field since Entity(Associated_Node) is
also used in generic instantiation.
(Analyze_Aspects_On_Subprogram_Body_Or_Stub): Simlify call
to Analyze_Aspect_Specifications.
(Check_Aspect_At_End_Of_Declarations): Use Expression_Copy
instead of Entity.
(Check_Aspect_At_Freeze_Point): Likewise.
* sem_ch3.adb: Simplify calls to Analyze_Aspect_Specifications.
* sem_ch6.adb (Analyze_Abstract_Subprogram_Declaration): Simplify call to
Analyze_Aspect_Specifications.
(Analyze_Expression_Function): Keep the aspects from the
original node after a rewrite.
(Analyze_Generic_Subprogram_Body): Remove Exchange aspects
that is no longer needed. Simplify call to
Analyze_Aspect_Specifications.
(Analyze_Null_Procedure): Keep the aspects from the
original node after a rewrite.
(Analyze_Subprogram_Body_Helper): Simplify calls to
Analyze_Aspect_Specifications.
(Analyze_Subprogram_Declaration): Likewise.
* sem_ch7.adb (Analyze_Package_Body_Helper): Remove Exchange aspects
that is no longer needed. Simplify call to
Analyze_Aspect_Specifications.
(Analyze_Package_Declaration): Simplify call to
Analyze_Aspect_Specifications.
(Analyze_Private_Type_Declaration): Likewise.
* sem_ch8.adb: Simplify calls to
Analyze_Aspect_Specifications.
* sem_ch9.adb (Analyze_Entry_Body): Simplify call to
Analyze_Aspects_On_Subprogram_Body_Or_Stub.
(Analyze_Entry_Declaration): Simplify call to
Analyze_Aspect_Specifications.
(Analyze_Protected_Body): Likewise.
(Analyze_Protected_Type_Declaration): Likewise.
(Analyze_Single_Protected_Declaration): Keep the aspects from
the original node after a rewrite. Simplify call to
Analyze_Aspect_Specifications.
(Analyze_Single_Task_Declaration): Likewise.
(Analyze_Task_Body): Simplify call to
Analyze_Aspect_Specifications.
(Analyze_Task_Type_Declaration): Simplify calls to
Analyze_Aspect_Specifications.
* sem_dim.adb: Remove explicitly setting the parents
for the Aspect_Specification list.
* sem_disp.adb: Remove the with that is no longer
required since Aspect_Specifications is a node operation now.
* sem_util.adb (Copy_Node_With_Replacement): Remove explicit code for aspects.
* treepr.adb (Print_Field): Remove the version that was used for printing
aspects.
(Print_Node): Remove aspect specific code.

8 months agoada: Minor tweaks for comparison operators
Eric Botcazou [Fri, 13 Oct 2023 13:41:37 +0000 (15:41 +0200)]
ada: Minor tweaks for comparison operators

No functional changes.

gcc/ada/

* gen_il-gen-gen_nodes.adb (N_Op_Boolean): Fix description.
* sem_ch4.adb (Analyze_Comparison_Equality_Op): Tidy up.
* sem_ch12.adb (Copy_Generic_Node): Use N_Op_Compare subtype.

8 months agoada: Cleanup "not Present" on List_Id
Piotr Trojanek [Fri, 13 Oct 2023 11:28:00 +0000 (13:28 +0200)]
ada: Cleanup "not Present" on List_Id

gcc/ada/

* exp_ch6.adb, exp_disp.adb, sem_ch13.adb, sem_ch3.adb: Fix newly
detected violations.

8 months agoada: Cleanup more "not Present"
Piotr Trojanek [Fri, 13 Oct 2023 08:40:12 +0000 (10:40 +0200)]
ada: Cleanup more "not Present"

We had a GNATcheck rule that suggests replacing "not Present (...)" with
"No (...)", but it only detected calls with a parameter of type Node_Id.
Now this rules also detects parameters of type Elist_Id.

gcc/ada/

* sem_ch3.adb, sem_ch4.adb, sem_eval.adb: Fix newly detected
violations.

8 months agoada: Fix documentation of -gnatwc
Ronan Desplanques [Thu, 12 Oct 2023 09:31:40 +0000 (11:31 +0200)]
ada: Fix documentation of -gnatwc

-gnatwc has been correctly emitting warnings for expressions outside
of tests for a while, but its documentation in the user's guide had
never been updated to reflect that. Also, the documentation used
"conditional expressions" to designate boolean expressions, but
"conditional expressions" has been defined by Ada 2012 to designate
if expressions and case expressions. This patch fixes those issues.

gcc/ada/

* doc/gnat_ugn/building_executable_programs_with_gnat.rst: Fix
-gnatwc documentation.
* gnat_ugn.texi: Regenerate.

8 months agoada: New Local_Restrictions and User_Aspect aspects.
Steve Baird [Thu, 10 Aug 2023 21:11:22 +0000 (14:11 -0700)]
ada: New Local_Restrictions and User_Aspect aspects.

A GNAT-defined aspect, Local_Restrictions, is defined.
This provides a way of enforcing a given restriction for an individual
subprogram (and its call-closure) without requiring that the entire
program satisfy the restriction.
A GNAT-defined aspect, User_Aspect, is defined.
This (along with the new User_Aspect_Definition configuration pragma) provides
a way of naming a set of aspect specifications which can then be applied
to multiple declarations without textual repetition of the set.

gcc/ada/

* local_restrict.ads: A new package. Declares Local_Restriction
enumeration type and provides operations to check for local
restriction violations.
* local_restrict.adb: Corresponding package body. Replace "not
Present (X)" calls with "No (X)" calls.
* aspects.ads: Add a new enumeration elements,
Aspect_Local_Restrictions and Aspect_User_Aspect, to the Aspect_Id
enumeration type. Update Aspect_Id-indexed aggregates. Add nested
package User_Aspect_Support to manage two pieces of state. One is
a map from identifiers to User_Aspect_Definition pragmas (updated
when such a pragma is encountered). The other is an
access-to-subprogram variable that is introduced in order to keep
the bulk of semantics out of the closure of package Aspects while
allowing a call from aspects.adb to the sem_ch13 procedure that
analyzes a User_Aspect aspect specification.
* aspects.adb (Find_Aspect): Cope with a case of a block statement
with an empty parent. It is not clear whether this is papering
over a compiler bug. Add indirect call through the aforementioned
access-to-subprogram variable when Find_Aspect enounters an
unanalyzed User_Aspect aspect specification. If Find_Aspect is
called looking for aspect Foo, then a User_Aspect specification
might generate (during analysis) a Foo aspect specification. So
the Find_Aspect call needs to trigger that analysis if it has not
already taken place. Provide a body for package
User_Aspect_Support. Replace "not Present (X)" call with "No (X)"
call.
* freeze.adb (Freeze_Subprogram): Check local restriction
compatibility when a dispatching operation is overridden.
* par-prag.adb: Add support for parsing a User_Aspect_Definition
pragma.
* restrict.ads: We'd like to have the body of package Restrict
include a call to a procedure declared in package Local_Restrict.
Doing that in the obvious way pulls most of semantics into the
closure of package Restrict, and that turns out to cause problems.
So we introduce a level of indirection and instead call through an
access-to-subprogram value. In this unit, we declare the
access-to-subprogram type and object.
* restrict.adb (Check Restriction): When a construct is
encountered that could violate a global restriction (depending on
whether the given restriction is in effect), Check_Restriction is
called. At this point, we also check for a violation of any
corresponding local restriction that is in effect. For reasons
described above, this check is performed via an indirect call.
* sem_ch13.ads (Parse_Aspect_Local_Restrictions): A new function,
similar to the existing Parse_Aspect_Xxx subprograms.
* sem_ch13.adb: Perform semantic analysis of Local_Restrictions
and User_Aspect aspect specifications. Declare and call new
Validate_Aspect_Local_Restrictions and
Analyze_User_Aspect_Aspect_Specification procedures (a reference
to the latter is registered during package elaboration). In
Analyze_Aspect_Specifications, do not set the Analyzed flag of a
User_Aspect aspect specification. Replace "not Present (X)" call
with "No (X)" call. Replace 'Image with 'Img in a case where the
prefix of the attribute reference is an object; this is done to
accomodate older compilers.
* sem_ch6.adb (Check_Subtype_Conformant): Include in subtype
conformance check a check for overriding-related compatibility of
local restrictions.
* sem_ch8.adb (Analyze_Subprogram_Renaming): In the case of an
instance of a generic that takes a formal subprogram, check that
formal and actual are compatible with respect to local
restrictions.
* sem_prag.adb: Add support for User_Aspect_Definition pragma.
* sem_res.adb (Resolve_Call): Check caller/callee compatibility
with respect to local restrictions.
* snames.ads-tmpl: Add Name_Local_Restrictions, Name_User_Aspect,
and Name_User_Aspect_Definition constants.
* doc/gnat_rm/implementation_defined_aspects.rst: Document new
aspects.
* doc/gnat_rm/implementation_defined_pragmas.rst: Document new
pragma.
* doc/gnat_ugn/the_gnat_compilation_model.rst: Add
User_Aspect_Definition to list of GNAT pragmas.
* gcc-interface/Make-lang.in: Add local_restrict.o.
* gnat-style.texi: Regenerate.
* gnat_rm.texi: Regenerate.
* gnat_ugn.texi: Regenerate.

8 months agoada: Error in prefix-notation call
Bob Duff [Thu, 12 Oct 2023 19:52:27 +0000 (15:52 -0400)]
ada: Error in prefix-notation call

The compiler gives a wrong error for a call of the form X.Y(...)
when Y is inherited indirectly via an interface.

gcc/ada/

* sem_ch4.adb (Is_Private_Overriding): Return True in the case
where a primitive operation is publicly inherited but privately
overridden.

8 months agoada: Remove duplicated code for expansion of packed array assignments
Piotr Trojanek [Tue, 3 Oct 2023 17:43:04 +0000 (19:43 +0200)]
ada: Remove duplicated code for expansion of packed array assignments

Expansion of assignments to packed array objects has two cases and
had duplicated code for both these cases.

gcc/ada/

* exp_pakd.adb (Expand_Bit_Packed_Element_Set): Remove code from the
ELSE branch, because it was is identical to code before the IF
statements itself.

8 months agoada: Simplify expansion of packed array assignments
Piotr Trojanek [Tue, 3 Oct 2023 17:04:16 +0000 (19:04 +0200)]
ada: Simplify expansion of packed array assignments

When expanding assignment to a packed array object, e.g. a formal
parameter with mode OUT that might have unconstrained type, we took the
component type and component size from the constrained actual subtype.
It is simpler to take these properties from the nominal type of the
assigned object.

Semantics is unaffected, because constraining the array doesn't change
the type or size of the array components.

gcc/ada/

* exp_pakd.adb (Expand_Bit_Packed_Element_Set): Change Ctyp and Csiz
from variables to constants and compute them using the nominal type
of the assigned array object.

8 months agoada: Fix extra whitespace after END keywords
Piotr Trojanek [Tue, 3 Oct 2023 13:00:12 +0000 (15:00 +0200)]
ada: Fix extra whitespace after END keywords

Style cleanup.

gcc/ada/

* exp_pakd.adb, libgnarl/s-osinte__android.ads,
libgnarl/s-osinte__linux.ads, libgnarl/s-osinte__qnx.ads,
libgnarl/s-osinte__rtems.ads, libgnat/s-gearop.adb,
libgnat/s-poosiz.adb, sem_util.adb: Fix style.

8 months agoada: Avoid extra conversion in expansion of packed array assignments
Piotr Trojanek [Tue, 3 Oct 2023 19:33:32 +0000 (21:33 +0200)]
ada: Avoid extra conversion in expansion of packed array assignments

Expansion of assignments to packed array objects with string literals on
the right-hand side, created an unnecessary conversion, i.e.:

  ... :=
    component_type
      (declare
         temp : component_type := "string_literal";
       begin
         temp)

Now the expansion omits the outer type conversion.

Cleanup; behavior is unaffected.

gcc/ada/

* exp_pakd.adb (Expand_Bit_Packed_Element_Set): Simplify handling of
assignments with string literals.

8 months agoada: Simplify handling of known values in expansion of packed arrays
Piotr Trojanek [Tue, 3 Oct 2023 19:28:16 +0000 (21:28 +0200)]
ada: Simplify handling of known values in expansion of packed arrays

If an expression value is not known at compile time, it can be
represented with No_Uint and doesn't require a dedicated flag.

Code cleanup; behavior is unaffected.

gcc/ada/

* exp_pakd.adb (Expand_Bit_Packed_Element_Set): Remove Rhs_Val_Known;
represent unknown value by assigning Rhs_Val with No_Uint.

8 months agoada: Change local variables to constants in expansion of packed arrays
Piotr Trojanek [Tue, 3 Oct 2023 19:08:29 +0000 (21:08 +0200)]
ada: Change local variables to constants in expansion of packed arrays

Cleanup; semantics is unaffected.

gcc/ada/

* exp_pakd.adb
(Expand_Bit_Packed_Element_Set): Change local Decl object from
variable to constant.
(Setup_Inline_Packed_Array_Reference): Likewise for Csiz.

8 months agoada: Fix style in declaration of routine for expansion of packed arrays
Piotr Trojanek [Tue, 3 Oct 2023 19:06:41 +0000 (21:06 +0200)]
ada: Fix style in declaration of routine for expansion of packed arrays

Style cleanup.

gcc/ada/

* exp_pakd.adb (Setup_Inline_Packed_Array_Reference): Remove extra
whitespace from the list of parameters.

8 months agoada: Cleanup getting of actual subtypes
Piotr Trojanek [Mon, 25 Sep 2023 22:17:26 +0000 (00:17 +0200)]
ada: Cleanup getting of actual subtypes

Avoid potentially unnecessary call to Etype.

gcc/ada/

* sem_util.adb (Get_Actual_Subtype_If_Available): Only call Etype
when necessary.

8 months agoada: Fix handling of actual subtypes for expanded names
Piotr Trojanek [Mon, 25 Sep 2023 22:17:12 +0000 (00:17 +0200)]
ada: Fix handling of actual subtypes for expanded names

gcc/ada/

* sem_util.adb
(Get_Actual_Subtype,Get_Actual_Subtype_If_Available): Fix handling
of expanded names.

8 months agoada: Simplify code for Ignore_Style_Checks_Pragmas
Viljar Indus [Wed, 11 Oct 2023 10:53:10 +0000 (13:53 +0300)]
ada: Simplify code for Ignore_Style_Checks_Pragmas

gcc/ada/

* sem_prag.adb: (Analyze_Pragma): Reduce the number of nested if
statements.

8 months agoada: Fix scope of semantic style_check pragmas
Viljar Indus [Fri, 6 Oct 2023 10:12:29 +0000 (13:12 +0300)]
ada: Fix scope of semantic style_check pragmas

Restore the original state of Style_Check pragmas before analyzing
each compilation unit to avoid Style_Check pragmas from unit affecting
the style checks of a different unit.

gcc/ada/

* sem_ch10.adb: (Analyze_Compilation_Unit): Restore the orignal
state of style check pragmas at the end of the analysis.

8 months agoada: Fix internal error on address of element of packed array component
Eric Botcazou [Tue, 10 Oct 2023 09:13:59 +0000 (11:13 +0200)]
ada: Fix internal error on address of element of packed array component

This occurs when the component is part of a discriminated type and its
offset depends on a discriminant, the problem being that the front-end
generates an incomplete Bit_Position attribute reference.

gcc/ada/

* exp_pakd.adb (Get_Base_And_Bit_Offset): Use the full component
reference instead of just the selector name for 'Bit_Position.

8 months agoRISC-V regression test: Fix FAIL bb-slp-cond-1.c for RVV
Juzhe-Zhong [Tue, 7 Nov 2023 08:02:43 +0000 (16:02 +0800)]
RISC-V regression test: Fix FAIL bb-slp-cond-1.c for RVV

Previously, in this patch: https://gcc.gnu.org/pipermail/gcc-patches/2023-November/635392.html
I use vect64 && vect128 to represent both RVV and AMDGCN. However, it caused additional FAIL on ARM SVE.
I don't know why ARM SVE vect64 is set as true since their AdvSIMD is 128bit vector and they don't use 64bit vector.

So, here we leverage current AMDGCN solution, just add RISCV like AMDGCN.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/bb-slp-cond-1.c: Add riscv.

8 months agors6000,testcase: Add require-effective-target has_arch_ppc64 to pr106550_1.c
Jiufu Guo [Tue, 7 Nov 2023 07:19:36 +0000 (15:19 +0800)]
rs6000,testcase: Add require-effective-target has_arch_ppc64 to pr106550_1.c

With the latest trunk, case pr106550_1.c runs with failure on ppc under -m32.
Previously, this case failed with ICE due to PR111971. Now, this emission is
exposed.
While, the case is testing 64bit constant building. So, "has_arch_ppc64"
is required.

PR target/112340

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/pr106550_1.c: Add has_arch_ppc64 target require.

8 months agoRISC-V: Fixed failed rvv combine testcases
Lehua Ding [Tue, 7 Nov 2023 07:33:20 +0000 (15:33 +0800)]
RISC-V: Fixed failed rvv combine testcases

This patch fixed the fellowing failed testcases on the trunk:
FAIL: gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-2.c scan-assembler-times \\tvfwredusum\\.vs\\tv[0-9]+,v[0-9]+,v[0-9]+,v0\\.t 2
...
FAIL: gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-2.c scan-assembler-times \\tvwredsumu\\.vs\\tv[0-9]+,v[0-9]+,v[0-9]+,v0\\.t 3
...

The reason for these failed testcases is the introduce of .VCOND_MASK_LEN
in midend for other bugfix and further leads to a new vcond_mask_len rtl
pattern after expand. So we need add new combine patterns handle this case.

Consider this code:

int16_t foo (int8_t *restrict a, int8_t *restrict pred)
{
  int16_t sum = 0;
  for (int i = 0; i < 16; i += 1)
    if (pred[i])
      sum += a[i];
  return sum;
}

Before this patch:
foo:
        vsetivli        zero,16,e8,m1,ta,ma
        vle8.v  v0,0(a1)
        vsetvli a5,zero,e8,m1,ta,ma
        vmsne.vi        v0,v0,0
        vsetvli zero,zero,e16,m2,ta,ma
        li      a3,0
        vmv.v.i v2,0
        vsetivli        zero,16,e16,m2,ta,ma
        vle8.v  v6,0(a0),v0.t
        vmv.s.x v1,a3
        vsetvli a5,zero,e16,m2,ta,ma
        vsext.vf2       v4,v6
        vsetivli        zero,16,e16,m2,tu,ma
        vmerge.vvm      v2,v2,v4,v0
        vsetvli a5,zero,e16,m2,ta,ma
        vredsum.vs      v2,v2,v1
        vmv.x.s a0,v2
        slliw   a0,a0,16
        sraiw   a0,a0,16
        ret

After this patch:
foo:
vsetivli zero,16,e16,m2,ta,ma
li a5,0
vle8.v v0,0(a1)
vmv.s.x v1,a5
vsetvli zero,zero,e8,m1,ta,ma
vmsne.vi v0,v0,0
vle8.v v2,0(a0),v0.t
vwredsum.vs v1,v2,v1,v0.t
vsetvli zero,zero,e16,m1,ta,ma
vmv.x.s a0,v1
slliw a0,a0,16
sraiw a0,a0,16
ret

Combine the vsext.vf2, vmerge.vvm, and vredsum.vs instructions while
reducing the corresponding vsetvl instructions.

gcc/ChangeLog:

* config/riscv/autovec-opt.md (*cond_len_<optab><v_double_trunc><mode>):
New combine pattern.
(*cond_len_<optab><v_quad_trunc><mode>): Ditto.
(*cond_len_<optab><v_oct_trunc><mode>): Ditto.
(*cond_len_extend<v_double_trunc><mode>): Ditto.
(*cond_len_widen_reduc_plus_scal_<mode>): Ditto.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-1.c:
* gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-2.c:

8 months agotest: Fix FAIL of vect-sdiv-pow2-1.c for RVV test: Fix FAIL of vect-sdiv-pow2-1.c...
Juzhe-Zhong [Tue, 7 Nov 2023 03:50:14 +0000 (11:50 +0800)]
test: Fix FAIL of vect-sdiv-pow2-1.c for RVV test: Fix FAIL of vect-sdiv-pow2-1.c for RVV#

RVV didn't explictly enable DIV_POW2 optab but we cen vectorize it.
We should check pattern recognition instead of explicit pattern check.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/vect-sdiv-pow2-1.c: Fix dump check.

8 months agotest: Fix FAIL of SAD tests for RVV
Juzhe-Zhong [Tue, 7 Nov 2023 03:36:44 +0000 (11:36 +0800)]
test: Fix FAIL of SAD tests for RVV

RVV didn't explicitly enable SAD optab but we can vectorize it
since loop vectorizer is able to recognize SAD pattern for RVV during analysis.

Current scan check of explicit SAD pattern looks odd,
it should be more reasonable to check recognition of SAD pattern during Loop vectorize analysis.

Other SAD tests like slp-reduc-sad-2.c are checking pattern recognition instead of explicit pattern enable.
Fix SAD dump check to fix the FAILS for RVV.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/slp-reduc-sad.c: Fix check.
* gcc.dg/vect/vect-reduc-sad.c: Ditto.

8 months agotest: Fix XPASS of bb-slp-43.c for RVV
Juzhe-Zhong [Mon, 6 Nov 2023 22:35:31 +0000 (06:35 +0800)]
test: Fix XPASS of bb-slp-43.c for RVV

RVV is variable length vector but also has 256 bit VLS mode vector.
This test is vectorized as:

f:
        vsetivli        zero,8,e32,m2,ta,ma
        vle32.v v2,0(a0)
        vmv.v.i v4,1
        vle16.v v1,0(a1)
        vmseq.vv        v0,v2,v4
        vsetvli zero,zero,e16,m1,ta,ma
        vmseq.vi        v1,v1,2
        vsetvli zero,zero,e32,m2,ta,ma
        vmv.v.i v2,0
        vmand.mm        v0,v0,v1
        vmerge.vvm      v2,v2,v4,v0
        vse32.v v2,0(a0)
        ret

Use 256 bit vector, so remove XFAIL for 256 bits vector.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/bb-slp-43.c: Fix XPASS for RVV.

8 months agoRISC-V: Enhance AVL propagation for complicate reduction auto-vectorization
Juzhe-Zhong [Mon, 6 Nov 2023 03:34:26 +0000 (11:34 +0800)]
RISC-V: Enhance AVL propagation for complicate reduction auto-vectorization

I notice we failed to AVL propagate for reduction with more complicate situation:

double foo (double *__restrict a,
double *__restrict b,
double *__restrict c,
int n)
{
  double result = 0;
  for (int i = 0; i < n; i++)
    result += a[i] * b[i] * c[i];
  return result;
}

        vsetvli a5,a3,e8,mf8,ta,ma           -> should be fused into e64m1,TU
        slli    a4,a5,3
        vle64.v v3,0(a0)
        vle64.v v1,0(a1)
        vsetvli a6,zero,e64,m1,ta,ma         -> redundant
        vfmul.vv        v1,v1,v3
        vsetvli zero,a5,e64,m1,tu,ma         -> redundant
        vle64.v v3,0(a2)
        vfmacc.vv       v2,v1,v3
        add     a0,a0,a4
        add     a1,a1,a4
        add     a2,a2,a4
        sub     a3,a3,a5
        bne     a3,zero,.L3

The failed AVL propgation causes redundant AVL/VL togglling.
The root cause as follows:

vsetvl a5, zero
vadd.vv def r136
vsetvl zero, a3, ... TU
vsub.vv (use r136)

We propagate AVL (r136) from 'vsub.vv' into 'vadd.vv' when 'vsub.vv' is TA policy.
However, it's too restrict so we missed optimization here. We enhance AVL propation
for TU policy for following situation:

vsetvl a5, zero
vadd.vv def r136
vsetvl zero, a3, ... TU
vsub.vv (use r136, merge != r136)

Note that we should only propagate AVL when merge != r136 for 'vsub.vv' doesn't
depend on the tail elements.
After this patch:

vsetvli a5,a3,e64,m1,tu,ma
slli a4,a5,3
vle64.v v3,0(a0)
vle64.v v1,0(a1)
vfmul.vv v1,v1,v3
vle64.v v3,0(a2)
vfmacc.vv v2,v3,v1
add a0,a0,a4
add a1,a1,a4
add a2,a2,a4
sub a3,a3,a5
bne a3,zero,.L3

PR target/112399

gcc/ChangeLog:

* config/riscv/riscv-avlprop.cc
(pass_avlprop::get_vlmax_ta_preferred_avl): Enhance AVL propagation.
* config/riscv/t-riscv: Add new include.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/vsetvl/imm_switch-2.c: Adapt test.
* gcc.target/riscv/rvv/autovec/pr112399.c: New test.

This page took 0.14618 seconds and 5 git commands to generate.