Commit Graph

224239 Commits

Author SHA1 Message Date
GCC Administrator
f0717d1340 Daily bump. 2025-10-25 00:18:16 +00:00
Andrew MacLeod
2bb77c52c9 Add test case for PR 110405
PR was fixed bu one of the other patches.

	* gcc.dg/pr110405.c: New.
2025-10-24 17:36:29 -04:00
Andrew MacLeod
48923fca19 Refine COND_EXPR ranges better.
Recognize COND_EXPRs where there is only one ssa_name used in the
condition as well as one of the fields in the COND_EXPR.  ie:

  cond = ssa_name < 20
  result = cond ? ssa_name : 20

Adjust the range of ssa_name to reflect the conditional value of ssa_name
relative to whether its in the TRUE or FALSE part of the COND_EXPR.

	PR tree-optimization/114025
	gcc/
	* gimple-range-fold.cc (fold_using_range::condexpr_adjust): Handle
	the same ssa_name in the condition and the COND_EXPR better.

	gcc/testsuite/
	* g++.dg/pr114025.C: New.
2025-10-24 17:36:28 -04:00
Gaius Mulley
617110ddab PR modula2/122407: Followup to spell check remaining intrinsics
This followup patch ensures that any unknown symbol spell check
error in the instrinsics uses the parameter token rather than the
procedure name token.  In turn this allows the filter module to
detect and remove multiple unknowns at the same token.
The patch also adds spell checking to the instrinsic parameters.

gcc/m2/ChangeLog:

	PR modula2/122407
	* gm2-compiler/FilterError.def (Copyright): Use correct
	licence.
	* gm2-compiler/FilterError.mod (Copyright): Ditto.
	* gm2-compiler/M2Quads.mod (BuildNewProcedure): Rewrite.
	(BuildIncProcedure): Ditto.
	(BuildDecProcedure): Ditto.
	(BuildInclProcedure): Ditto.
	(BuildExclProcedure): Ditto.
	(BuildAbsFunction): Ditto.
	(BuildCapFunction): Ditto.
	(BuildChrFunction): Ditto.
	(BuildOrdFunction): Ditto.
	(BuildIntFunction): Ditto.
	(BuildMinFunction): Ditto.
	(BuildMaxFunction): Ditto.
	(BuildTruncFunction): Ditto.
	(BuildTBitSizeFunction): Ditto.
	(BuildTSizeFunction): Ditto.
	(BuildSizeFunction): Ditto.

gcc/testsuite/ChangeLog:

	PR modula2/122407
	* gm2.dg/spell/iso/fail/badspellabs.mod: New test.
	* gm2.dg/spell/iso/fail/badspelladr.mod: New test.
	* gm2.dg/spell/iso/fail/badspellcap.mod: New test.
	* gm2.dg/spell/iso/fail/badspellchr.mod: New test.
	* gm2.dg/spell/iso/fail/badspellchr2.mod: New test.
	* gm2.dg/spell/iso/fail/badspelldec.mod: New test.
	* gm2.dg/spell/iso/fail/badspellexcl.mod: New test.
	* gm2.dg/spell/iso/fail/badspellinc.mod: New test.
	* gm2.dg/spell/iso/fail/badspellincl.mod: New test.
	* gm2.dg/spell/iso/fail/badspellnew.mod: New test.
	* gm2.dg/spell/iso/fail/badspellsize.mod: New test.
	* gm2.dg/spell/iso/fail/dg-spell-iso-fail.exp: New test.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2025-10-24 21:51:36 +01:00
Andrew Pinski
33f8e30e0a aarch64/testsuite: fix auto-init-padding-[24].c testcases [PR122402]
After r16-3956-gf613fdc6920c83, these 2 testcases start to fail as
now SRA will fully scalarize the structs and only provide with the piece
that was used. But the testcase is testing about the padding so turning
off SRA is correct in this case.

Pushed as obvious after testing the testcases now pass.

	PR target/122402
gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/auto-init-padding-2.c: Turn off SRA.
	* gcc.target/aarch64/auto-init-padding-4.c: Likewise.

Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
2025-10-24 13:50:33 -07:00
Eric Pimentel Aguiar
b1c2006077 libstdc++: Fix <mdspan> export in std module
When exporting declarations in a namespace with using declarations, the
name must be fully qualified. Recently introduced std::full_extent{,_t},
std:strided_slice, and std::submdspan_mapping_result broke module std
and module std.compat.

libstdc++-v3/ChangeLog:

	* src/c++23/std.cc.in (std::strided_slice, std::full_extent_t)
	(std::full_extent, std::submdspan_mapping_result): Add std
	qualification.

Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
2025-10-24 20:06:14 +02:00
Eric Botcazou
333ddd4e23 Ada: Small cleanup in Makefile
gcc/ada/
	PR ada/80033
	* gcc-interface/Makefile.in (force): Restore.
2025-10-24 19:51:55 +02:00
Harald Anlauf
2febf3b968 Fortran: fix TRANSFER of subarray component references [PR122386]
Commit r16-518 introduced a change that fixed inquiry references of complex
arrays as argument to the TRANSFER intrinsic by forcing a temporary.  The
solution taken however turned out not to be generalizable to component
references of nested derived-type arrays.  A better way is the revert that
patch and force the generation of a temporary when the SOURCE expression is
a not simply-contiguous array.

	PR fortran/122386

gcc/fortran/ChangeLog:

	* dependency.cc (gfc_ref_needs_temporary_p): Revert r16-518.
	* trans-intrinsic.cc (gfc_conv_intrinsic_transfer): Force temporary
	for SOURCE not being a simply-contiguous array.

gcc/testsuite/ChangeLog:

	* gfortran.dg/transfer_array_subref_2.f90: New test.
2025-10-24 19:07:45 +02:00
Nicolas Boulenguez
e7ac1359e4 Ada: Small cleanup in Makefile
gcc/ada/
	PR ada/80033
	* gcc-interface/Makefile.in (deftarg.o): Delete.
	(init-vxsim.o): Likewise.
	(force): Likewise.
