aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2024-12-06SVE intrinsics: Fold calls with pfalse predicate.Jennifer Schmitz68-14/+2472
If an SVE intrinsic has predicate pfalse, we can fold the call to a simplified assignment statement: For _m predication, the LHS can be assigned the operand for inactive values and for _z, we can assign a zero vector. For _x, the returned values can be arbitrary and as suggested by Richard Sandiford, we fold to a zero vector. For example, svint32_t foo (svint32_t op1, svint32_t op2) { return svadd_s32_m (svpfalse_b (), op1, op2); } can be folded to lhs = op1, such that foo is compiled to just a RET. For implicit predication, a case distinction is necessary: Intrinsics that read from memory can be folded to a zero vector. Intrinsics that write to memory or prefetch can be folded to a no-op. Other intrinsics need case-by-case implemenation, which we added in the corresponding svxxx_impl::fold. We implemented this optimization during gimple folding by calling a new method gimple_folder::fold_pfalse from gimple_folder::fold, which covers the generic cases described above. We tested the new behavior for each intrinsic with all supported predications and data types and checked the produced assembly. There is a test file for each shape subclass with scan-assembler-times tests that look for the simplified instruction sequences, such as individual RET instructions or zeroing moves. There is an additional directive counting the total number of functions in the test, which must be the sum of counts of all other directives. This is to check that all tested intrinsics were optimized. Some few intrinsics were not covered by this patch: - svlasta and svlastb already have an implementation to cover a pfalse predicate. No changes were made to them. - svld1/2/3/4 return aggregate types and were excluded from the case that folds calls with implicit predication to lhs = {0, ...}. - svst1/2/3/4 already have an implementation in svstx_impl that precedes our optimization, such that it is not triggered. The patch was bootstrapped and regtested on aarch64-linux-gnu, no regression. OK for mainline? Signed-off-by: Jennifer Schmitz <jschmitz@nvidia.com> gcc/ChangeLog: PR target/106329 * config/aarch64/aarch64-sve-builtins-base.cc (svac_impl::fold): Add folding if pfalse predicate. (svadda_impl::fold): Likewise. (class svaddv_impl): Likewise. (class svandv_impl): Likewise. (svclast_impl::fold): Likewise. (svcmp_impl::fold): Likewise. (svcmp_wide_impl::fold): Likewise. (svcmpuo_impl::fold): Likewise. (svcntp_impl::fold): Likewise. (class svcompact_impl): Likewise. (class svcvtnt_impl): Likewise. (class sveorv_impl): Likewise. (class svminv_impl): Likewise. (class svmaxnmv_impl): Likewise. (class svmaxv_impl): Likewise. (class svminnmv_impl): Likewise. (class svorv_impl): Likewise. (svpfirst_svpnext_impl::fold): Likewise. (svptest_impl::fold): Likewise. (class svsplice_impl): Likewise. * config/aarch64/aarch64-sve-builtins-sve2.cc (class svcvtxnt_impl): Likewise. (svmatch_svnmatch_impl::fold): Likewise. * config/aarch64/aarch64-sve-builtins.cc (is_pfalse): Return true if tree is pfalse. (gimple_folder::fold_pfalse): Fold calls with pfalse predicate. (gimple_folder::fold_call_to): Fold call to lhs = t for given tree t. (gimple_folder::fold_to_stmt_vops): Helper function that folds the call to given stmt and adjusts virtual operands. (gimple_folder::fold): Call fold_pfalse. * config/aarch64/aarch64-sve-builtins.h (is_pfalse): Declare is_pfalse. gcc/testsuite/ChangeLog: PR target/106329 * gcc.target/aarch64/pfalse-binary_0.h: New test. * gcc.target/aarch64/pfalse-unary_0.h: New test. * gcc.target/aarch64/sve/pfalse-binary.c: New test. * gcc.target/aarch64/sve/pfalse-binary_int_opt_n.c: New test. * gcc.target/aarch64/sve/pfalse-binary_opt_n.c: New test. * gcc.target/aarch64/sve/pfalse-binary_opt_single_n.c: New test. * gcc.target/aarch64/sve/pfalse-binary_rotate.c: New test. * gcc.target/aarch64/sve/pfalse-binary_uint64_opt_n.c: New test. * gcc.target/aarch64/sve/pfalse-binary_uint_opt_n.c: New test. * gcc.target/aarch64/sve/pfalse-binaryxn.c: New test. * gcc.target/aarch64/sve/pfalse-clast.c: New test. * gcc.target/aarch64/sve/pfalse-compare_opt_n.c: New test. * gcc.target/aarch64/sve/pfalse-compare_wide_opt_n.c: New test. * gcc.target/aarch64/sve/pfalse-count_pred.c: New test. * gcc.target/aarch64/sve/pfalse-fold_left.c: New test. * gcc.target/aarch64/sve/pfalse-load.c: New test. * gcc.target/aarch64/sve/pfalse-load_ext.c: New test. * gcc.target/aarch64/sve/pfalse-load_ext_gather_index.c: New test. * gcc.target/aarch64/sve/pfalse-load_ext_gather_offset.c: New test. * gcc.target/aarch64/sve/pfalse-load_gather_sv.c: New test. * gcc.target/aarch64/sve/pfalse-load_gather_vs.c: New test. * gcc.target/aarch64/sve/pfalse-load_replicate.c: New test. * gcc.target/aarch64/sve/pfalse-prefetch.c: New test. * gcc.target/aarch64/sve/pfalse-prefetch_gather_index.c: New test. * gcc.target/aarch64/sve/pfalse-prefetch_gather_offset.c: New test. * gcc.target/aarch64/sve/pfalse-ptest.c: New test. * gcc.target/aarch64/sve/pfalse-rdffr.c: New test. * gcc.target/aarch64/sve/pfalse-reduction.c: New test. * gcc.target/aarch64/sve/pfalse-reduction_wide.c: New test. * gcc.target/aarch64/sve/pfalse-shift_right_imm.c: New test. * gcc.target/aarch64/sve/pfalse-store.c: New test. * gcc.target/aarch64/sve/pfalse-store_scatter_index.c: New test. * gcc.target/aarch64/sve/pfalse-store_scatter_offset.c: New test. * gcc.target/aarch64/sve/pfalse-storexn.c: New test. * gcc.target/aarch64/sve/pfalse-ternary_opt_n.c: New test. * gcc.target/aarch64/sve/pfalse-ternary_rotate.c: New test. * gcc.target/aarch64/sve/pfalse-unary.c: New test. * gcc.target/aarch64/sve/pfalse-unary_convert_narrowt.c: New test. * gcc.target/aarch64/sve/pfalse-unary_convertxn.c: New test. * gcc.target/aarch64/sve/pfalse-unary_n.c: New test. * gcc.target/aarch64/sve/pfalse-unary_pred.c: New test. * gcc.target/aarch64/sve/pfalse-unary_to_uint.c: New test. * gcc.target/aarch64/sve/pfalse-unaryxn.c: New test. * gcc.target/aarch64/sve2/pfalse-binary.c: New test. * gcc.target/aarch64/sve2/pfalse-binary_int_opt_n.c: New test. * gcc.target/aarch64/sve2/pfalse-binary_int_opt_single_n.c: New test. * gcc.target/aarch64/sve2/pfalse-binary_opt_n.c: New test. * gcc.target/aarch64/sve2/pfalse-binary_opt_single_n.c: New test. * gcc.target/aarch64/sve2/pfalse-binary_to_uint.c: New test. * gcc.target/aarch64/sve2/pfalse-binary_uint_opt_n.c: New test. * gcc.target/aarch64/sve2/pfalse-binary_wide.c: New test. * gcc.target/aarch64/sve2/pfalse-compare.c: New test. * gcc.target/aarch64/sve2/pfalse-load_ext_gather_index_restricted.c: New test. * gcc.target/aarch64/sve2/pfalse-load_ext_gather_offset_restricted.c: New test. * gcc.target/aarch64/sve2/pfalse-load_gather_sv_restricted.c: New test. * gcc.target/aarch64/sve2/pfalse-load_gather_vs.c: New test. * gcc.target/aarch64/sve2/pfalse-shift_left_imm_to_uint.c: New test. * gcc.target/aarch64/sve2/pfalse-shift_right_imm.c: New test. * gcc.target/aarch64/sve2/pfalse-store_scatter_index_restricted.c: New test. * gcc.target/aarch64/sve2/pfalse-store_scatter_offset_restricted.c: New test. * gcc.target/aarch64/sve2/pfalse-unary.c: New test. * gcc.target/aarch64/sve2/pfalse-unary_convert.c: New test. * gcc.target/aarch64/sve2/pfalse-unary_convert_narrowt.c: New test. * gcc.target/aarch64/sve2/pfalse-unary_to_int.c: New test.
2024-12-06rtl-optimization/117922 - add timevar for fold-mem-offsetsRichard Biener2-1/+2
The new fold-mem-offsets RTL pass takes significant amount of time and memory. Add a timevar for it. PR rtl-optimization/117922 * timevar.def (TV_FOLD_MEM_OFFSETS): New. * fold-mem-offsets.cc (pass_data_fold_mem): Use TV_FOLD_MEM_OFFSETS.
2024-12-05c++: ICE with pack indexing empty pack [PR117898]Marek Polacek3-6/+42
Here we ICE with a partially-substituted pack indexing. The pack expanded to an empty pack, which we can't index. It seems reasonable to detect this case in tsubst_pack_index, even before we substitute the index. Other erroneous cases can wait until pack_index_element where we have the index. PR c++/117898 gcc/cp/ChangeLog: * pt.cc (tsubst_pack_index): Detect indexing an empty pack. gcc/testsuite/ChangeLog: * g++.dg/cpp26/pack-indexing2.C: Adjust. * g++.dg/cpp26/pack-indexing12.C: New test.
2024-12-06RISC-V: Refactor the testcases for bswap16-0Pan Li1-1/+1
This patch would like to refactor the testcases of bswap16-0 after sorts of optimization option passing to testcase. To fits the big lmul like m8 for asm dump check. The below test suites are passed for this patch. * The rv64gcv fully regression test. It is test only patch and obvious up to a point, will commit it directly if no comments in next 48H. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/unop/bswap16-0.c: Update the vector register RE to cover v10 - v31. Signed-off-by: Pan Li <pan2.li@intel.com>
2024-12-06RISC-V: Fix incorrect optimization options passing to convert and unopPan Li1-2/+2
Like the strided load/store, the testcases of vector convert and unop are designed to pick up different sorts of optimization options but actually these option are ignored according to the Execution log of the gcc.log. This patch would like to make it correct almost the same as how we fixed for strided load/store. The below test suites are passed for this patch. * The rv64gcv fully regression test. It is test only patch and obvious up to a point, will commit it directly if no comments in next 48H. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/rvv.exp: Fix the incorrect optimization options passing to testcases. Signed-off-by: Pan Li <pan2.li@intel.com>
2024-12-06Daily bump.GCC Administrator7-1/+281
2024-12-05PR modula2/117904: cc1gm2 ICE when compiling a const built from VAL and SIZEGaius Mulley2-3/+38
This patch fixes an ICE which occurs when a positive ZType constant increment is used during a FOR loop. gcc/m2/ChangeLog: PR modula2/117904 * gm2-compiler/M2GenGCC.mod (PerformLastForIterator): Add call to BuildConvert when increment is > 0. gcc/testsuite/ChangeLog: PR modula2/117904 * gm2/iso/pass/forloopbyconst.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2024-12-05i386: Fix addcarry/subborrow issues [PR117860]Uros Bizjak3-20/+140
Fix several things to enable combine to handle addcarry/subborrow patterns: - Fix wrong canonical form of addcarry<mode> insn and friends. For commutative operand (PLUS RTX) binary operand (LTU) takes precedence before unary operand (ZERO_EXTEND). - Swap operands of GTU comparison to canonicalize addcarry/subborrow comparison. Again, the canonical form of the compare is PLUS RTX before ZERO_EXTEND RTX. GTU comparison is not a carry flag comparison, so we have to swap operands in x86_canonicalize_comparison to a non-canonical form to use LTU comparison. - Return correct compare mode (CCCmode) for addcarry/subborrow pattern from ix86_cc_mode, so combine is able to emit required compare mode for combined insn. - Add *subborrow<mode>_1 pattern having const_scalar_int_operand predicate. Here, canonicalization of SUB (op1, const) RTX to PLUS (op1, -const) requires negation of constant operand when ckecking operands. With the above changes, combine is able to create *addcarry_1/*subborrow_1 pattern with immediate operand for the testcase in the PR: SomeAddFunc: addq %rcx, %rsi # 10 [c=4 l=3] adddi3_cc_overflow_1/0 movq %rdi, %rax # 33 [c=4 l=3] *movdi_internal/3 adcq $5, %rdx # 19 [c=4 l=4] *addcarrydi_1/0 movq %rsi, (%rdi) # 23 [c=4 l=3] *movdi_internal/5 movq %rdx, 8(%rdi) # 24 [c=4 l=4] *movdi_internal/5 setc %dl # 39 [c=4 l=3] *setcc_qi movzbl %dl, %edx # 40 [c=4 l=3] zero_extendqidi2/0 movq %rdx, 16(%rdi) # 26 [c=4 l=4] *movdi_internal/5 ret # 43 [c=0 l=1] simple_return_internal SomeSubFunc: subq %rcx, %rsi # 10 [c=4 l=3] *subdi_3/0 movq %rdi, %rax # 42 [c=4 l=3] *movdi_internal/3 sbbq $17, %rdx # 19 [c=4 l=4] *subborrowdi_1/0 movq %rsi, (%rdi) # 33 [c=4 l=3] *movdi_internal/5 sbbq %rcx, %rcx # 29 [c=8 l=3] *x86_movdicc_0_m1_neg movq %rdx, 8(%rdi) # 34 [c=4 l=4] *movdi_internal/5 movq %rcx, 16(%rdi) # 35 [c=4 l=4] *movdi_internal/5 ret # 51 [c=0 l=1] simple_return_internal PR target/117860 gcc/ChangeLog: * config/i386/i386.cc (ix86_canonicalize_comparison): Swap operands of GTU comparison to canonicalize addcarry/subborrow comparison. (ix86_cc_mode): Return CCCmode for the comparison of addcarry/subborrow pattern. * config/i386/i386.md (addcarry<mode>): Swap operands of PLUS RTX to make it canonical. (*addcarry<mode>_1): Ditto. (addcarry peephole2s): Update RTXes for addcarry<mode>_1 change. (*add<dwi>3_doubleword_cc_overflow_1): Ditto. (*subborrow<mode>_1): New insn pattern. gcc/testsuite/ChangeLog: * gcc.target/i386/pr117860.c: New test.
2024-12-05arm: remove support for iWMMX/iWMMX2 intrinsicsRichard Earnshaw1-1811/+1
The mmintrin.h header was adjusted for GCC-14 to generate a (suppressible) warning if it was used, saying that support would be removed in GCC-15. Make that come true by removing the contents of this header and emitting an error. At this point in time I've not removed the internal support for the intrinsics, just the wrappers that enable access to them. That can be done at leisure from now on. gcc/ChangeLog: * config/arm/mmintrin.h: Raise an error if this header is used. Remove other content.
2024-12-05aarch64: Mark vluti* intrinsics as QUIETRichard Sandiford1-12/+12
This patch fixes the vluti* definitions to say that they don't raise FP exceptions even for floating-point modes. gcc/ * config/aarch64/aarch64-simd-pragma-builtins.def (ENTRY_TERNARY_VLUT8): Use FLAG_QUIET rather than FLAG_DEFAULT. (ENTRY_TERNARY_VLUT16): Likewise.
2024-12-05aarch64: Reintroduce FLAG_AUTO_FPRichard Sandiford1-7/+8
The flag now known as FLAG_QUIET is an odd-one-out in that it removes side-effects rather than adding them. This patch inverts it and gives it the old name FLAG_AUTO_FP. FLAG_QUIET now means "no flags" instead. gcc/ * config/aarch64/aarch64-builtins.cc (FLAG_QUIET): Redefine to 0, replacing the old flag with... (FLAG_AUTO_FP): ...this. (FLAG_DEFAULT): Redefine to FLAG_AUTO_FP. (aarch64_call_properties): Update accordingly.
2024-12-05aarch64: Rename FLAG_NONE to FLAG_DEFAULTRichard Sandiford3-391/+391
This patch renames to FLAG_NONE to FLAG_DEFAULT. "NONE" suggests that the function has no side-effects, whereas it actually means that floating-point operations are assumed to read FPCR and to raise FP exceptions. gcc/ * config/aarch64/aarch64-builtins.cc (FLAG_NONE): Rename to... (FLAG_DEFAULT): ...this and update all references. * config/aarch64/aarch64-simd-builtins.def: Update all references here too. * config/aarch64/aarch64-simd-pragma-builtins.def: Likewise.
2024-12-05aarch64: Rename FLAG_AUTO_FP to FLAG_QUIETRichard Sandiford2-23/+23
I'd suggested the name "FLAG_AUTO_FP" to mean "automatically derive FLAG_FP from the mode", i.e. automatically decide whether the function might read the FPCR or might raise FP exceptions. However, the flag currently suppresses that behaviour instead. This patch renames FLAG_AUTO_FP to FLAG_QUIET. That's probably not a great name, but it's also what the SVE code means by "quiet", and is borrowed from "quiet NaNs". gcc/ * config/aarch64/aarch64-builtins.cc (FLAG_AUTO_FP): Rename to... (FLAG_QUIET): ...this and update all references. * config/aarch64/aarch64-simd-builtins.def: Update all references here too.
2024-12-05Match: Refactor the unsigned SAT_TRUNC match patterns [NFC]Pan Li1-60/+52
This patch would like to refactor the all unsigned SAT_TRUNC patterns, aka: * Extract type check outside. * Re-arrange the related match pattern forms together. The below test suites are passed for this patch. * The rv64gcv fully regression test. * The x86 bootstrap test. * The x86 fully regression test. gcc/ChangeLog: * match.pd: Refactor sorts of unsigned SAT_TRUNC match patterns. Signed-off-by: Pan Li <pan2.li@intel.com>
2024-12-05middle-end/117801 - failed register coalescing due to GIMPLE scheduleRichard Biener4-13/+39
For a TSVC testcase we see failed register coalescing due to a different schedule of GIMPLE .FMA and stores fed by it. This can be mitigated by making direct internal functions participate in TER - given we're using more and more of such functions to expose target capabilities it seems to be a natural thing to not exempt those. Unfortunately the internal function expanding API doesn't match what we usually have - passing in a target and returning an RTX but instead the LHS of the call is expanded and written to. This makes the TER expansion of a call SSA def a bit unwieldly. Bootstrapped and tested on x86_64-unknown-linux-gnu. The ccmp changes have likely not seen any coverage, the debug stmt changes might not be optimal, we might end up losing on replaceable calls. PR middle-end/117801 * tree-outof-ssa.cc (ssa_is_replaceable_p): Make direct internal function calls replaceable. * expr.cc (get_def_for_expr): Handle replacements with calls. (get_def_for_expr_class): Likewise. (optimize_bitfield_assignment_op): Likewise. (expand_expr_real_1): Likewise. Properly expand direct internal function defs. * cfgexpand.cc (expand_call_stmt): Handle replacements with calls. (avoid_deep_ter_for_debug): Likewise, always create a debug temp for calls. (expand_debug_expr): Likewise, give up for calls. (expand_gimple_basic_block): Likewise. * ccmp.cc (ccmp_candidate_p): Likewise. (get_compare_parts): Likewise.
2024-12-05arm: Add CDE options for star-mc1 cpuArvin Zhong2-2/+12
This patch adds the CDE options support for the -mcpu=star-mc1. The star-mc1 is an Armv8-m Mainline CPU supporting CDE feature. gcc/ChangeLog: * config/arm/arm-cpus.in (star-mc1): Add CDE options. * doc/invoke.texi (cdecp options): Document for star-mc1. Signed-off-by: Qingxin Zhong <arvin.zhong@armchina.com>
2024-12-05doloop: Fix up doloop df use [PR116799]Jakub Jelinek3-1/+91
The following testcases are miscompiled on s390x-linux, because the doloop_optimize /* Ensure that the new sequence doesn't clobber a register that is live at the end of the block. */ { bitmap modified = BITMAP_ALLOC (NULL); for (rtx_insn *i = doloop_seq; i != NULL; i = NEXT_INSN (i)) note_stores (i, record_reg_sets, modified); basic_block loop_end = desc->out_edge->src; bool fail = bitmap_intersect_p (df_get_live_out (loop_end), modified); check doesn't work as intended. The problem is that it uses df, but the df analysis was only done using iv_analysis_loop_init (loop); -> df_analyze_loop (loop); which computes df inside on the bbs of the loop. While loop_end bb is inside of the loop, df_get_live_out computed that way includes registers set in the loop and used at the start of the next iteration, but doesn't include registers set in the loop (or before the loop) and used after the loop. The following patch fixes that by doing whole function df_analyze first, changes the loop iteration mode from 0 to LI_ONLY_INNERMOST (on many targets which use can_use_doloop_if_innermost target hook a so are known to only handle innermost loops) or LI_FROM_INNERMOST (I think only bfin actually allows non-innermost loops) and checking not just df_get_live_out (loop_end) (that is needed for something used by the next iteration), but also df_get_live_in (desc->out_edge->dest), i.e. what will be used after the loop. df of such a bb shouldn't be affected by the df_analyze_loop and so should be from df_analyze of the whole function. 2024-12-05 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/113994 PR rtl-optimization/116799 * loop-doloop.cc: Include targhooks.h. (doloop_optimize): Also punt on intersection of modified with df_get_live_in (desc->out_edge->dest). (doloop_optimize_loops): Call df_analyze. Use LI_ONLY_INNERMOST or LI_FROM_INNERMOST instead of 0 as second loops_list argument. * gcc.c-torture/execute/pr116799.c: New test. * g++.dg/torture/pr113994.C: New test.
2024-12-05c: Diagnose unexpected va_start arguments in C23 [PR107980]Jakub Jelinek12-5/+230
va_start macro was changed in C23 from the C17 va_start (va_list ap, parmN) where parmN is the identifier of the last parameter into va_start (va_list ap, ...) where arguments after ap aren't evaluated. Late in the C23 development "If any additional arguments expand to include unbalanced parentheses, or a preprocessing token that does not convert to a token, the behavior is undefined." has been added, plus there is "NOTE The macro allows additional arguments to be passed for va_start for compatibility with older versions of the library only." and "Additional arguments beyond the first given to the va_start macro may be expanded and used in unspecified contexts where they are unevaluated. For example, an implementation diagnoses potentially erroneous input for an invocation of va_start such as:" ... va_start(vl, 1, 3.0, "12", xd); // diagnostic encouraged ... "Simultaneously, va_start usage consistent with older revisions of this document should not produce a diagnostic:" ... void neigh (int last_arg, ...) { va_list vl; va_start(vl, last_arg); // no diagnostic The following patch implements the recommended diagnostics. Until now in C23 mode va_start(v, ...) was defined to __builtin_va_start(v, 0) and the extra arguments were silently ignored. The following patch adds a new builtin in a form of a keyword which parses the first argument, is silent about the __builtin_c23_va_start (ap) form, for __builtin_c23_va_start (ap, identifier) looks the identifier up and is silent if it is the last named parameter (except that it diagnoses if it has register keyword), otherwise diagnoses it isn't the last one but something else, and if there is just __builtin_c23_va_start (ap, ) or if __builtin_c23_va_start (ap, is followed by tokens other than identifier followed by ), it skips over the tokens (with handling of balanced ()s) until ) and diagnoses the extra tokens. In all cases in a form of warnings. 2024-12-05 Jakub Jelinek <jakub@redhat.com> PR c/107980 gcc/ * ginclude/stdarg.h (va_start): For C23+ change parameters from v, ... to just ... and define to __builtin_c23_va_start(__VA_ARGS__) rather than __builtin_va_start(v, 0). gcc/c-family/ * c-common.h (enum rid): Add RID_C23_VA_START. * c-common.cc (c_common_reswords): Add __builtin_c23_va_start. gcc/c/ * c-parser.cc (c_parser_postfix_expression): Handle RID_C23_VA_START. gcc/testsuite/ * gcc.dg/c23-stdarg-4.c: Expect extra warning. * gcc.dg/c23-stdarg-6.c: Likewise. * gcc.dg/c23-stdarg-7.c: Likewise. * gcc.dg/c23-stdarg-8.c: Likewise. * gcc.dg/c23-stdarg-10.c: New test. * gcc.dg/c23-stdarg-11.c: New test. * gcc.dg/torture/c23-stdarg-split-1a.c: Expect extra warning. * gcc.dg/torture/c23-stdarg-split-1b.c: Likewise.
2024-12-05AVR: target/107957 - Propagate zero_reg to store sources.Georg-Johann Lay4-5/+63
When -msplit-ldst is on, it may be possible to propagate __zero_reg__ to the sources of the new stores. For example, without this patch, unsigned long lx; void store_lsr17 (void) { lx >>= 17; } compiles to: store_lsr17: lds r26,lx+2 ; movqi_insn lds r27,lx+3 ; movqi_insn movw r24,r26 ; *movhi lsr r25 ; *lshrhi3_const ror r24 ldi r26,0 ; movqi_insn ldi r27,0 ; movqi_insn sts lx,r24 ; movqi_insn sts lx+1,r25 ; movqi_insn sts lx+2,r26 ; movqi_insn sts lx+3,r27 ; movqi_insn ret but with this patch it becomes: store_lsr17: lds r26,lx+2 ; movqi_insn lds r27,lx+3 ; movqi_insn movw r24,r26 ; *movhi lsr r25 ; *lshrhi3_const ror r24 sts lx,r24 ; movqi_insn sts lx+1,r25 ; movqi_insn sts lx+2,__zero_reg__ ; movqi_insn sts lx+3,__zero_reg__ ; movqi_insn ret gcc/ PR target/107957 * config/avr/avr-passes-fuse-move.h (bbinfo_t) <try_mem0_p>: Add static property. * config/avr/avr-passes.cc (bbinfo_t::try_mem0_p): Define it. (optimize_data_t::try_mem0): New method. (bbinfo_t::optimize_one_block) [bbinfo_t::try_mem0_p]: Run try_mem0. (bbinfo_t::optimize_one_function): Set bbinfo_t::try_mem0_p. * config/avr/avr.md (pushhi1_insn): Also allow zero as source. (define_split) [avropt_split_ldst]: Only run avr_split_ldst() when avr-fuse-move has been run at least once. * doc/invoke.texi (AVR Options) <-msplit-ldst>: Document it.
2024-12-05AVR: target/107957 - Split multi-byte loads and stores.Georg-Johann Lay5-5/+126
This patch splits multi-byte loads and stores into single-byte ones provided: - New option -msplit-ldst is on (e.g. -O2 and higher), and - The memory is non-volatile, and - The address space is generic, and - The split addresses are natively supported by the hardware. gcc/ PR target/107957 * config/avr/avr.opt (-msplit-ldst, avropt_split_ldst): New option and associated var. * common/config/avr/avr-common.cc (avr_option_optimization_table) [OPT_LEVELS_2_PLUS]: Turn on -msplit_ldst. * config/avr/avr-passes.cc (splittable_address_p) (avr_byte_maybe_mem, avr_split_ldst): New functions. * config/avr/avr-protos.h (avr_split_ldst): New proto. * config/avr/avr.md (define_split) [avropt_split_ldst]: Run avr_split_ldst().
2024-12-05AVR: target/64242 - Copy FP to a local reg in nonlocal_goto.Georg-Johann Lay1-1/+6
In nonlocal_goto sets, change hard_frame_pointer_rtx only after emit_stack_restore() restored SP. This is needed because SP my be stored in some frame location. gcc/ PR target/64242 * config/avr/avr.md (nonlocal_goto): Don't restore hard_frame_pointer_rtx directly, but copy it to local register, and only set hard_frame_pointer_rtx from it after emit_stack_restore().
2024-12-05AVR: Rework patterns that add / subtract an (inverted) MSB.Georg-Johann Lay3-114/+227
gcc/ * config/avr/avr-protos.h (avr_out_add_msb): New proto. * config/avr/avr.cc (avr_out_add_msb): New function. (avr_adjust_insn_length) [ADJUST_LEN_ADD_GE0, ADJUST_LEN_ADD_LT0]: Handle cases. * config/avr/avr.md (adjust_len) <add_lt0, add_ge0>: New attr values. (QISI2): New mode iterator. (C_MSB): New mode_attr. (*add<mode>3...msb_split, *add<mode>3.ge0, *add<mode>3.lt0) (*sub<mode>3...msb_split, *sub<mode>3.ge0, *sub<mode>3.lt0): New patterns replacing old ones, but with iterators and using avr_out_add_msb() for asm out.
2024-12-05doc: Add store-forwarding-max-distance to invoke.texiFilip Kastl1-0/+5
gcc/ChangeLog: * doc/invoke.texi: Add store-forwarding-max-distance. Signed-off-by: Filip Kastl <fkastl@suse.cz>
2024-12-05params.opt: Fix typoFilip Kastl1-1/+1
Add missing '=' after -param=cycle-accurate-model. gcc/ChangeLog: * params.opt: Add missing '=' after -param=cycle-accurate-model. Signed-off-by: Filip Kastl <fkastl@suse.cz>
2024-12-05Allow limited extended asm at toplevel [PR41045]Jakub Jelinek14-36/+464
In the Cauldron IPA/LTO BoF we've discussed toplevel asms and it was discussed it would be nice to tell the compiler something about what the toplevel asm does. Sure, I'm aware the kernel people said they aren't willing to use something like that, but perhaps other projects do. And for kernel perhaps we should add some new option which allows some dumb parsing of the toplevel asms and gather something from that parsing. The following patch is just a small step towards that, namely, allow some subset of extended inline asm outside of functions. The patch is unfinished, LTO streaming (out/in) of the ASM_EXPRs isn't implemented (it emits a sorry diagnostics), nor any cgraph/varpool changes to find out references etc. The patch allows something like: int a[2], b; enum { E1, E2, E3, E4, E5 }; struct S { int a; char b; long long c; }; asm (".section blah; .quad %P0, %P1, %P2, %P3, %P4; .previous" : : "m" (a), "m" (b), "i" (42), "i" (E4), "i" (sizeof (struct S))); Even for non-LTO, that could be useful e.g. for getting enumerators from C/C++ as integers into the toplevel asm, or sizeof/offsetof etc. The restrictions I've implemented are: 1) asm qualifiers aren't still allowed, so asm goto or asm inline can't be specified at toplevel, asm volatile has the volatile ignored for C++ with a warning and is an error in C like before 2) I see good use for mainly input operands, output maybe to make it clear that the inline asm may write some memory, I don't see a good use for clobbers, so the patch doesn't allow those (and of course labels because asm goto can't be specified) 3) the patch allows only constraints which don't allow registers, so typically "m" or "i" or other memory or immediate constraints; for memory, it requires that the operand is addressable and its address could be used in static var initializer (so that no code actually needs to be emitted for it), for others that they are constants usable in the static var initializers 4) the patch disallows + (there is no reload of the operands, so I don't see benefits of tying some operands together), nor % (who cares if something is commutative in this case), or & (again, no code is emitted around the asm), nor the 0-9 constraints Right now there is no way to tell the compiler that the inline asm defines some symbol, that is implemented in a later patch, as : constraint. Similarly, the c modifier doesn't work in all cases and the cc modifier is implemented separately. 2024-12-05 Jakub Jelinek <jakub@redhat.com> PR c/41045 gcc/ * output.h (insn_noperands): Declare. * final.cc (insn_noperands): No longer static. * varasm.cc (assemble_asm): Handle ASM_EXPR. * lto-streamer-out.cc (lto_output_toplevel_asms): Add sorry_at for non-STRING_CST toplevel asm for now. * doc/extend.texi (Basic @code{asm}, Extended @code{asm}): Document that extended asm is now allowed outside of functions with certain restrictions. gcc/c/ * c-parser.cc (c_parser_asm_string_literal): Add forward declaration. (c_parser_asm_definition): Parse also extended asm without clobbers/labels. * c-typeck.cc (build_asm_expr): Allow extended asm outside of functions and check extra restrictions. gcc/cp/ * cp-tree.h (finish_asm_stmt): Add TOPLEV_P argument. * parser.cc (cp_parser_asm_definition): Parse also extended asm without clobbers/labels outside of functions. * semantics.cc (finish_asm_stmt): Add TOPLEV_P argument, if set, check extra restrictions for extended asm outside of functions. * pt.cc (tsubst_stmt): Adjust finish_asm_stmt caller. gcc/testsuite/ * c-c++-common/toplevel-asm-1.c: New test. * c-c++-common/toplevel-asm-2.c: New test. * c-c++-common/toplevel-asm-3.c: New test.
2024-12-05RISC-V: Add const to function_shape::get_name [NFC]Kito Cheng3-73/+73
function_shape::get_name is the funciton for building intrinsic function name, the result should not be changed by others once it built. So add const to the return type to make sure no one change that by accident. gcc/ChangeLog: * config/riscv/riscv-vector-builtins-shapes.cc (vsetvl_def::get_name): Adjust return type. (loadstore_def::get_name): Ditto. (indexed_loadstore_def::get_name): Ditto. (th_loadstore_width_def::get_name): Ditto. (th_indexed_loadstore_width_def::get_name): Ditto. (alu_def::get_name): Ditto. (alu_frm_def::get_name): Ditto. (widen_alu_frm_def::get_name): Ditto. (narrow_alu_frm_def::get_name): Ditto. (reduc_alu_frm_def::get_name): Ditto. (widen_alu_def::get_name): Ditto. (no_mask_policy_def::get_name): Ditto. (return_mask_def::get_name): Ditto. (narrow_alu_def::get_name): Ditto. (move_def::get_name): Ditto. (mask_alu_def::get_name): Ditto. (reduc_alu_def::get_name): Ditto. (th_extract_def::get_name): Ditto. (scalar_move_def::get_name): Ditto. (vundefined_def::get_name): Ditto. (misc_def::get_name): Ditto. (vset_def::get_name): Ditto. (vcreate_def: Ditto.::get_name): Ditto. (read_vl_def::get_name): Ditto. (fault_load_def::get_name): Ditto. (vlenb_def::get_name): Ditto. (seg_loadstore_def::get_name): Ditto. (seg_indexed_loadstore_def::get_name): Ditto. (seg_fault_load_def::get_name): Ditto. (crypto_vv_def::get_name): Ditto. (crypto_vi_def::get_name): Ditto. (crypto_vv_no_op_type_def::get_name): Ditto. (sf_vqmacc_def::get_name): Ditto. (sf_vqmacc_def::get_name): Ditto. (sf_vfnrclip_def::get_name): Ditto. * config/riscv/riscv-vector-builtins.cc (function_builder::add_unique_function): Adjust the type for the function name holder. (function_builder::add_overloaded_function): Ditto. * config/riscv/riscv-vector-builtins.h (function_shape::get_name): Add const to the return type.
2024-12-05Daily bump.GCC Administrator4-1/+124
2024-12-04compiler: traverse method declarationsIan Lance Taylor2-22/+30
We were not consistently traversing method declarations, which appear if there is a method without a body. The gc compiler rejects that case, but gofrontend currently permits it. Maybe that should change, but not today. This avoids a compiler crash if there are method declarations with types that require specific functions. I didn't bother with a test case because a program with method declarations is almost certainly invalid anyhow. Fixes PR go/117891 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/633495
2024-12-04c++: give suggestion on misspelled class name [PR116771]David Malcolm2-1/+24
gcc/cp/ChangeLog: PR c++/116771 * parser.cc (cp_parser_name_lookup_error): Provide suggestions for the case of complete failure where there is no scope. gcc/testsuite/ChangeLog: PR c++/116771 * g++.dg/spellcheck-pr116771.C: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2024-12-04libgdiagnostics: documentation tweaksDavid Malcolm7-8/+9
gcc/ChangeLog: * doc/libgdiagnostics/topics/execution-paths.rst: Add '§' before references to section of SARIF spec. * doc/libgdiagnostics/topics/fix-it-hints.rst: Likewise. * doc/libgdiagnostics/tutorial/01-hello-world.rst: Fix typo. * doc/libgdiagnostics/tutorial/02-physical-locations.rst: Likewise. * doc/libgdiagnostics/tutorial/04-notes.rst: Likewise. * doc/libgdiagnostics/tutorial/06-fix-it-hints.rst: Add link to diagnostic_add_fix_it_hint_replace. * doc/libgdiagnostics/tutorial/07-execution-paths.rst: Add '§'. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2024-12-04sched1: debug/model: dump predecessor list and BB num [NFC]Vineet Gupta2-7/+17
This is broken out of predecessor promotion patch so that debugging can proceed during stage1 restrictions. gcc/ChangeLog: * haifa-sched.cc (model_choose_insn): Dump unscheduled_preds. (model_dump_pressure_summary): Dump bb->index. (model_start_schedule): Pass bb. * sched-rgn.cc (debug_dependencies): Dump SD_LIST_HARD_BACK deps. Signed-off-by: Vineet Gupta <vineetg@rivosinc.com>
2024-12-04sched1: parameterize pressure scheduling spilling aggressiveness [PR/114729]Vineet Gupta6-8/+76
sched1 computes ECC (Excess Change Cost) for each insn, which represents the register pressure attributed to the insn. Currently the pressure sensitive scheduling algorithm deliberately ignores negative ECC values (pressure reduction), making them 0 (neutral), leading to more spills. This happens due to the assumption that the compiler has a reasonably accurate processor pipeline scheduling model and thus tries to aggresively fill pipeline bubbles with spill slots. This however might not be true, as the model might not be available for certains uarches or even applicable especially for modern out-of-order cores. The existing heuristic induces spill frenzy on RISC-V, noticably so on SPEC2017 507.Cactu. If insn scheduling is disabled completely, the total dynamic icounts for this workload are reduced in half from ~2.5 trillion insns to ~1.3 (w/ -fno-schedule-insns). This patch adds --param=cycle-accurate-model={0,1} to gate the spill behavior. - The default (1) preserves existing spill behavior. - targets/uarches sensitive to spilling can override the param to (0) to get the reverse effect. RISC-V backend does so too. The actual perf numbers are very promising. (1) On RISC-V BPI-F3 in-order CPU, -Ofast -march=rv64gcv_zba_zbb_zbs: Before: ------ Performance counter stats for './cactusBSSN_r_base.rivos spec_ref.par': 4,917,712.97 msec task-clock:u # 1.000 CPUs utilized 5,314 context-switches:u # 1.081 /sec 3 cpu-migrations:u # 0.001 /sec 204,784 page-faults:u # 41.642 /sec 7,868,291,222,513 cycles:u # 1.600 GHz 2,615,069,866,153 instructions:u # 0.33 insn per cycle 10,799,381,890 branches:u # 2.196 M/sec 15,714,572 branch-misses:u # 0.15% of all branches After: ----- Performance counter stats for './cactusBSSN_r_base.rivos spec_ref.par': 4,552,979.58 msec task-clock:u # 0.998 CPUs utilized 205,020 context-switches:u # 45.030 /sec 2 cpu-migrations:u # 0.000 /sec 204,221 page-faults:u # 44.854 /sec 7,285,176,204,764 cycles:u (7.4% faster) # 1.600 GHz 2,145,284,345,397 instructions:u (17.96% fewer) # 0.29 insn per cycle 10,799,382,011 branches:u # 2.372 M/sec 16,235,628 branch-misses:u # 0.15% of all branches (2) Wilco reported 20% perf gains on aarch64 Neoverse V2 runs. gcc/ChangeLog: PR target/11472 * params.opt (--param=cycle-accurate-model=): New opt. * doc/invoke.texi (cycle-accurate-model): Document. * haifa-sched.cc (model_excess_group_cost): Return negative delta if param_cycle_accurate_model is 0. (model_excess_cost): Ceil negative baseECC to 0 only if param_cycle_accurate_model is 1. Dump the actual ECC value. * config/riscv/riscv.cc (riscv_option_override): Set param to 0. gcc/testsuite/ChangeLog: PR target/114729 * gcc.target/riscv/riscv.exp: Enable new tests to build. * gcc.target/riscv/sched1-spills/spill1.cpp: Add new test. Signed-off-by: Vineet Gupta <vineetg@rivosinc.com>
2024-12-04AVR: ad target/84211 - Fix dumping INSN_UID for null insn.Georg-Johann Lay1-3/+4
gcc/ PR target/84211 * config/avr/avr-passes.cc (insninfo_t) <m_insn>: Preset to 0. (run_find_plies) [hamm=0, dump_file]: Don't print INSN_UID for a null m_insn.
2024-12-04arm: use quotes when referring to command-line options [PR90160]David Malcolm1-3/+3
gcc/ChangeLog: PR translation/90160 * config/arm/arm.cc (arm_option_check_internal): Use quotes in messages that refer to command-line options. Tweak wording. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2024-12-04gcc/configure: Properly remove -O flags from C[XX]FLAGSAndreas Schwab2-8/+40
PR bootstrap/117893 * configure.ac: Use shell loop to remove -O flags. * configure: Regenerate.
2024-12-04c++: Don't reject pointer to virtual method during constant evaluation ↵Simon Martin2-0/+28
[PR117615] We currently reject the following valid code: === cut here === struct Base { virtual void doit (int v) const {} }; struct Derived : Base { void doit (int v) const {} }; using fn_t = void (Base::*)(int) const; struct Helper { fn_t mFn; constexpr Helper (auto && fn) : mFn(static_cast<fn_t>(fn)) {} }; void foo () { constexpr Helper h (&Derived::doit); } === cut here === The problem is that since r6-4014-gdcdbc004d531b4, &Derived::doit is represented with an expression with type pointer to method and using an INTEGER_CST (here 1), and that cxx_eval_constant_expression rejects any such expression with a non-null INTEGER_CST. This patch uses the same strategy as r12-4491-gf45610a45236e9 (fix for PR c++/102786), and simply lets such expressions go through. PR c++/117615 gcc/cp/ChangeLog: * constexpr.cc (cxx_eval_constant_expression): Don't reject INTEGER_CSTs with type POINTER_TYPE to METHOD_TYPE. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/constexpr-virtual22.C: New test.
2024-12-04c++: Fix up erroneous template error recovery ICE [PR117826]Jakub Jelinek2-5/+6
The testcase in the PR (which can't be easily reduced and is way too large and has way too many errors) results in an ICE, because the erroneous_templates hash_map holds trees of erroneous templates across ggc_collect and some of the templates in there could be removed, so the later lookup can crash on comparison of already freed and reused trees. The following patch makes the hash_map GTY((cache)) marked. The cp-tree.h changes before the erroneous_template declaration are needed to make gengtype happy, it didn't like using directive nor using a template-id as a template parameter. It is marked cache because if a decl would be solely referenced from the erroneous_templates hash_map, then nothing would look it up. 2024-12-04 Jakub Jelinek <jakub@redhat.com> PR c++/117826 * cp-tree.h (struct decl_location_traits): New type. (erroneous_templates_t): Change using into typedef. (erroneous_templates): Add GTY((cache)). * error.cc (cp_adjust_diagnostic_info): Use hash_map_safe_get_or_insert<true> rather than hash_map_safe_get_or_insert<false> for erroneous_templates.
2024-12-04tree-optimization/116083 - SLP discovery slownessRichard Biener1-28/+29
One large constant factor of SLP discovery is figuring the vector type for each individual lane of each node. That should be redundant since the structual comparison of stmts should ensure they end up the same so the following computes them only once per node rather than for each lane. This cuts the compile-time of the testcase in half. PR tree-optimization/116083 * tree-vect-slp.cc (vect_build_slp_tree_1): Compute vector type and max_nunits only once. Remove check for matching vector type of each lane and replace it with matching check for LHS type.
2024-12-04RISC-V: Add assert for insn operand out of range access [PR117878][NFC]Pan Li1-0/+6
According to the the initial analysis of PR117878, the ice comes from the out-of-range operand access for recog_data.operand[]. Thus, add one assert here to expose this explicitly. PR target/117878 gcc/ChangeLog: * config/riscv/riscv-v.cc (vlmax_avl_type_p): Add assert for out of range access. (nonvlmax_avl_type_p): Ditto. Signed-off-by: Pan Li <pan2.li@intel.com>
2024-12-03phiopt: Reset the number of iterations information of a loop when changing ↵Andrew Pinski3-0/+75
an exit from the loop [PR117243] After r12-5300-gf98f373dd822b3, phiopt could get the following bb structure: | middle-bb -----| | | | |----| | phi<1, 2> | | cond | | | | | |--------+---| Which was considered 2 loops. The inner loop had esimtate of upper_bound to be 8, due to the original `for (b = 0; b <= 7; b++)`. The outer loop was already an infinite one. So phiopt would come along and change the condition to be unconditionally true, we change the inner loop to being an infinite one but don't reset the estimate on the loop and cleanup cfg comes along and changes it into one loop but also does not reset the estimate of the loop. Then the loop unrolling uses the old estimate and decides to add an unreachable there.o So the fix is when phiopt changes an exit to a loop, reset the estimates, similar to how cleanupcfg does it when merging some basic blocks. Bootstrapped and tested on x86_64-linux-gnu. PR tree-optimization/117243 PR tree-optimization/116749 gcc/ChangeLog: * tree-ssa-phiopt.cc (replace_phi_edge_with_variable): Reset loop estimates if the cond_block was an exit to a loop. gcc/testsuite/ChangeLog: * gcc.dg/torture/pr117243-1.c: New test. * gcc.dg/torture/pr117243-2.c: New test. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-12-03Fortran: Fix B64.0 formatted write output.Jerry DeLisle1-0/+10
PR fortran/117820 libgfortran/ChangeLog: * io/write.c (write_b): Add test for zero needed by write_boz. gcc/testsuite/ChangeLog: * gfortran.dg/pr117820.f90: New test.
2024-12-04Daily bump.GCC Administrator7-1/+405
2024-12-03Rectify some test cases.Georg-Johann Lay10-8/+17
PR testsuite/52641 PR testsuite/109123 PR testsuite/114661 PR testsuite/117828 PR testsuite/116481 PR testsuite/91069 gcc/testsuite/ * gcc.dg/Wuse-after-free-pr109123.c: Use size_t instead of long unsigned int. * gcc.dg/c23-tag-bitfields-1.c: Requires int32plus. * gcc.dg/pr114661.c: Same. * gcc.dg/pr117828.c: Same. * gcc.dg/flex-array-counted-by-2.c: Use uintptr_t instead of unsigned long. * gcc.dg/pr116481.c: Same. * gcc.dg/lto/tag-1_0.c: Use int32_t instead of int. * gcc.dg/lto/tag-1_1.c: Use int16_t instead of short. * gcc.dg/pr91069.c: Require double64. * gcc.dg/type-convert-var.c: Require double64plus.
2024-12-03AVR: Skip some test cases that don't work for it.Georg-Johann Lay4-0/+12
gcc/testsuite/ * gcc.c-torture/execute/ieee/cdivchkd.x: New file. * gcc.c-torture/execute/ieee/cdivchkf.x: New file. * gcc.dg/flex-array-counted-by.c: Require wchar. * gcc.dg/fold-copysign-1.c [avr]: Add -mdouble=64.
2024-12-03AVR: Improve location of late diagnostics.Georg-Johann Lay6-22/+34
Some diagnostics are issues late, e.g. in avr_print_operand(). This patch uses the insn's location as a proxy for the operand location. Without the patch, the location is usually input_location, which points to the closing } of the function body. gcc/ * config/avr/avr.cc (avr_insn_location): New variable. (avr_final_prescan_insn): Set avr_insn_location. (avr_asm_final_postscan_insn): Unset avr_insn_location after last insn. (avr_print_operand): Pass avr_insn_location to warning_at. gcc/testsuite/ * gcc.dg/Warray-bounds-33.c: Adjust for avr diagnostics. * gcc.dg/pr56228.c: Same. * gcc.dg/pr86124.c: Same. * gcc.dg/pr94291.c: Same. * gcc.dg/tree-ssa/pr82059.c: Same.
2024-12-03Move some CRC tests into the gcc.dg/torture directoryJeff Law22-0/+0
Jakub noted that these tests were using dg-skip-if directives that implied the tests were expected to run under multiple optimization options, which means they probably should be in gcc.dg/torture rather than in the gcc.dg directory. This moves the relevant tests from gcc.dg to gcc.dg/torture. gcc/testsuite * gcc.dg/crc-linux-1.c: Moved to from gcc.dg/torture. * gcc.dg/crc-linux-2.c: Likewise. * gcc.dg/crc-linux-4.c: Likewise. * gcc.dg/crc-linux-5.c: Likewise. * gcc.dg/crc-not-crc-15.c: Likewise. * gcc.dg/crc-side-instr-1.c: Likewise. * gcc.dg/crc-side-instr-2.c: Likewise. * gcc.dg/crc-side-instr-3.c: Likewise. * gcc.dg/crc-side-instr-4.c: Likewise. * gcc.dg/crc-side-instr-5.c: Likewise. * gcc.dg/crc-side-instr-6.c: Likewise. * gcc.dg/crc-side-instr-7.c: Likewise. * gcc.dg/crc-side-instr-8.c: Likewise. * gcc.dg/crc-side-instr-9.c: Likewise. * gcc.dg/crc-side-instr-10.c: Likewise. * gcc.dg/crc-side-instr-11.c: Likewise. * gcc.dg/crc-side-instr-12.c: Likewise. * gcc.dg/crc-side-instr-13.c: Likewise. * gcc.dg/crc-side-instr-14.c: Likewise. * gcc.dg/crc-side-instr-15.c: Likewise. * gcc.dg/crc-side-instr-16.c: Likewise. * gcc.dg/crc-side-instr-17.c: Likewise.
2024-12-03c++/contracts: ICE with contract assert on non-empty statement [PR 117579]Nina Ranns2-2/+13
Contract assert is an attribute on an empty statement. Currently we assert that the statement is empty before emitting the assertion. This has been changed to a conditional check that the statement is empty before the assertion is emitted. PR c++/117579 gcc/cp/ChangeLog: * parser.cc (cp_parser_statement): Replace assertion with a conditional check that the statement containing a contract assert is empty. gcc/testsuite/ChangeLog: * g++.dg/contracts/pr117579.C: New test. Signed-off-by: Nina Ranns <dinka.ranns@gmail.com> Reviewed-by: Jason Merrill <jason@redhat.com>
2024-12-03Update gcc zh_CN.poJoseph Myers1-289/+212
* zh_CN.po: Update.
2024-12-03RISC-V: Fix test target selectorEdwin Lu2-2/+2
The previous target selector was not properly gating the tests to rv32 and rv64 targets. This was triggering an excess failure on rv32 targets where it would try to run the zbc64 tests. Fix selector gcc/testsuite/ChangeLog: * gcc.target/riscv/crc-builtin-zbc32.c: Fix selector. * gcc.target/riscv/crc-builtin-zbc64.c: Ditto. Signed-off-by: Edwin Lu <ewlu@rivosinc.com>
2024-12-03libgdiagnostics: fix docs metadataDavid Malcolm1-2/+1
gcc/ChangeLog: * doc/libgdiagnostics/conf.py: Remove "author". Change "copyright" field to the FSF. Signed-off-by: David Malcolm <dmalcolm@redhat.com>