aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2024-07-20Require bitint575 for pr116003.cAndrew MacLeod1-1/+1
Require a bitint target large enough. gcc/testsuite/ * gcc.dg/pr116003.c: Require bitint575 target.
2024-07-20Revert "Add documentation for musttail attribute"Andi Kleen1-23/+2
This reverts commit 56f824cc206ff00d466aaeb11211d8005c4668bc.
2024-07-20Revert "Add tests for C/C++ musttail attributes"Andi Kleen14-324/+0
This reverts commit 37c4703ce84722b9c24db3e8e6d57ab6d3a7b5eb.
2024-07-20Revert "C: Implement musttail attribute for returns"Andi Kleen3-64/+16
This reverts commit 7db47f7b915c5f5d645fa536547e26b92290afe3.
2024-07-20Revert "C++: Support clang compatible [[musttail]] (PR83324)"Andi Kleen6-63/+4
This reverts commit 59dd1d7ab21ad9a7ebf641ec9aeea609c003ad2f.
2024-07-20Output CodeView function informationMark Harmstone1-3/+288
Translate DW_TAG_subprogram DIEs into CodeView LF_FUNC_ID types and S_GPROC32_ID / S_LPROC32_ID symbols. ld will then transform these into S_GPROC32 / S_LPROC32 symbols, which map addresses to unmangled function names. gcc/ * dwarf2codeview.cc (enum cv_sym_type): Add new values. (struct codeview_symbol): Add function to union. (struct codeview_custom_type): Add lf_func_id to union. (write_function): New function. (write_codeview_symbols): Call write_function. (write_lf_func_id): New function. (write_custom_types): Call write_lf_func_id. (add_function): New function. (codeview_debug_early_finish): Call add_function.
2024-07-20Add bitint to options for testcaseAndrew MacLeod1-1/+1
Testcase should only be for bitint targets gcc/testsuite/ * gcc.dg/pr116003.c : Add target bitint.
2024-07-20doc: Remove documentation of two obsolete spec stringsAndré Maroneze1-3/+0
gcc: * doc/invoke.texi (Spec Files): Remove documentation of obsolete spec strings "predefines" and "signed_char".
2024-07-20Avoid undefined behaviour in build_option_suggestionsSiddhesh Poyarekar1-1/+1
The inner loop in build_option_suggestions uses OPTION to take the address of OPTB and use it across iterations, which is undefined behaviour since OPTB is defined within the loop. Pull it outside the loop to make this defined. gcc/ChangeLog: * opt-suggestions.cc (option_proposer::build_option_suggestions): Pull OPTB definition out of the innermost loop.
2024-07-19Add documentation for musttail attributeAndi Kleen1-2/+23
gcc/ChangeLog: PR c/83324 * doc/extend.texi: Document [[musttail]]
2024-07-19Add tests for C/C++ musttail attributesAndi Kleen14-0/+324
Some adopted from the existing C musttail plugin tests. Also extends the ability to query the sibcall capabilities of the target. gcc/testsuite/ChangeLog: * lib/target-supports.exp: (check_effective_target_struct_tail_call): New function. * c-c++-common/musttail1.c: New test. * c-c++-common/musttail12.c: New test. * c-c++-common/musttail13.c: New test. * c-c++-common/musttail2.c: New test. * c-c++-common/musttail3.c: New test. * c-c++-common/musttail4.c: New test. * c-c++-common/musttail5.c: New test. * c-c++-common/musttail7.c: New test. * c-c++-common/musttail8.c: New test. * g++.dg/musttail10.C: New test. * g++.dg/musttail11.C: New test. * g++.dg/musttail6.C: New test. * g++.dg/musttail9.C: New test.
2024-07-19C: Implement musttail attribute for returnsAndi Kleen3-16/+64
Implement a C23 clang compatible musttail attribute similar to the earlier C++ implementation in the C parser. gcc/c/ChangeLog: PR c/83324 * c-parser.cc (struct attr_state): Define with musttail_p. (c_parser_statement_after_labels): Handle [[musttail]]. (c_parser_std_attribute): Dito. (c_parser_handle_musttail): Dito. (c_parser_compound_statement_nostart): Dito. (c_parser_all_labels): Dito. (c_parser_statement): Dito. * c-tree.h (c_finish_return): Add musttail_p flag. * c-typeck.cc (c_finish_return): Handle musttail_p flag.
2024-07-19C++: Support clang compatible [[musttail]] (PR83324)Andi Kleen6-4/+63
This patch implements a clang compatible [[musttail]] attribute for returns. musttail is useful as an alternative to computed goto for interpreters. With computed goto the interpreter function usually ends up very big which causes problems with register allocation and other per function optimizations not scaling. With musttail the interpreter can be instead written as a sequence of smaller functions that call each other. To avoid unbounded stack growth this requires forcing a sibling call, which this attribute does. It guarantees an error if the call cannot be tail called which allows the programmer to fix it instead of risking a stack overflow. Unlike computed goto it is also type-safe. It turns out that David Malcolm had already implemented middle/backend support for a musttail attribute back in 2016, but it wasn't exposed to any frontend other than a special plugin. This patch adds a [[gnu::musttail]] attribute for C++ that can be added to return statements. The return statement must be a direct call (it does not follow dependencies), which is similar to what clang implements. It then uses the existing must tail infrastructure. For compatibility it also detects clang::musttail Passes bootstrap and full test gcc/c-family/ChangeLog: * c-attribs.cc (set_musttail_on_return): New function. * c-common.h (set_musttail_on_return): Declare new function. gcc/cp/ChangeLog: PR c/83324 * cp-tree.h (AGGR_INIT_EXPR_MUST_TAIL): Add. * parser.cc (cp_parser_statement): Handle musttail. (cp_parser_jump_statement): Dito. * pt.cc (tsubst_expr): Copy CALL_EXPR_MUST_TAIL_CALL. * semantics.cc (simplify_aggr_init_expr): Handle musttail.
2024-07-19Add a musttail generic attribute to the c-attribs tableAndi Kleen2-0/+16
The actual handling is directly in the parser since the generic mechanism doesn't support statement attributes, but this gives basic error checking/detection on the attribute. gcc/c-family/ChangeLog: PR c/83324 * c-attribs.cc (handle_musttail_attribute): Add. * c-common.h (handle_musttail_attribute): Add.
2024-07-20LoongArch: Organize the code related to split move and merge the same functions.Lulu Cheng3-169/+58
gcc/ChangeLog: * config/loongarch/loongarch-protos.h (loongarch_split_128bit_move): Delete. (loongarch_split_128bit_move_p): Delete. (loongarch_split_256bit_move): Delete. (loongarch_split_256bit_move_p): Delete. (loongarch_split_vector_move): Add a function declaration. * config/loongarch/loongarch.cc (loongarch_vector_costs::finish_cost): Adjust the code formatting. (loongarch_split_vector_move_p): Merge loongarch_split_128bit_move_p and loongarch_split_256bit_move_p. (loongarch_split_move_p): Merge code. (loongarch_split_move): Likewise. (loongarch_split_128bit_move_p): Delete. (loongarch_split_256bit_move_p): Delete. (loongarch_split_128bit_move): Delete. (loongarch_split_vector_move): Merge loongarch_split_128bit_move and loongarch_split_256bit_move. (loongarch_split_256bit_move): Delete. (loongarch_global_init): Remove the extra semicolon at the end of the function. * config/loongarch/loongarch.md (*movdf_softfloat): Added a new condition TARGET_64BIT.
2024-07-20Daily bump.GCC Administrator8-1/+165
2024-07-19Check for SSA_NAME not in the IL yet.Andrew MacLeod2-1/+26
Check for an SSA_NAME not in the CFG before trying to create an equivalence record in the defintion block. PR tree-optimization/116003 gcc/ * value-relation.cc (equiv_oracle::register_initial_def): Check if SSA_NAME is in the IL before registering. gcc/testsuite/ * gcc.dg/pr116003.c: New.
2024-07-19libgomp: Document 'GOMP_teams4'Thomas Schwinge3-0/+25
For reference: - <https://inbox.sourceware.org/20211111190313.GV2710@tucnak> "[PATCH] openmp: Honor OpenMP 5.1 num_teams lower bound" - <https://inbox.sourceware.org/20211112132023.GC2710@tucnak> "[PATCH] libgomp, nvptx: Honor OpenMP 5.1 num_teams lower bound" libgomp/ * config/gcn/target.c (GOMP_teams4): Document. * config/nvptx/target.c (GOMP_teams4): Likewise. * target.c (GOMP_teams4): Likewise.
2024-07-19GCN: Honor OpenMP 5.1 'num_teams' lower boundThomas Schwinge4-15/+31
Corresponding to commit 9fa72756d90e0d9edadf6e6f5f56476029925788 "libgomp, nvptx: Honor OpenMP 5.1 num_teams lower bound", these are the GCN offloading changes to fix: PASS: libgomp.c/../libgomp.c-c++-common/teams-2.c (test for excess errors) [-FAIL:-]{+PASS:+} libgomp.c/../libgomp.c-c++-common/teams-2.c execution test PASS: libgomp.c++/../libgomp.c-c++-common/teams-2.c (test for excess errors) [-FAIL:-]{+PASS:+} libgomp.c++/../libgomp.c-c++-common/teams-2.c execution test ..., and omptests' 't-critical' test case. I've cross checked that those test cases are the ones that regress for nvptx offloading, if I locally revert the "libgomp, nvptx: Honor OpenMP 5.1 num_teams lower bound" changes. libgomp/ * config/gcn/libgomp-gcn.h (GOMP_TEAM_NUM): Inject. * config/gcn/target.c (GOMP_teams4): Handle. * config/gcn/team.c (gomp_gcn_enter_kernel): Initialize. * config/gcn/teams.c (omp_get_team_num): Adjust.
2024-07-19Rewrite usage comment at the top of 'gcc/passes.def'Thomas Schwinge1-8/+5
Since Subversion r201359 (Git commit a167b052dfe9a8509bb23c374ffaeee953df0917) "Introduce gen-pass-instances.awk and pass-instances.def", the usage comment at the top of 'gcc/passes.def' no longer is accurate (even if that latter file does continue to use the 'NEXT_PASS' form without 'NUM') -- and, worse, the 'NEXT_PASS' etc. in that usage comment are processed by the 'gcc/gen-pass-instances.awk' script: --- source-gcc/gcc/passes.def 2024-06-24 18:55:15.132561641 +0200 +++ build-gcc/gcc/pass-instances.def 2024-06-24 18:55:27.768562714 +0200 [...] @@ -20,546 +22,578 @@ /* Macros that should be defined when using this file: INSERT_PASSES_AFTER (PASS) PUSH_INSERT_PASSES_WITHIN (PASS) POP_INSERT_PASSES () - NEXT_PASS (PASS) + NEXT_PASS (PASS, 1) TERMINATE_PASS_LIST (PASS) */ [...] (That is, this is 'NEXT_PASS' for the first instance of pass 'PASS'.) That's benign so far, but with another thing that I'll be extending, I'd then run into an error while the script handles this comment block. ;-\ gcc/ * passes.def: Rewrite usage comment at the top.
2024-07-19Treat boolean vector elements as 0/-1 [PR115406]Richard Sandiford3-3/+23
Previously we built vector boolean constants using 1 for true elements and 0 for false elements. This matches the predicates produced by SVE's PTRUE instruction, but leads to a miscompilation on AVX, where all bits of a boolean element should be set. One option for RTL would be to make this target-configurable. But that isn't really possible at the tree level, where vectors should work in a more target-independent way. (There is currently no way to create a "generic" packed boolean vector, but never say never :)) And, if we were going to pick a generic behaviour, it would make sense to use 0/-1 rather than 0/1, for consistency with integer vectors. Both behaviours should work with SVE on read, since SVE ignores the upper bits in each predicate element. And the choice shouldn't make much difference for RTL, since all SVE predicate modes are expressed as vectors of BI, rather than of multi-bit booleans. I suspect there might be some fallout from this change on SVE. But I think we should at least give it a go, and see whether any fallout provides a strong counterargument against the approach. gcc/ PR middle-end/115406 * fold-const.cc (native_encode_vector_part): For vector booleans, check whether an element is nonzero and, if so, set all of the correspending bits in the target image. * simplify-rtx.cc (native_encode_rtx): Likewise. gcc/testsuite/ PR middle-end/115406 * gcc.dg/torture/pr115406.c: New test.
2024-07-19arm: Update fp16-aapcs-[24].c after insn_propagation patchRichard Sandiford2-6/+10
These tests used to generate: bl swap ldr r2, [sp, #4] mov r0, r2 @ __fp16 but g:9d20529d94b23275885f380d155fe8671ab5353a means that we can load directly into r0: bl swap ldrh r0, [sp, #4] @ __fp16 This patch updates the tests to "defend" this change. While there, the scans include: mov\tr1, r[03]} But if the spill of r2 occurs first, there's no real reason why r2 couldn't be used as the temporary, instead r3. The patch tries to update the scans while preserving the spirit of the originals. gcc/testsuite/ * gcc.target/arm/fp16-aapcs-2.c: Expect the return value to be loaded directly from the stack. Test that the swap generates two moves out of r0/r1 and two moves in. * gcc.target/arm/fp16-aapcs-4.c: Likewise.
2024-07-19c++: xobj fn call without obj [PR115783]Patrick Palka2-1/+49
The code path for rejecting an object-less call to a non-static member function should also consider xobj member functions (so that we correctly reject the below calls with a "cannot call member function without object" diagnostic). PR c++/115783 gcc/cp/ChangeLog: * call.cc (build_new_method_call): Generalize METHOD_TYPE check to DECL_OBJECT_MEMBER_FUNCTION_P. gcc/testsuite/ChangeLog: * g++.dg/cpp23/explicit-obj-diagnostics11.C: New test. Reviewed-by: Jason Merrill <jason@redhat.com>
2024-07-19AVR: Support new built-in function __builtin_avr_mask1.Georg-Johann Lay5-0/+336
gcc/ * config/avr/builtins.def (MASK1): New DEF_BUILTIN. * config/avr/avr.cc (avr_rtx_costs_1): Handle rtx costs for expressions like __builtin_avr_mask1. (avr_init_builtins) <uintQI_ftype_uintQI_uintQI>: New tree type. (avr_expand_builtin) [AVR_BUILTIN_MASK1]: Diagnose unexpected forms. (avr_fold_builtin) [AVR_BUILTIN_MASK1]: Handle case. * config/avr/avr.md (gen_mask1): New expand helper. (mask1_0x01_split, mask1_0x80_split, mask1_0xfe_split): New insn-and-split. (*mask1_0x01, *mask1_0x80, *mask1_0xfe): New insns. * doc/extend.texi (AVR Built-in Functions) <__builtin_avr_mask1>: Document new built-in function. gcc/testsuite/ * gcc.target/avr/torture/builtin-mask1.c: New test.
2024-07-19libgomp: Remove bogus warnings from privatized-ref-2.f90.Paul Thomas1-6/+0
2024-07-19 Paul Thomas <pault@gcc.gnu.org> libgomp/ChangeLog * testsuite/libgomp.oacc-fortran/privatized-ref-2.f90: Cut dg-note about 'a' and remove bogus warnings about its array descriptor components being used uninitialized.
2024-07-19Fortran: character array constructor with >= 4 constant elements [PR103115]Harald Anlauf2-1/+62
gcc/fortran/ChangeLog: PR fortran/103115 * trans-array.cc (gfc_trans_array_constructor_value): If the first element of an array constructor is deferred-length character and therefore does not have an element size known at compile time, do not try to collect subsequent constant elements into a constructor for optimization. gcc/testsuite/ChangeLog: PR fortran/103115 * gfortran.dg/string_array_constructor_4.f90: New test.
2024-07-19rs6000: Catch unsupported ABI errors when using -mrop-protect ↵Peter Bergner1-1/+3
[PR114759,PR115988] 2024-07-18 Peter Bergner <bergner@linux.ibm.com> gcc/testsuite/ PR target/114759 PR target/115988 * gcc.target/powerpc/pr114759-3.c: Catch unsupported ABI errors.
2024-07-19c++: add fixed testcase [PR109464]Patrick Palka1-0/+24
Seems to be fixed by r15-521-g6ad7ca1bb90573. PR c++/109464 gcc/testsuite/ChangeLog: * g++.dg/template/explicit-instantiation8.C: New test.
2024-07-19bpf: create modifier for mem operand for xchg and cmpxchgCupertino Miranda3-6/+56
Both xchg and cmpxchg instructions, in the pseudo-C dialect, do not expect their memory address operand to be surrounded by parentheses. For example, it should be output as "w0 =cmpxchg32_32(r8+8,w0,w2)" instead of "w0 =cmpxchg32_32((r8+8),w0,w2)". This patch implements an operand modifier 'M' which marks the instruction templates that do not expect the parentheses, and adds it do xchg and cmpxchg templates. gcc/ChangeLog: * config/bpf/atomic.md (atomic_compare_and_swap, atomic_exchange): Add operand modifier %M to the first operand. * config/bpf/bpf.cc (no_parentheses_mem_operand): Create variable. (bpf_print_operand): Set no_parentheses_mem_operand variable if %M operand is used. (bpf_print_operand_address): Conditionally output parentheses. gcc/testsuite/ChangeLog: * gcc.target/bpf/pseudoc-atomic-memaddr-op.c: Add test.
2024-07-19c++: Add [dcl.init.aggr] examples to testsuiteJakub Jelinek2-0/+408
When working on the #embed optimization support, I went recently through all of reshape_init_r* and today I read in detail all the P3106R1 changes and I believe we implement it that way for years. To double check that, I've added tests with the current [dcl.init.aggr] examples but tested in all the languages from C++98 to C++26, of course guarded as needed for constructs which require newer versions of C++. The examples come in two tests, one is a runtime test for the non-erroneous examples, the other is a compile time test for the diagnostics. The former one includes mostly intact examples with runtime checking (both to test what is written in the section exactly and to test at least something with C++98) and then when useful also adds constexpr tests with static_asserts for C++11 and later. Tested on x86_64-linux and i686-linux with GXX_TESTSUITE_STDS=98,11,14,17,20,23,26 make check-g++ RUNTESTFLAGS='dg.exp=aggr-init*.C' Also tested on GCC 11 branch with GXX_TESTSUITE_STDS=98,11,14,17,20,2b make check-g++ RUNTESTFLAGS='dg.exp=aggr-init*.C' where just the " is a GCC extension" part of one error is left out, otherwise it passes the same, ditto with clang 14 (of course with different diagnostics, but verified it emits diagnostics on the right lines), so I believe we can claim implementation of this DR paper, either in all versions or at least in GCC 11+. 2024-07-19 Jakub Jelinek <jakub@redhat.com> PR c++/114460 * g++.dg/cpp26/aggr-init1.C: New test. * g++.dg/cpp26/aggr-init2.C: New test.
2024-07-19Close GCC 11 branchRichard Biener2-2/+1
Remove gcc-11 branch from updating and snapshot generating contrib/ * gcc-changelog/git_update_version.py: Remove gcc-11 branch. maintainer-scripts/ * crontab: Remove entry for gcc-11 branch.
2024-07-18c++: Hash placeholder constraint in ctp_hasherSeyed Sajad Kahani3-5/+10
This patch addresses a difference between the hash function and the equality function for canonical types of template parameters (ctp_hasher). The equality function uses comptypes (typeck.cc) (with COMPARE_STRUCTURAL) and checks constraint equality for two auto nodes (typeck.cc:1586), while the hash function ignores it (pt.cc:4528). This leads to hash collisions that can be avoided by using `hash_placeholder_constraint` (constraint.cc:1150). Note that due to the proper handling of hash collisions (hash-table.h:1059), there is no test case that can distinguish the current implementation from the proposed one. * constraint.cc (hash_placeholder_constraint): Rename to iterative_hash_placeholder_constraint. (iterative_hash_placeholder_constraint): Rename from hash_placeholder_constraint and add the initial val argument. * cp-tree.h (hash_placeholder_constraint): Rename to iterative_hash_placeholder_constraint. (iterative_hash_placeholder_constraint): Renamed from hash_placeholder_constraint and add the initial val argument. * pt.cc (struct ctp_hasher): Updated to use iterative_hash_placeholder_constraint in the case of a valid placeholder constraint. (auto_hash::hash): Reflect the renaming of hash_placeholder_constraint to iterative_hash_placeholder_constraint.
2024-07-19Match: Only allow single use of MIN_EXPR for SAT_TRUNC form 2 [PR115863]Pan Li2-2/+50
The SAT_TRUNC form 2 has below pattern matching. From: _18 = MIN_EXPR <left_8, 4294967295>; iftmp.0_11 = (unsigned int) _18; To: _18 = MIN_EXPR <left_8, 4294967295>; iftmp.0_11 = .SAT_TRUNC (left_8); But if there is another use of _18 like below, the transform to the .SAT_TRUNC may have no earnings. For example: From: _18 = MIN_EXPR <left_8, 4294967295>; // op_0 def iftmp.0_11 = (unsigned int) _18; // op_0 stream.avail_out = iftmp.0_11; left_37 = left_8 - _18; // op_0 use To: _18 = MIN_EXPR <left_8, 4294967295>; // op_0 def iftmp.0_11 = .SAT_TRUNC (left_8); stream.avail_out = iftmp.0_11; left_37 = left_8 - _18; // op_0 use Pattern recog to .SAT_TRUNC cannot eliminate MIN_EXPR as above. Then the backend (for example x86/riscv) will have additional 2-3 more insns after pattern recog besides the MIN_EXPR. Thus, keep the normal truncation as is should be the better choose. The below testsuites are passed for this patch: 1. The rv64gcv fully regression tests. 2. The x86 bootstrap tests. 3. The x86 fully regression tests. PR target/115863 gcc/ChangeLog: * match.pd: Add single_use check for .SAT_TRUNC form 2. gcc/testsuite/ChangeLog: * gcc.target/i386/pr115863-1.c: New test. Signed-off-by: Pan Li <pan2.li@intel.com>
2024-07-19Daily bump.GCC Administrator8-1/+418
2024-07-18libatomic: Handle AVX+CX16 ZHAOXIN like Intel for 16b atomic [PR104688]mayshao1-3/+7
PR target/104688 libatomic/ChangeLog: * config/x86/init.c (__libat_feat1_init): Don't clear bit_AVX on ZHAOXIN CPUs.
2024-07-18c++: implement DR1363 and DR1496 for __is_trivial [PR85723]Marek Polacek9-2/+123
is_trivial was introduced in <https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2230.html> which split POD into is_trivial and is_standard_layout. Later came CWG 1363. Since struct A { A() = default; A(int = 42) {} }; cannot be default-initialized, it should not be trivial, so the definition of what is a trivial class changed. Similarly, CWG 1496 concluded that struct B { B() = delete; }: should not be trivial either. P0848 adjusted the definition further to say "eligible". That means that template<typename T> struct C { C() requires false = default; }; should not be trivial, either, since C::C() is not eligible. Bug 85723 reports that we implement none of the CWGs. I chose to fix this by using type_has_non_deleted_trivial_default_ctor which uses locate_ctor which uses build_new_method_call, which would be used by default-initialization as well. With that, all __is_trivial problems I could find in the Bugzilla are fixed, except for PR96288, which may need changes to trivially-copyable, so I'm not messing with that now. I hope this has no ABI implications. There's effort undergoing to remove "trivial class" from the core language as it's not really meaningful. So the impact of this change should be pretty low except to fix a few libstdc++ problems. PR c++/108769 PR c++/58074 PR c++/115522 PR c++/85723 gcc/cp/ChangeLog: * class.cc (type_has_non_deleted_trivial_default_ctor): Fix formatting. * tree.cc (trivial_type_p): Instead of TYPE_HAS_TRIVIAL_DFLT, use type_has_non_deleted_trivial_default_ctor. gcc/testsuite/ChangeLog: * g++.dg/warn/Wclass-memaccess.C: Add dg-warning. * g++.dg/ext/is_trivial1.C: New test. * g++.dg/ext/is_trivial2.C: New test. * g++.dg/ext/is_trivial3.C: New test. * g++.dg/ext/is_trivial4.C: New test. * g++.dg/ext/is_trivial5.C: New test. * g++.dg/ext/is_trivial6.C: New test.
2024-07-18libbacktrace: use __has_attribute for fallthroughIan Lance Taylor2-7/+12
Also convert some FALLTHROUGH comments to ATTRIBUTE_FALLTHROUGH. * internal.h: Use __has_attribute to check for fallthrough attribute. * elf.c (elf_zstd_decompress): Use ATTRIBUTE_FALLTHROUGH rather than a FALLTHROUGH comment.
2024-07-18rs6000: Fix .machine cpu selection w/ altivec [PR97367]René Rebe2-1/+17
There are various non-IBM CPUs with altivec, so we cannot use that flag to determine which .machine cpu to use, so ignore it. Emit an additional ".machine altivec" if Altivec is enabled so that the assembler doesn't require an explicit -maltivec option to assemble any Altivec instructions for those targets where the ".machine cpu" is insufficient to enable Altivec. For example, -mcpu=G5 emits a ".machine power4". 2024-07-18 René Rebe <rene@exactcode.de> Peter Bergner <bergner@linux.ibm.com> gcc/ PR target/97367 * config/rs6000/rs6000.cc (rs6000_machine_from_flags): Do not consider OPTION_MASK_ALTIVEC. (emit_asm_machine): For Altivec compiles, emit a ".machine altivec". gcc/testsuite/ PR target/97367 * gcc.target/powerpc/pr97367.c: New test. Signed-off-by: René Rebe <rene@exactcode.de>
2024-07-18rs6000, update effective target for tests builtins-10*.c and ↵Carl Love3-3/+3
vec_perm-runnable-i128.c The tests: tests builtins-10-runnable.c tests builtins-10.c vec_perm-runnable-i128.c use __int128 types that are not supported on all platforms. Update the tests to check int128 effective target to avoid unsupported type errors on unsupported platforms. gcc/testsuite/ChangeLog: * gcc.target/powerpc/builtins-10-runnable.c: Add target int128. * gcc.target/powerpc/builtins-10.c: Add target int128. * gcc.target/powerpc/vec_perm-runnable-i128.c: Add target int128.
2024-07-18libatomic: Improve cpuid usage in __libat_feat1_initUros Bizjak1-13/+15
Check the result of __get_cpuid and process FEAT1_REGISTER only when __get_cpuid returns success. Use __cpuid instead of nested __get_cpuid. libatomic/ChangeLog: * config/x86/init.c (__libat_feat1_init): Check the result of __get_cpuid and process FEAT1_REGISTER only when __get_cpuid returns success. Use __cpuid instead of nested __get_cpuid.
2024-07-18eh: ICE with std::initializer_list and ASan [PR115865]Marek Polacek2-1/+17
Here we ICE with -fsanitize=address on std::initializer_list x = { 1, 2, 3 }; since r14-8681, which removed .ASAN_MARK calls on TREE_STATIC variables. That means that lower_try_finally now instead of try { .ASAN_MARK (UNPOISON, &C.0, 12); x = {}; x._M_len = 3; x._M_array = &C.0; } finally { .ASAN_MARK (POISON, &C.0, 12); } gets: try { x = {}; x._M_len = 3; x._M_array = &C.0; } finally { } and we ICE on the empty finally in lower_try_finally_onedest while getting get_eh_else. PR c++/115865 gcc/ChangeLog: * tree-eh.cc (get_eh_else): Check that the result of gimple_seq_first_stmt is non-null. gcc/testsuite/ChangeLog: * g++.dg/asan/initlist2.C: New test. Co-authored-by: Jakub Jelinek <jakub@redhat.com>
2024-07-18Do not use caller-saved registers for COMDAT functionsLIU Hao1-0/+2
A reference to a COMDAT function may be resolved to another definition outside the current translation unit, so it's not eligible for `-fipa-ra`. In `decl_binds_to_current_def_p()` there is already a check for weak symbols. This commit checks for COMDAT functions that are not implemented as weak symbols, for example, on *-*-mingw32. gcc/ChangeLog: PR rtl-optimization/115049 * varasm.cc (decl_binds_to_current_def_p): Add a check for COMDAT declarations too, like weak ones.
2024-07-18middle-end/115641 - invalid address constructionRichard Biener2-0/+32
fold_truth_andor_1 via make_bit_field_ref builds an address of a CALL_EXPR which isn't valid GENERIC and later causes an ICE. The following simply avoids the folding for f ().a != 1 || f ().b != 2 as it is a premature optimization anyway. The alternative would have been to build a TARGET_EXPR around the call. To get this far f () has to be const as otherwise the two calls are not semantically equivalent for the optimization. PR middle-end/115641 * fold-const.cc (decode_field_reference): If the inner reference isn't something we can take the address of, fail. * gcc.dg/torture/pr115641.c: New testcase.
2024-07-18Doc: Add Standard-Names ustrunc and sstrunc for integer modesPan Li1-0/+12
This patch would like to add the doc for the Standard-Names ustrunc and sstrunc, include both the scalar and vector integer modes. gcc/ChangeLog: * doc/md.texi: Add Standard-Names ustrunc and sstrunc. Signed-off-by: Pan Li <pan2.li@intel.com>
2024-07-18Fortran: Fix Explicit cobounds of a procedures parameter not respected [PR78466]Andre Vehreschild12-63/+207
Explicit cobounds of class array procedure parameters were not taken into account. Furthermore were different cobounds in distinct procedure parameter lists mixed up, i.e. the last definition was taken for all. The bounds are now regenerated when tree's and expr's bounds do not match. PR fortran/78466 PR fortran/80774 gcc/fortran/ChangeLog: * array.cc (gfc_compare_array_spec): Take cotype into account. * class.cc (gfc_build_class_symbol): Coarrays are also arrays. * gfortran.h (IS_CLASS_COARRAY_OR_ARRAY): New macro to detect regular and coarray class arrays. * interface.cc (compare_components): Take codimension into account. * resolve.cc (resolve_symbol): Improve error message. * simplify.cc (simplify_bound_dim): Remove duplicate. * trans-array.cc (gfc_trans_array_cobounds): Coarrays are also arrays. (gfc_trans_array_bounds): Same. (gfc_trans_dummy_array_bias): Same. (get_coarray_as): Get the as having a non-zero codim. (is_explicit_coarray): Detect explicit coarrays. (gfc_conv_expr_descriptor): Create a new descriptor for explicit coarrays. * trans-decl.cc (gfc_build_qualified_array): Coarrays are also arrays. (gfc_build_dummy_array_decl): Same. (gfc_get_symbol_decl): Same. (gfc_trans_deferred_vars): Same. * trans-expr.cc (class_scalar_coarray_to_class): Get the descriptor from the correct location. (gfc_conv_variable): Pick up the descriptor when needed. * trans-types.cc (gfc_is_nodesc_array): Coarrays are also arrays. (gfc_get_nodesc_array_type): Indentation fix only. (cobounds_match_decl): Match a tree's bounds to the expr's bounds and return true, when they match. (gfc_get_derived_type): Create a new type tree/descriptor, when the cobounds of the existing declaration and expr to not match. This happends for class arrays in parameter list, when there are different cobound declarations. gcc/testsuite/ChangeLog: * gfortran.dg/coarray/poly_run_1.f90: Activate old test code. * gfortran.dg/coarray/poly_run_2.f90: Activate test. It was stopping before and passing without an error.
2024-07-18testsuite: Add dg-do run to more testsSam James11-3/+11
All of these are for wrong-code bugs. Confirmed to be used before but with no execution. 2024-07-18 Sam James <sam@gentoo.org> PR c++/53288 PR c++/57437 PR c/65345 PR libstdc++/88101 PR tree-optimization/96369 PR tree-optimization/102124 PR tree-optimization/108692 * c-c++-common/pr96369.c: Add dg-do run directive. * gcc.dg/torture/pr102124.c: Ditto. * gcc.dg/pr108692.c: Ditto. * gcc.dg/atomic/pr65345-4.c: Ditto. * g++.dg/cpp0x/lambda/lambda-return1.C: Ditto. * g++.dg/init/lifetime4.C: Ditto. * g++.dg/torture/builtin-clear-padding-1.C: Ditto. * g++.dg/torture/builtin-clear-padding-2.C: Ditto. * g++.dg/torture/builtin-clear-padding-3.C: Ditto. * g++.dg/torture/builtin-clear-padding-4.C: Ditto. * g++.dg/torture/builtin-clear-padding-5.C: Ditto.
2024-07-18Fortran: Suppress bogus used uninitialized warnings [PR108889].Paul Thomas3-0/+90
2024-07-18 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/108889 * gfortran.h: Add bit field 'allocated_in_scope' to gfc_symbol. * trans-array.cc (gfc_array_allocate): Set 'allocated_in_scope' after allocation if not a component reference. (gfc_alloc_allocatable_for_assignment): If 'allocated_in_scope' not set, not a component ref and not allocated, set the array bounds and offset to give zero length in all dimensions. Then set allocated_in_scope. gcc/testsuite/ PR fortran/108889 * gfortran.dg/pr108889.f90: New test.
2024-07-18gimple-fold: consistent dump of builtin call simplificationsRubin Gerritsen1-12/+10
Previously only simplifications of the `__st[xrp]cpy_chk` were dumped. Now all call replacement simplifications are dumped. Examples of statements with corresponding dumpfile entries: `printf("mystr\n");`: optimized: simplified printf to __builtin_puts `printf("%c", 'a');`: optimized: simplified printf to __builtin_putchar `printf("%s\n", "mystr");`: optimized: simplified printf to __builtin_puts The below test suites passed for this patch * The x86 bootstrap test. * Manual testing with some small example code manually examining dump logs, outputting the lines mentioned above. gcc/ChangeLog: * gimple-fold.cc (dump_transformation): Moved definition. (replace_call_with_call_and_fold): Calls dump_transformation. (gimple_fold_builtin_stxcpy_chk): Removes call to dump_transformation, now in replace_call_with_call_and_fold. (gimple_fold_builtin_stxncpy_chk): Removes call to dump_transformation, now in replace_call_with_call_and_fold. Signed-off-by: Rubin Gerritsen <rubin.gerritsen@gmail.com>
2024-07-18tree-optimization/104515 - store motion and clobbersRichard Biener2-15/+89
The following addresses an old regression when end-of-object/storage clobbers were introduced. In particular when there's an end-of-object clobber in a loop but no corresponding begin-of-object we can still perform store motion of may-aliased refs when we re-issue the end-of-object/storage on the exits but elide it from the loop. This should be the safest way to deal with this considering stack-slot sharing and it should not cause missed dead store eliminations given DSE can now follow multiple paths in case there are multiple exits. Note when the clobber is re-materialized only on one exit but not on anther we are erroring on the side of removing the clobber on such path. This should be OK (removing clobbers is always OK). Note there's no corresponding code to handle begin-of-object/storage during the hoisting part of loads that are part of a store motion optimization, so this only enables stored-only store motion or cases without such clobber inside the loop. PR tree-optimization/104515 * tree-ssa-loop-im.cc (execute_sm_exit): Add clobbers_to_prune parameter and handle re-materializing of clobbers. (sm_seq_valid_bb): end-of-storage/object clobbers are OK inside an ordered sequence of stores. (sm_seq_push_down): Refuse to push down clobbers. (hoist_memory_references): Prune clobbers from the loop body we re-materialized on an exit. * g++.dg/opt/pr104515.C: New testcase.
2024-07-18Implement a -ftrapping-math/-fsignaling-nans TODO in match.pd.Roger Sayle3-13/+47
I've been investigating some (float)i == CST optimizations for match.pd, and noticed there's already a TODO comment in match.pd that's relatively easy to implement. When CST is a NaN, we only need to worry about exceptions with flag_trapping_math, and equality/inequality tests for sNaN only behave differently to qNaN with -fsignaling-nans. These issues are related to PR 57371 and PR 106805 in bugzilla. 2024-07-18 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * match.pd ((FTYPE) N CMP CST): Only worry about exceptions with flag_trapping_math, and about signaling NaNs with HONOR_SNANS. gcc/testsuite/ChangeLog * c-c++-common/pr57371-4.c: Update comment. * c-c++-common/pr57371-5.c: Add missing testcases from pr57371-4.c and update for -fno-signaling-nans -fno-trapping-math.