2025-10-24 18:52:46 +02:00
Mivirl
6d21ca6413 Ada: Fix argument expansion with unbalanced quote on Windows
The last character of the argument is chopped as if it was a quote.

gcc/ada/
	PR ada/122367
	* rtinit.c (__gnat_runtime_initialize) [__MINGW32__]: Fix detection
	of quoted arguments.
2025-10-24 18:52:46 +02:00
Eric Botcazou
2c68938942 Ada: Fix segfault on file without final EOL with -gnatyc
The compiler overruns the source file buffer.

gcc/ada/
	PR ada/118782
	* styleg.adb (Is_Box_Comment): Also stop the loop at EOF.
2025-10-24 18:52:45 +02:00
Eric Botcazou
a84fe54e80 Ada: Fix warning for redefinition of POLLPRI macro on Windows
The macro is explicitly forced to 0 on Windows.

gcc/ada/
	PR ada/113516
	* s-oscons-tmplt.c [_WIN32]: Undefine POLLPRI before redefining it.
2025-10-24 18:52:45 +02:00
Eric Botcazou
e56b72872d Ada: Fix strange control flow in terminals.c
This was caught by a static analyzer some time ago.

gcc/ada/
	PR ada/98879
	* terminals.c (__gnat_setup_child_communication) [_WIN32]: Add else
	blocks in the processing of the data returned by ReadFile.
2025-10-24 18:52:45 +02:00
Nicolas Boulenguez
6a8b5b873f Ada: Fix other instances of incorrect String lower bound in gnatlink
This also reverts an unintentional change introduced by the initial fix.

gcc/ada/
	PR ada/81087
	* gnatlink.adb (Is_Prefix): Move around, streamline and return false
	when the prefix is not strict.
	(Gnatlink): Fix other instances of incorrect lower bound assumption.
2025-10-24 18:52:45 +02:00
Andrew MacLeod
8b9cd6490c Split signed bitwise AND operations.
The algorithm for bitwise AND struggles with complex signed operations
which cross the signed/unsigned barrier.  When this happens, process it
as 2 seperate ranges [LB, -1] and [0, UB], and combine the results.

	PR tree-optimization/114725.c
	gcc/
	* range-op.cc (operator_bitwise_and::wi_fold): Split signed
	operations crossing zero into 2 operations.

	gcc/testsuite/
	* gcc.dg/pr114725.c: New.
2025-10-24 12:04:20 -04:00
Andrew MacLeod
3d102b7a40 Create and apply bitmasks for truncating casts.
When folding a cast, we were not applying the bitmask if we reached
a VARYING result.
We were also not creating a bitmask to represent the lower bits of a
truncating cast in op1_range.  So GORI was losing bits.

	PR tree-optimization/118254
	PR tree-optimization/114331
	gcc/
	* range-op.cc (operator_cast::fold_range): When VARYING is
	reached, update the bitmask if we reach VARYING.
	(operator_cast::op1_range): For truncating casts, create a
	bitmask bit in LHS.

	gcc/testsuite/
	* gcc.dg/pr114331.c: New.
	* gcc.dg/pr118254.c: New.
2025-10-24 12:04:20 -04:00
Alex Coplan
a09c04dbcf testsuite: Add test for ICE fixed by r16-4571
I recently ran into an ICE that was fixed by richi's
r16-4571-g1ceda79ca5fe1a1a296624a98de8fd04958fbe55.

This adds a testcase for that fix.

gcc/testsuite/ChangeLog:

	* gcc.dg/torture/vect-permute-ice.c: New test.
2025-10-24 13:58:33 +01:00
Tomasz Kamiński
f27b8040ec libstdc++: Forward arguments for bind_front<f>,bind_back<f>,nttp<f> [PR122022]
This patch fixes a missing forwarding-reference (&&) in _Bind_fn_t::operator()
and lambda returned from not_fn<f>.

The bind_front<f>/bind_back<f> tests were updated to use a structure similar
to r16-3398-g250dd5b5604fbc to cover cases involving zero, one, and many bound
arguments.

	PR libstdc++/122022

libstdc++-v3/ChangeLog:

	* include/std/functional (_Bind_fn_t): Use forwarding reference as
	paremeter.
	(std::not_fn<f>): Use forwarding reference as lambda parameter.
	* testsuite/20_util/function_objects/bind_back/nttp.cc: Rework tests.
	* testsuite/20_util/function_objects/bind_front/nttp.cc: Likewise.
	* testsuite/20_util/function_objects/not_fn/nttp.cc: Add test for
	argument forwarding.
2025-10-24 14:41:28 +02:00
Takayuki 'January June' Suwa
915d2ecffe xtensa: Remove redundant use of 'n'-constraint for call insns
Because 'i'-constraint clearly includes 'n'.

gcc/ChangeLog:

	* config/xtensa/xtensa.md (call_internal, call_value_internal,
	sibcall_internal, sibcall_value_internal): Remove 'n'-constraint.
2025-10-24 05:35:04 -07:00
Takayuki 'January June' Suwa
b029f6652d xtensa: Remove redundant use of 'i'-constraint
Because it is redundant to specify 'i'-constraints on operands in single-
alternative match templates whose predicates are "const_int_operand" itself
or those that imply CONST_INT_P().

This patch also removes the 'i'-constraints on the next argument of the
callee (the number of bytes of arguments) in the four "call_internal"
patterns, since we are not interested in these arguments.

gcc/ChangeLog:

	* config/xtensa/xtensa.md (*addsubx, *subsi3_from_const,
	*xtensa_clamps, *andsi3_const_pow2_minus_one,
	*andsi3_const_negative_pow2, *andsi3_const_shifted_mask,
	*splice_bits, extvsi_internal, extzvsi_internal,
	*extzvsi-1bit_ashlsi3, *extzvsi-1bit_addsubx, insvsi, *lsiu, *ssiu,
	*lsip, *ssip, *shift_per_byte_omit_AND_0, *shift_per_byte_omit_AND_1,
	*shlrd_const, *shlrd_per_byte_omit_AND, *masktrue_const_bitcmpl,
	*masktrue_const_pow2_minus_one, *masktrue_const_negative_pow2,
	*masktrue_const_shifted_mask, call_internal, call_value_internal,
	sibcall_internal, sibcall_value_internal, entry,
	*eqne_zero_masked_bits, *eqne_in_range): Remove 'i'-constraint.
2025-10-24 05:35:04 -07:00
Gaius Mulley
cafc877cc1 PR modula2/122407: similar error messages are emitted for an unknown symbol
This followup to PR modula2/122241 reduces error message clutter by
filtering unknown symbol error ensuring that only one error message
is emitted for an unknown symbol at a particular location.
The filter is implemented using two binary trees.  A new generic
(based on the address type) binary dictionary module is added to
the base libraries.

gcc/m2/ChangeLog:

	PR modula2/122407
	* Make-lang.in (GM2-LIBS-BOOT-DEFS): Add BinDict.def.
	(GM2-LIBS-BOOT-MODS): Add BinDict.mod.
	(GM2-COMP-BOOT-DEFS): Add FilterError.def.
	(GM2-COMP-BOOT-MODS): Add FilterError.mod.
	(GM2-LIBS-DEFS): Add BinDict.def.
	(GM2-LIBS-MODS): Add BinDict.mod.
	* gm2-compiler/M2Error.def (KillError): New procedure.
	* gm2-compiler/M2Error.mod (WriteFormat3): Reformat.
	(NewError): Rewrite and call AddToList.
	(AddToList): New procedure.
	(SubFromList): Ditto.
	(WipeReferences): Ditto.
	(KillError): Ditto.
	* gm2-compiler/M2LexBuf.mod (MakeVirtualTok): Return
	caret if all token positions are identical.
	* gm2-compiler/M2MetaError.mod (KillError): Import.
	(FilterError): Import.
	(FilterUnknown): New global.
	(initErrorBlock): Initialize symcause and token.
	(push): Capitalize comments.
	(pop): Copy symcause to toblock if discovered.
	(doError): Add parameter sym.
	(defaultError): Assign token if discovered.
	Pass NulSym to doError.
	(updateTokSym): New procedure.
	(chooseError): Call updateTokSym.
	(doErrorScopeModule): Pass sym to doError.
	(doErrorScopeForward): Ditto.
	(doErrorScopeMod): Ditto.
	(doErrorScopeFor): Ditto.
	(doErrorScopeDefinition): Ditto.
	(doErrorScopeDef): Ditto.
	(doErrorScopeProc): Ditto.
	(used): Pass sym[bol] to doError.
	(op): Assign symcause when encountering
	an error, warning or note.
	(MetaErrorStringT1): Rewrite.
	(MetaErrorStringT2): Ditto.
	(MetaErrorStringT3): Ditto.
	(MetaErrorStringT4): Ditto.
	(isUniqueError): New procedure function.
	(wrapErrors): Rewrite.
	(FilterUnknown): Initialize.
	* gm2-compiler/M2Quads.mod (BuildTSizeFunction): Add spell check
	hint specifier.
	* gm2-compiler/FilterError.def: New file.
	* gm2-compiler/FilterError.mod: New file.
	* gm2-libs/BinDict.def: New file.
	* gm2-libs/BinDict.mod: New file.

libgm2/ChangeLog:

	PR modula2/122407
	* libm2pim/Makefile.am (M2MODS): Add BinDict.mod.
	(M2DEFS): Add BinDict.def.
	* libm2pim/Makefile.in: Regenerate.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2025-10-24 13:04:10 +01:00
Thomas Schwinge
04df8fa9e7 Simplify 'Makefile' dependencies for libatomic [PR81358]
I noticed that commit r16-4315-ge63cf4b130b86dd7dde1bf499d3d40faca10ea2e
"PR81358: Enable automatic linking of libatomic" had introduced a lot of
repeated 'Makefile' dependencies for libatomic, including some nonsensical
ones, like 'configure-stage1-target-libada: maybe-all-stage1-target-libatomic'
(libada isn't bootstrapped).  That's because the code for generation of
dependencies had been put into inside an existing loop over 'target_modules'.

	PR driver/81358
	* Makefile.tpl: Move generation of dependencies for libatomic out
	of loop over 'target_modules'.
	* Makefile.in: Regenerate.
2025-10-24 12:40:22 +02:00
Josef Melcr
5bfa8d3a3d middle-end/122392 - Remove erroneous PASS_MEM_STAT annotation.
Hi,
this patch remvoes the annotation which causes the build to fail when
configured with --enable-gather-detailed-mem-stats.  I am very familiar
with the mem stat system yet, so I'd leave annotating these functions
for a future patch.

gcc/ChangeLog:

	PR middle-end/122392
	* attr-callback.cc (callback_build_attr): Remove erroneous
	annotation.

Signed-off-by: Josef Melcr <jmelcr02@gmail.com>
2025-10-24 11:53:05 +02:00
Richard Biener
b7b2b199b1 Fix reduction validation for associated reduction chains
The code checking whether we have a single cycle and tracking the
reduction chain was not transitioned to full SLP which now shows
when having a SLP reduction chain built after associating the
reduction operation.

	* tree-vect-loop.cc (vectorizable_reduction): SLP-ify reduction
	operation processing a bit more.

	* gcc.dg/vect/vect-pr122406-1.c: Adjust to expect reduction
	chain vectorization.
	* gcc.dg/vect/vect-pr122406-2.c: Likewise.
2025-10-24 11:50:54 +02:00
Richard Biener
e98160489e tree-optimization/122406 - incomplete handling of reduction chain with conversion
The following fixes the mixup between reduction operation and conversion
wrapping a reduction chain.  This also exposes a missed optimization
but I'm going to fix that in a followup.

	PR tree-optimization/122406
	* tree-vect-slp.cc (vect_analyze_slp_reduc_chain): Create
	the SLP nodes for the conversions around the reduction
	operation if required.

	* gcc.dg/vect/vect-pr122406-1.c: New testcase.
	* gcc.dg/vect/vect-pr122406-2.c: Likewise.
2025-10-24 11:50:54 +02:00
Paul-Antoine Arras
6b90d56d0c OpenMP: Fix bogus diagnostics with intervening code [PR121452]
The introduction in r14-3488-ga62c8324e7e31a of OMP_STRUCTURED_BLOCK (to
diagnose invalid intervening code) caused a regression rejecting the valid use
of the Fortran CONTINUE statement to end a collapsed loop.
This patch fixes the incorrect error checking in the OMP lowering pass. It also
fixes a check in the Fortran front end that erroneously rejects a similar
statement in an ordered loop.

Co-authored by: Tobias Burnus <tburnus@baylibre.com>

	PR fortran/121452

gcc/fortran/ChangeLog:

	* openmp.cc (resolve_omp_do): Allow CONTINUE as end statement of a
	perfectly nested loop.

gcc/ChangeLog:

	* omp-low.cc (check_omp_nesting_restrictions): Accept an
	OMP_STRUCTURED_BLOCK in a collapsed simd region and in an ordered loop.

gcc/testsuite/ChangeLog:

	* c-c++-common/gomp/pr121452-1.c: New test.
	* c-c++-common/gomp/pr121452-2.c: New test.
	* gfortran.dg/gomp/pr121452-1.f90: New test.
	* gfortran.dg/gomp/pr121452-2.f90: New test.
	* gfortran.dg/gomp/pr121452-3.f90: New test.
2025-10-24 11:35:59 +02:00
H.J. Lu
77c8be11d8 x86: builtin-fabs-2.c: Also scan (%edi) for x32
Adjust gcc.target/i386/builtin-fabs-2.c to scan both (%rdi) and (%edi).

	PR target/122323
	* gcc.target/i386/builtin-fabs-2.c: Also scan (%edi)for x32.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-10-24 16:53:11 +08:00
Pengfei Li
a46dffee33 match.pd: Fold VEC_PERM_EXPR chains implementing concat-and-extract
When compiling the following code with SIMDe on AArch64:

	__m128i lo = _mm_srli_si128(a, 12);
	__m128i hi = _mm_slli_si128(b, 4);
	__m128i res = _mm_blend_epi16(hi, lo, 3);

current GCC produces:

	mov     v31.4s, 0
	ext     v30.16b, v0.16b, v31.16b, #12
	ext     v0.16b, v31.16b, v1.16b, #12
	ins     v0.s[0], v30.s[0]

instead of the more efficient:

	ext     v0.16b, v0.16b, v1.16b, #12

GCC builds three VEC_PERM_EXPRs for the intrinsic calls. The first two
implement vector shifts and the final one implements the blend, but they
use different vector modes. The forward propagation fails to optimize
this case because VIEW_CONVERT_EXPRs in between block the folding.

This patch adds a match.pd pattern to recognize the concat-and-extract
idiom and folds the VEC_PERM_EXPR chain, even when VIEW_CONVERT_EXPRs
split the chain.

Bootstrapped and tested on aarch64-linux-gnu and x86_64-linux-gnu.

gcc/ChangeLog:

	* match.pd: Fold VEC_PERM_EXPR chains implementing vector
	concat-and-extract.

gcc/testsuite/ChangeLog:

	* gcc.dg/fold-vecperm-1.c: New test.
2025-10-24 08:09:04 +00:00
Olivier Hainque
70f66ae8ae Undefine SET_CMODEL before #define in rs6000/vxworks.h
This prevents warnings complaining about the redefinition
on top of the base version.

2025-10-16  Olivier Hainque  <hainque@adacore.com>

	* config/rs6000/vxworks.h (SET_CMODEL): Undefine before
	(re)defining.
2025-10-24 07:31:10 +00:00
Olivier Hainque
1c50531c07 Adjust VxWorks special case in testsuite check_weak_available
check_weak_available was reporting weak symbols unsupported
for vxworks unconditionally while they are actually supported
vxworks 7 now (assumed >= r2).  This change adjusts the
predicate to reflect that.

We used to believe we should distinguish kernel and rtp modes,
and experiments showed that this distinction is actually
counterproductive for the testsuite's purposes.

This allows a few extra tests to run (and pass :), in particular
in g++.dg/modules.

2021-02-03  Olivier Hainque  <hainque@adacore.com>

gcc/testsuite/

	* lib/target-supports.exp (check_weak_available):
	Return 1 for VxWorks7.
2025-10-24 07:22:32 +00:00
Joseph Myers
81a7f4fef3 c: Implement C2y static assertions in expressions
C2y has added support for static assertions as void expressions, in
addition to use as declarations (N3715 was accepted in an online vote
between meetings).

Implement the feature in GCC.  There is a syntactic ambiguity between
a static assertion as a declaration and one as an expression
statement, which the accepted feature resolves by making such a usage
a declaration (this only affects the sequence of syntax productions by
which the code is parsed, not the actual semantics of the assertion);
I've raised the similar ambiguity in for loops on the WG14 reflector.

If just concerned with C2y, and not with diagnosing the use of a
feature not supported in older standard versions, the feature might be
simpler to implement by defaulting to treating static assertions in
ambiguous contexts as expressions rather than declarations, but that
would make it hard to diagnose exactly the cases that are new in C2y
(those depend on the static assertion either not being the whole
expression statement, or being in a context where an expression
statement is allowed but a declaration is not, e.g. the body of an if
statement).  Instead, to support such diagnostics, the implementation
follows the standard in what is considered a declaration and what is
considered an expression, by looking ahead to what follows the closing
parenthesis when a static assertion starts in a context where a
declaration is permitted.

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

gcc/c/
	* c-parser.cc (c_parser_next_tokens_start_typename)
	(c_parser_next_tokens_start_declaration): Add argument for token
	to start from
	(c_parser_next_tokens_start_declaration): Check for whether static
	assertion followed by semicolon.
	(c_parser_check_balanced_raw_token_sequence): Declare earlier.
	(c_parser_compound_statement_nostart, c_parser_for_statement): Use
	c_parser_next_tokens_start_declaration not
	c_token_starts_declaration on second token.
	(c_parser_unary_expression): Handle static assertions.
	* c-parser.h (c_parser_next_tokens_start_declaration): Add
	argument.

gcc/testsuite/
	* gcc.dg/c23-static-assert-5.c, gcc.dg/c23-static-assert-6.c,
	gcc.dg/c23-static-assert-7.c, gcc.dg/c23-static-assert-8.c,
	gcc.dg/c2y-static-assert-2.c, gcc.dg/c2y-static-assert-3.c,
	gcc.dg/c2y-static-assert-4.c: New tests.
2025-10-24 00:47:54 +00:00
GCC Administrator
5abeecf68e Daily bump. 2025-10-24 00:19:11 +00:00
Robert Dubner
e9757133bb cobol: Corrected FUNCTION CHAR and FUNCTION ORD.
The functions CHAR and ORD have been changed to correctly report on
character positions within the collation sequence.

The use of the LOW-VALUE and HIGH-VALUE figurative constants has been
corrected.

Some establishment of DISPLAY and NATIONAL encodings has been done
in anticipation of changes soon to come.

Some new testsuite tests have been added.

gcc/cobol/ChangeLog:

	* genapi.cc (parser_alphabet): Alphabet encoding.
	(parser_alphabet_use): Likewise.
	(parser_xml_parse): Use correct debugging macro; encoding.
	(parser_xml_on_exception): Likewise.
	(parser_xml_not_exception): Likewise.
	(parser_xml_end): Likewise.
	(initialize_the_data): Encoding.
	(parser_label_label): Debugging macros.
	(parser_label_goto): Likewise.
	(parser_file_add): Encoding.
	(parser_intrinsic_call_1): Special handling for __gg__char.
	(parser_intrinsic_call_2): Formatting.
	* parse.y: Response from FUNCTION ORD is flagged "unsigned".
	* symbols.cc (cbl_alphabet_t::reencode): Establish
	low_char & high_char.
	* symbols.h (struct cbl_alphabet_t): Likewise.

libgcobol/ChangeLog:

	* charmaps.cc: Encoding.
	* charmaps.h (class charmap_t): Encoding.
	* intrinsic.cc (__gg__char): Report the character at the
	collation position.
	(__gg__ord): Report the collation position of a character.
	* libgcobol.cc (struct program_state): Add encodings;
	Remove obsolete defines.
	(__gg__current_collation): New function for encoding/collation.
	(__gg__pop_program_state): Encoding.
	(__gg__init_program_state): Encoding.
	(format_for_display_internal): Handle LOW-VALUE and HIGH-VALUE.
	(__gg__compare_2): Encoding.
	(__gg__alphabet_use): Likewise.
	* libgcobol.h (__gg__current_collation): New declaration.
	* xmlparse.cc (__gg__xml_parse): Make a parameter const.

gcc/testsuite/ChangeLog:

	* cobol.dg/group2/Length_overflow__2_.out: Updated test result.
	* cobol.dg/group2/Length_overflow_with_offset__1_.out: Likewise.
	* cobol.dg/group2/Offset_overflow.out: Likewise.
	* cobol.dg/group2/CALL_with_OCCURS_DEPENDING_ON.cob: New test.
	* cobol.dg/group2/CALL_with_OCCURS_DEPENDING_ON.out: New test.
	* cobol.dg/group2/CHAR_and_ORD_with_COLLATING_sequence_-_ASCII.cob: New test.
	* cobol.dg/group2/CHAR_and_ORD_with_COLLATING_sequence_-_ASCII.out: New test.
	* cobol.dg/group2/CHAR_and_ORD_with_COLLATING_sequence_-_EBCDIC.cob: New test.
	* cobol.dg/group2/CHAR_and_ORD_with_COLLATING_sequence_-_EBCDIC.out: New test.
	* cobol.dg/group2/EC-BOUND-REF-MOD_checking_process_termination.cob: New test.
	* cobol.dg/group2/EC-BOUND-REF-MOD_checking_process_termination.out: New test.
	* cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__3_.cob: New test.
	* cobol.dg/group2/Occurs_DEPENDING_ON__source_and_dest.cob: New test.
	* cobol.dg/group2/Occurs_DEPENDING_ON__source_and_dest.out: New test.
	* cobol.dg/group2/Recursive_subscripts.cob: New test.
	* cobol.dg/group2/Recursive_subscripts.out: New test.
	* cobol.dg/group2/SEARCH_ALL_with_OCCURS_DEPENDING_ON.cob: New test.
	* cobol.dg/group2/SEARCH_ALL_with_OCCURS_DEPENDING_ON.out: New test.
	* cobol.dg/group2/Subscript_by_arithmetic_expression.cob: New test.
	* cobol.dg/group2/Subscript_out_of_bounds__1_.cob: New test.
	* cobol.dg/group2/Subscript_out_of_bounds__1_.out: New test.
	* cobol.dg/group2/Subscript_out_of_bounds__2_.cob: New test.
	* cobol.dg/group2/Subscript_out_of_bounds__2_.out: New test.
	* cobol.dg/group2/Subscripted_refmods.cob: New test.
	* cobol.dg/group2/Subscripted_refmods.out: New test.
	* cobol.dg/group2/length_of_ODO_Rules_7__8A__and_8B.cob: New test.
	* cobol.dg/group2/length_of_ODO_Rules_7__8A__and_8B.out: New test.
	* cobol.dg/group2/length_of_ODO_w_-_reference_modification.cob: New test.
2025-10-23 14:51:16 -04:00
Andrew Pinski
a4e033fb51 match: improve handling of ((signed)x) < 0 to x >= (unsigned)SIGNED_TYPE_MIN in (type1)x CMP CST1 ? (type2)x : CST2 pattern.
This is a follow on r16-4534-g07800a565abd20 based on the review of
the other pattern (https://gcc.gnu.org/pipermail/gcc-patches/2025-October/698336.html)
as the same issue mentioned in that review apply here.

This changes to use the new version of minmax_from_comparison so we don't need to create
a tree for the constant. and use wi::mask instead of TYPE_MIN_VALUE.

gcc/ChangeLog:

	* match.pd (`(type1)x CMP CST1 ? (type2)x : CST2`): Better handling
	of `((signed)x) < 0`.

Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
2025-10-23 09:10:04 -07:00
Andrew Pinski
f345fc997d phiopt: Remove minmax_replacement [PR101024]
Now all of the optimizations are done in match from
minmax_replacement. We can now remove minmax_replacement. :)
This keeps around the special case for fp `a CMP b ? a : b` that was
added with r14-2699-g9f8f37f5490076 (PR 88540) and moves it to
match_simplify_replacement.

Bootsrapped and tested on x86_64-linux-gnu.

Note bool-12.c needed to be updated since phiopt1 rejecting the
BIT_AND/BIT_IOR with a cast and not getting MIN/MAX any more.

gcc/ChangeLog:

	PR tree-optimization/101024
	* tree-ssa-phiopt.cc (match_simplify_replacement): Special
	case fp `a CMP b ? a : b` when not creating a min/max.
	(strip_bit_not): Remove.
	(invert_minmax_code): Remove.
	(minmax_replacement): Remove.
	(pass_phiopt::execute): Update pass comment.
	Don't call minmax_replacement.

gcc/testsuite/ChangeLog:

	* gcc.dg/tree-ssa/bool-12.c: Update based on when BIT_AND/BIT_IOR
	is created and no longer MIN/MAX.

Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
2025-10-23 09:10:03 -07:00
Andrew Pinski
22448c7f64 match: Add support for ((signed)a </>= 0) ? min/max (a, c) : b [PR101024]
This is the last patch that is needed to support to remove minmax_replacement.
This fixes pr101024-1.c which is failing when minmax_replacement is removed.

This next patch will remove it.

Changes since v1:
* v2: Add new version of minmax_from_comparison that takes widest_int.
      Constraint the pattern to constant integers in some cases.
      Use mask to create the SIGNED_MAX and use GT/LE instead.
      Use wi::le_p/wi::ge_p instead of fold_build to do the comparison.

gcc/ChangeLog:

	PR tree-optimization/101024
	* fold-const.cc (minmax_from_comparison): New version that takes widest_int
	instead of tree.
	(minmax_from_comparison):  Call minmax_from_comparison for integer cst case.
	* fold-const.h (minmax_from_comparison): New declaration.
	* match.pd (`((signed)a </>= 0) ? min/max (a, c) : b`): New pattern.

Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
2025-10-23 09:09:36 -07:00
Robert Dubner
b20c6458fa cobol: Implement the XML PARSE statement.
These changes implement the XML PARSE statement as described in the IBM
specification.

A repair to exception handling is included.  Up until now, an exception
after a successful file operation wasn't handled properly.

A repair to value declarations for BINARY / COMP / COMP-4 / COMP-5
values now allows them to have digits to the right of the implied
decimal point.  Processing of the "S" PICTURE character has been
normalized as well.

Co-Authored-By: James K. Lowden <jklowden@cobolworx.com>
Co-Authored-By: Robert Dubner <rdubner@symas.com>

gcc/cobol/ChangeLog:

	* Make-lang.in: Incorporate new token_names.h file.
	* cdf.y: Modify tokens.
	* gcobol.1: Document XML PARSE statement
	* genapi.cc (parser_enter_program): Verify that every goto has a
	matching label.
	(parser_end_program): Likewise.
	(parser_alphabet): Refine handling codeset encodings.
	(parser_alphabet_use): Likewise.
	(label_fetch): Moved from later in the source code.
	(parser_xml_parse): New routine for XML PARSE.
	(parser_xml_on_exception): Likewise.
	(parser_xml_not_exception): Likewise.
	(parser_xml_end): Likewise.
	(parser_label_label): Verify goto/label matching.
	(parser_label_goto): Likewise.
	(parser_entry): Minor change to SHOW_PARSE report.
	* genapi.h (parser_alphabet): Set parameter to const.
	(parser_xml_parse): Declare new function.
	(parser_xml_on_exception): Likewise.
	(parser_xml_not_exception): Likewise.
	(parser_xml_end): Likewise.
	(parser_label_addr): Likewise.
	* parse.y: label_pair_t structure; locale processing; new token
	processing for alphabets and XML PARSE.
	* parse_ante.h (name_of): Return field->name when initial is NULL.
	(new_tempnumeric): Make signable_e optional.
	(ast_save_locale): New function.
	(data_division_ready): Warning for "no alphabet".
	* scan.l: Repair interpretation of BINARY, COMP, COMP-4, and
	COMP-5.
	* scan_ante.h (struct bint_t): Likewise.
	* scan_post.h (current_tokens_t::tokenset_t::tokenset_t):
	Include token_names.h.
	* symbols.cc (symbols_alphabet_set): Revert to prior alphabet
	determination.
	(symbol_table_init): New XML special registers.
	(new_temporary): Make signable_e controllable, not fixed.
	* symbols.h (__gg__encoding_iconv_valid): New declaration.
	(enum cbl_label_type_t): New LblXml label type.
	(struct cbl_xml_parse_t):
	(struct cbl_label_t): Implement XML PARSE.
	(new_temporary): Incorporate boolean for signable_e.
	(symbol_elem_of): Change label field type handling.
	(cbl_section_of): Likewise.
	(cbl_field_of): Likewise.
	(cbl_label_of): Likewise.
	(cbl_special_name_of):  Likewise.
	(cbl_alphabet_of):  Likewise.
	(cbl_file_of):  Likewise.
	* token_names.h: New file.
	* util.cc (gcc_location_set_impl): Improve location_t calculations
	when entering and leaving COPYBOOKs.

libgcobol/ChangeLog:

	* Makefile.am: Changes for XML PARSE and POSIX functions.
	* Makefile.in: Likewise.
	* charmaps.cc: Augment encodings[] table with "supported" boolean.
	(__gg__encoding_iconv_name): Modify how encodings are identified.
	(encoding_descr): Likewise.
	(__gg__encoding_iconv_valid): Likewise.
	* common-defs.h (callback_t): Define function pointer.
	* constants.cc: Use named cbl_attr_e constants instead of magic
	numbers.; New definitions for XML special registers.
	* encodings.h (struct encodings_t): Declare "supported" boolean.
	* libgcobol.cc (format_for_display_internal): Use std::ptrdiff_t.
	(__gg__alphabet_use): Add case for iconv_CP1252_e.
	(default_exception_handler): Repair exception handling after a
	successful file operation.
	* posix/errno.cc: New file.
	* posix/localtime.cc: New file.
	* posix/stat.cc: New file.
	* posix/stat.h: New file.
	* posix/tm.h: New file.
	* xmlparse.cc: New file to support XML PARSE statement.

gcc/testsuite/ChangeLog:

	* cobol.dg/typo-1.cob: New test for squiggles and carets.
2025-10-23 11:28:53 -04:00
Alfie Richards
5210dc58b4 aarch64: Add __HAVE_FUNCTION_MULTI_VERSIONING macro.
gcc/ChangeLog:

	* config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins): Add
	__HAVE_FUNCTION_MULTI_VERSIONING macro.

Reviewed-by: Wilco Dijkstra <wilco.dijkstra@arm.com>
2025-10-23 12:30:32 +00:00
Alfie Richards
7f088e8b49 aarch64: Remove unnecessary sort from dispatch_function_versions.
The version data-structure already stores the versions in a sorted order so
sorting here is unnecessary.

gcc/ChangeLog:

	* config/aarch64/aarch64.cc (dispatch_function_versions): Remove
	unnecessary sorting and data structure.

Reviewed-by: Wilco Dijkstra <wilco.dijkstra@arm.com>
2025-10-23 12:30:32 +00:00
Alfie Richards
ec9b7caa37 aarch64: testsuite: Add test for supported FMV extensions.
Add tests that check the aarch64 version features are supported, that they
have the correct priority ordering, and that the generated resolver is correct.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/fmv_priority1.c: New test.
	* gcc.target/aarch64/fmv_priority2.c: New test.
	* gcc.target/aarch64/fmv_priority.in: Support file.

Reviewed-by: Wilco Dijkstra <wilco.dijkstra@arm.com>
2025-10-23 12:30:32 +00:00
Alfie Richards
f183761316 aarch64: Fix fmv priority ordering [PR target/122190]
This fixes the versioning rules for aarch64.

Previously this would prioritize the version string with more extensions
specified regardless of the extension.

The ACLE rules are that any two version strings should be ordered by the
highest priority feature that the versions don't have in common.

	PR target/122190

gcc/ChangeLog:

	* config/aarch64/aarch64.cc (compare_feature_masks): Fix version rules.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/pr122190.c: New test

Reviewed-by: Wilco Dijkstra <wilco.dijkstra@arm.com>
2025-10-23 12:30:31 +00:00
Alfie Richards
3d2848bd1f aarch64: Dump version ordering for FMV.
This adds the fmv function versions to the targetclone dump.

This is useful for debugging and tests checking function version priority
ordering.

gcc/ChangeLog:

	* config/aarch64/aarch64.cc (aarch64_generate_version_dispatcher_body):
	Dump function versions and the ordering.

Reviewed-by: Wilco Dijkstra <wilco.dijkstra@arm.com>
2025-10-23 12:30:31 +00:00
zhaozhou
fe9f0719d8 match.pd: Fold pattern of round semantics.
In the 538.imagick_r benchmark of Spec2017, I find these pattern from
MagickRound function. This patch implements these pattern in match.pd
for 4 rules:
1) (x-floor(x)) < (ceil(x)-x) ? floor(x) : ceil(x) -> floor(x+0.5)
2) (x-floor(x)) >= (ceil(x)-x) ? ceil(x) : floor(x) -> floor(x+0.5)
3) (ceil(x)-x) > (x-floor(x)) ? floor(x) : ceil(x) -> floor(x+0.5)
4) (ceil(x)-x) <= (x-floor(x)) ? ceil(x) : floor(x) -> floor(x+0.5)

The patch implements floor(x+0.5) operation to replace these pattern
that semantics of round(x) function.

The patch was regtested on aarch64-linux-gnu and x86_64-linux-gnu,
SPEC 2017 and SPEC 2006 were run:
As for SPEC 2017, 538.imagick_r benchmark performance increased by 3%+
in base test of ratio mode.
As for SPEC 2006, while the transform does not seem to be triggered,
we also see no non-noise impact on performance.

gcc/ChangeLog:

	* match.pd: Add new pattern for round.

gcc/testsuite/ChangeLog:

	* gcc.dg/fold-round-1.c: New test.
2025-10-23 13:50:45 +02:00
Andrew Stubbs
9e5a9aa490 libgomp: fine-grained pinned memory allocator
This patch introduces a new custom memory allocator for use with pinned
memory (in the case where the Cuda allocator isn't available).  In future,
this allocator will also be used for Managed Memory.  Both memories are
incompatible with the system malloc because allocated memory cannot share a
page with memory allocated for other purposes.

This means that small allocations will no longer consume an entire page of
pinned memory.  Unfortunately, it also means that pinned memory pages will
never be unmapped (although they may be reused).  This isn't a technical
limitation; the "free" algorithm could be extended in future, if needed.

The implementation is not perfect; there are various corner cases (especially
related to extending onto new pages) where allocations and reallocations may
be sub-optimal, but it should still be a step forward in support for small
allocations.

I have considered using libmemkind's "fixed" memory but rejected it for three
reasons: 1) libmemkind may not always be present at runtime, 2) there's no
currently documented means to extend a "fixed" kind one page at a time
(although the code appears to have an undocumented function that may do the
job, and/or extending libmemkind to support the MAP_LOCKED mmap flag with its
regular kinds would be straight-forward), 3) Managed Memory benefits from
having the metadata located in different memory and using an external
implementation makes it hard to guarantee this.

libgomp/ChangeLog:

	* Makefile.am (libgomp_la_SOURCES): Add simple-allocator.c.
	* Makefile.in: Regenerate.
	* basic-allocator.c: Mention simple-allocator in the comment.
	* config/linux/allocator.c: Include unistd.h.
	(pin_ctx): New variable.
	(ctxlock): New variable.
	(linux_init_pin_ctx): New function.
	(linux_memspace_alloc): Use simple-allocator for pinned memory.
	(linux_memspace_free): Likewise.
	(linux_memspace_realloc): Likewise.
	* libgomp.h (gomp_simple_alloc_init_context): New prototype.
	(gomp_simple_alloc_register_memory): New prototype.
	(gomp_simple_alloc): New prototype.
	(gomp_simple_free): New prototype.
	(gomp_simple_realloc): New prototype.
	* libgomp.texi: Update pinned memory trait documentation.
	* testsuite/libgomp.c/alloc-pinned-8.c: New test.
	* simple-allocator.c: New file.
2025-10-23 11:08:07 +00:00
Andrew Stubbs
3b8d9d579c libgomp, nvptx: Cuda pinned memory
Use Cuda to pin memory, instead of Linux mlock, when available.

There are two advantages: firstly, this gives a significant speed boost for
NVPTX offloading, and secondly, it side-steps the usual OS ulimit/rlimit
setting.

The design adds a device independent plugin API for allocating pinned memory,
and then implements it for NVPTX.  At present, the other supported devices do
not have equivalent capabilities (or requirements).

libgomp/ChangeLog:

	* config/linux/allocator.c: Include assert.h.
	(using_device_for_page_locked): New variable.
	(linux_memspace_alloc): Add init0 parameter. Support device pinning.
	(linux_memspace_calloc): Set init0 to true.
	(linux_memspace_free): Support device pinning.
	(linux_memspace_realloc): Support device pinning.
	(MEMSPACE_ALLOC): Set init0 to false.
	* libgomp-plugin.h
	(GOMP_OFFLOAD_page_locked_host_alloc): New prototype.
	(GOMP_OFFLOAD_page_locked_host_free): Likewise.
	* libgomp.h (gomp_page_locked_host_alloc): Likewise.
	(gomp_page_locked_host_free): Likewise.
	(struct gomp_device_descr): Add page_locked_host_alloc_func and
	page_locked_host_free_func.
	* libgomp.texi: Adjust the docs for the pinned trait.
	* plugin/plugin-nvptx.c
	(GOMP_OFFLOAD_page_locked_host_alloc): New function.
	(GOMP_OFFLOAD_page_locked_host_free): Likewise.
	* target.c (device_for_page_locked): New variable.
	(get_device_for_page_locked): New function.
	(gomp_page_locked_host_alloc): Likewise.
	(gomp_page_locked_host_free): Likewise.
	(gomp_load_plugin_for_device): Add page_locked_host_alloc and
	page_locked_host_free.
	* testsuite/libgomp.c/alloc-pinned-1.c: Change expectations for NVPTX
	devices.
	* testsuite/libgomp.c/alloc-pinned-2.c: Likewise.
	* testsuite/libgomp.c/alloc-pinned-3.c: Likewise.
	* testsuite/libgomp.c/alloc-pinned-4.c: Likewise.
	* testsuite/libgomp.c/alloc-pinned-5.c: Likewise.
	* testsuite/libgomp.c/alloc-pinned-6.c: Likewise.

Co-Authored-By: Thomas Schwinge <thomas@codesourcery.com>
2025-10-23 11:08:06 +00:00
Richard Biener
4eaffcd996 Remove LOOP_VINFO_SLP_UNROLLING_FACTOR
The following removes LOOP_VINFO_SLP_UNROLLING_FACTOR in favor of
using LOOP_VINFO_VECT_FACTOR directly now that there's no difference
between the two possible.

	* tree-vectorizer.h (_loop_vec_info::slp_unrolling_factor): Remove.
	(LOOP_VINFO_SLP_UNROLLING_FACTOR): Likewise.
	* tree-vect-loop.cc (_loop_vec_info::_loop_vec_info): Adjust.
	(vect_analyze_loop_2): Likewise.
	* tree-vect-slp.cc (vect_make_slp_decision): Set
	LOOP_VINFO_VECT_FACTOR directly.
2025-10-23 12:57:21 +02:00
Richard Biener
6682f495f4 Move SLP permute optimization until after VF is final
The following moves SLP permute optimization until after we applied
a possible extra unroll factor.

	* tree-vect-loop.cc (vect_analyze_loop_2): Move vect_optimize_slp
	after applying suggested_unroll_factor.
2025-10-23 12:57:21 +02:00
Richard Biener
1ceda79ca5 Fix possible segfault in load/store-lane analysis
The following fixes a segfault that appeared with a patch applying
additional permutes to a reduction SLP instance root.

	* tree-vect-loop.cc (vect_analyze_loop_2): Deal with NULL
	element in SLP_TREE_SCALAR_STMTS.
2025-10-23 12:57:20 +02:00
Christophe Lyon
a52888dc71 testsuite: arm: [MVE] Relax expected code for vbicq_f [PR122223]
The original versions of the pr122223.c test only took into account
code generated with -mfloat-abi=hard, which uses q0.

With -mfloat-abi=softfp, this can be any Q register, so replace q0
with a suitable regex.

gcc/testsuite/ChangeLog:

	PR target/122223
	* gcc.target/arm/mve/intrinsics/pr122223.c: Relax expected code.
2025-10-23 08:10:22 +00:00
liuhongt
7821a827ab Support reduc_sbool_and_scal_m for V{QI,SI,DI}mode.
gcc/ChangeLog:

	PR target/101639
	* config/i386/sse.md
	(VI_AVX): New mode iterator.
	(VI_AVX_CMP): Ditto.
	(ssebytemode): Add V16HI, V32QI, V16QI.
	(reduc_sbool_and_scal_<mode>): New expander.
	(reduc_sbool_ior_scal_<mode>): Ditto.
	(reduc_sbool_xor_scal_<mode>): Ditto.
	(*eq<mode>3_2_negate): New pre_reload splitter.
	(*ptest<mode>_ccz): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr101639_reduc_mask_vdi.c: New test.
	* gcc.target/i386/pr101639_reduc_mask_vqi.c: New test.
	* gcc.target/i386/pr101639_reduc_mask_vsi.c: New test.
	* gcc.target/i386/pr101639_reduc_mask_ior_vqi.c: New test.
	* gcc.target/i386/pr101639_reduc_mask_and_vqi.c: New test.
2025-10-22 18:39:04 -07:00