aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2022-01-27analyzer: fix -Wformat warnings on i686Martin Liska2-3/+3
PR analyzer/104247 gcc/analyzer/ChangeLog: * constraint-manager.cc (bounded_ranges_manager::log_stats): Cast to long for format purpose. * region-model-manager.cc (log_uniq_map): Likewise.
2022-01-27rs6000: Fix an assertion in update_target_cost_per_stmt [PR103702]Kewen Lin2-2/+29
This patch is to fix one wrong assertion which is too aggressive. Vectorizer can do vec_construct costing for the vector type which only has one unit. For the failed case, the passed in vector type is "vector(1) int", though it doesn't end up with any construction eventually, we have to handle this kind of possibility. gcc/ChangeLog: PR target/103702 * config/rs6000/rs6000.cc (rs6000_cost_data::update_target_cost_per_stmt): Fix one wrong assertion with early return. gcc/testsuite/ChangeLog: PR target/103702 * gcc.target/powerpc/pr103702.c: New test.
2022-01-27Fix omp-low ICE for indirect references based off component access [PR103642]Chung-Lin Tang2-1/+38
This issue was triggered after the patch extending syntax for component access in map clauses in commit 0ab29cf0bb68960c1f87405f14b4fb2109254e2f. In gimplify_scan_omp_clauses, the case for handling indirect accesses (which creates firstprivate ptr and zero-length array section map for such decls) was erroneously went into for non-pointer cases (here being the base struct decl), so added the appropriate checks there. Added new testcase is a compile only test for the ICE. The original omptests t-partial-struct test actually should not execute correctly, because for map(t.s->a[:N]), map(t.s[:1]) is not implicitly mapped, thus the entire offloaded access does not work as is (fixing that omptests test is out of scope here). 2022-01-27 Chung-Lin Tang <cltang@codesourcery.com> PR middle-end/103642 gcc/ChangeLog: * gimplify.cc (gimplify_scan_omp_clauses): Do not do indir_p handling for non-pointer or non-reference-to-pointer cases. gcc/testsuite/ChangeLog: * c-c++-common/gomp/pr103642.c: New test.
2022-01-27Fix aarch64/104201: branch-protection-attr.c fails after quoting differenceAndrew Pinski1-1/+1
After the quoting changes in r12-6521-g03a1a86b5ee40d4e240, branch-protection-attr.c fails due to expecting a different quoting type for "leaf". This patch changes the quoting from "" to '' as that is what is used now. Committed as obvious after a test of the testcase. gcc/testsuite/ChangeLog: PR target/104201 * gcc.target/aarch64/branch-protection-attr.c: Fix quoting for the expected error message on line 5 of leaf.
2022-01-27reassoc: Fix up inter-bb range optimization [PR104196]Jakub Jelinek4-8/+128
As mentioned in the PR, reassoc1 miscompiles following testcase. We have: if (a.1_1 >= 0) goto <bb 5>; [59.00%] else goto <bb 4>; [41.00%] <bb 4> [local count: 440234144]: _3 = -2147483647 - a.1_1; _9 = a.1_1 != -2147479551; _4 = _3 == 1; _8 = _4 | _9; if (_8 != 0) goto <bb 5>; [34.51%] else goto <bb 3>; [65.49%] and the inter-bb range test optimization treats it as: if ((a.1_1 >= 0) | (-2147483647 - a.1_1 == 1) | (a.1_1 != -2147479551)) goto bb5; else goto bb3; and recognizes that a.1_1 >= 0 is redundant with a.1_1 != -2147479551 and so will optimize it into: if (0 | (-2147483647 - a.1_1 == 1) | (a.1_1 != -2147479551)) goto bb5; else goto bb3; When merging 2 comparisons, we use update_range_test which picks one of the comparisons as the one holding the result (currently always the RANGE one rather than all the OTHERRANGE* ones) and adjusts the others to be true or false. The problem with doing that is that means the _3 = -2147483647 - a.1_1; stmt with undefined behavior on overflow used to be conditional before but now is unconditional. reassoc performs a no_side_effect_bb check which among other checks punts on gimple_has_side_effects and gimple_assign_rhs_could_trap_p stmts as well as ones that have uses of their lhs outside of the same bb, but it doesn't punt for this potential signed overflow case. Now, for this testcase, it can be fixed in update_range_test by being smarter and choosing the other comparison to modify. This is achieved by storing into oe->id index of the bb with GIMPLE_COND the comparison feeds into not just for the cases where the comparison is the GIMPLE_COND itself, but in all cases, and then finding oe->id that isn't dominated by others. If we find such, use that oe for the merge test and if successful, swap range->idx and swap_with->idx. So for the above case we optimize it into: if ((a.1_1 != -2147479551) | (-2147483647 - a.1_1 == 1) | 0) goto bb5; else goto bb3; instead. Unfortunately, this doesn't work in all cases, optimize_range_tests_to_bit_test and optimize_range_tests_cmp_bitwise optimizations use non-NULL seq to update_range_test and they carefully choose a particular comparison because the sequence then uses SSA_NAMEs that may be defined only in their blocks. For that case, the patch keeps using the chosen comparison but if the merge is successful, rewrites stmts with signed overflow behavior into defined overflow. For this I ran into a problem, rewrite_to_defined_overflow returns a sequence that includes the original stmt with modified arguments, this means it needs to be gsi_remove first. Unfortunately, gsi_remove regardless of the remove_permanently argument creates debug temps for the lhs, which I think is quite undesirable here. So I've added an argument (default to false) to rewrite_to_defined_overflow to do the modification in place without the need to remove the stmt. 2022-01-27 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/104196 * gimple-fold.h (rewrite_to_defined_overflow): Add IN_PLACE argument. * gimple-fold.cc (rewrite_to_defined_overflow): Likewise. If true, return NULL and emit needed stmts before and after stmt. * tree-ssa-reassoc.cc (update_range_test): For inter-bb range opt pick as operand_entry that will hold the merged test the one feeding earliest condition, ensure that by swapping range->idx with some other range's idx if needed. If seq is non-NULL, don't actually swap it but instead rewrite stmts with undefined overflow in between the two locations. (maybe_optimize_range_tests): Set ops[]->id to bb->index with the corresponding condition even if they have non-NULL ops[]->op. Formatting fix. * gcc.c-torture/execute/pr104196.c: New test.
2022-01-27Daily bump.GCC Administrator5-1/+146
2022-01-26rs6000: Fix up *intrin.h for C89 [PR104239]Jakub Jelinek4-3/+13
When writing testcases for the previously posted patch, I have noticed that 3 of the headers aren't valid C89 (I didn't have any dg-options so -ansi -pedantic-errors was implied and these errors were reported). The following patch fixes those, ok for trunk? Note, as can be seen even in this patch, seems older rs6000/*intrin.h headers uglify not just argument names (__A instead of A etc.), but also automatic variable names and other local identifiers, while e.g. emmintrin.h or bmi2intrin.h clearly uglify only the argument names and not local variables. I think that should be fixed but don't have time for that myself (libstdc++ or e.g. the x86 headers uglify everything; this is so that one can #define result a + b #include <x86intrin.h> etc.). 2022-01-26 Jakub Jelinek <jakub@redhat.com> PR target/104239 * config/rs6000/emmintrin.h (_mm_sad_epu8): Use __asm__ instead of asm. * config/rs6000/smmintrin.h (_mm_minpos_epu16): Declare iterator before for loop instead of for init clause. * config/rs6000/bmi2intrin.h (_pext_u64): Likewise. * gcc.target/powerpc/pr104239-3.c: New test.
2022-01-26rs6000: Fix up #include <immintrin.h> or <x86gprintrin.h> [PR104239]Jakub Jelinek4-4/+24
r12-4717-g7d37abedf58d66 added immintrin.h and x86gprintrin.h headers to rs6000, these headers are on x86 standalone headers that various programs include directly rather than including them through <x86intrin.h>. Unfortunately, for that change the bmiintrin.h and bmi2intrin.h headers haven't been adjusted, so the effect is that if one includes them (without including also x86intrin.h first) #error will trigger. Furthermore, when including such headers conditionally as some real-world packages do, this means a regression. The following patch fixes it and matches what the x86 bmi{,2}intrin.h headers do. 2022-01-26 Jakub Jelinek <jakub@redhat.com> PR target/104239 * config/rs6000/bmiintrin.h: Test _X86GPRINTRIN_H_INCLUDED instead of _X86INTRIN_H_INCLUDED and adjust #error wording. * config/rs6000/bmi2intrin.h: Likewise. * gcc.target/powerpc/pr104239-1.c: New test. * gcc.target/powerpc/pr104239-2.c: New test.
2022-01-26c++: vector compound literal [PR104206]Jason Merrill1-2/+3
My patch for PR101072 removed the specific VECTOR_TYPE handling here, which broke pr72747-2.c on PPC; this patch restores it. PR c++/104206 PR c++/101072 gcc/cp/ChangeLog: * semantics.cc (finish_compound_literal): Restore VECTOR_TYPE check.
2022-01-26dwarf2out: For ppc64le IEEE quad long double, emit DW_TAG_typedef to ↵Jakub Jelinek1-1/+67
_Float128 [PR104194] On Mon, Jan 24, 2022 at 11:26:27PM +0100, Jakub Jelinek via Gcc-patches wrote: > Yet another short term solution might be not use DW_TAG_base_type > for the IEEE quad long double, but instead pretend it is a DW_TAG_typedef > with DW_AT_name "long double" to __float128 DW_TAG_base_type. > I bet gdb would even handle it without any changes, but of course, it would > be larger than the other proposed changes. Here it is implemented. Testcases I've played with are e.g.: __ibm128 a; long double b; _Complex long double c; static __attribute__((noinline)) int foo (long double d) { long double e = d + 1.0L; return 0; } int main () { a = 1.0; b = 2.0; c = 5.0 + 6.0i; return foo (7.0L); } and real(kind=16) :: a complex(kind=16) :: b a = 1.0 b = 2.0 end Printing the values of the variables works well, p &b or p &c shows pointer to the correct type, just ptype b or ptype c prints _Float128 instead of long double or complex _Float128 instead of complex long double. Even worse in fortran where obviously _Float128 or complex _Float128 aren't valid types, but as GDB knows them by name, it is just ptype that is weird. 2022-01-26 Jakub Jelinek <jakub@redhat.com> PR debug/104194 * dwarf2out.cc (long_double_as_float128): New function. (modified_type_die): For powerpc64le IEEE 754 quad long double and complex long double emit those as DW_TAG_typedef to _Float128 or complex _Float128 base type.
2022-01-26c++: Fix up handling of vector CONSTRUCTORs with vectors in it in ↵Jakub Jelinek2-0/+22
constexpr.cc [PR104226] The middle-end uses sometimes VECTOR_TYPE CONSTRUCTORs that contain some other VECTOR_TYPE elements in it (should be with compatible element size and smaller number of elements, e.g. a V8SImode vector can be constructed as { V4SImode_var_1, V4SImode_var_2 }), and expansion of __builtin_shufflevector emits these early, so constexpr.cc can see those too. constexpr.cc already has special cases for NULL index which is typical for VECTOR_TYPE CONSTRUCTORs, and for VECTOR_TYPE CONSTRUCTORs that contain just scalar elts that works just fine - init_subob_ctx just returns on non-aggregate elts and get_or_insert_ctor_field has if (TREE_CODE (type) == VECTOR_TYPE && index == NULL_TREE) { CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (ctor), index, NULL_TREE); return &CONSTRUCTOR_ELTS (ctor)->last(); } handling for it. But for the vector in vector case init_subob_ctx would try to create a sub-CONSTRUCTOR and even didn't handle the NULL index case well, so instead of creating the sub-CONSTRUCTOR after the elts already in it overwrote the first one. So (V8SImode) { { 0, 0, 0, 0 }, { 0, 0, 0, 0 } } became (V8SImode) { 0, 0, 0, 0 } The following patch fixes it by not forcing a sub-CONSTRUCTOR for this vector in vector case. 2022-01-26 Jakub Jelinek <jakub@redhat.com> PR c++/104226 * constexpr.cc (init_subob_ctx): For vector ctors containing vector elements, ensure appending to the same ctor instead of creating another one. * g++.dg/cpp0x/constexpr-104226.C: New test.
2022-01-26warn-access: Prevent -Wuse-after-free on ARM [PR104213]Marek Polacek5-3/+40
Here, -Wuse-after-free warns about using 'this' which, on ARM, cdtors return, as mandated by the EABI. To be entirely correct, it only requires it for C1 and C2 ctors and D2 and D1 dtors, but I don't feel like changing that now and possibly running into issues later on. This patch uses suppress_warning on 'this' for certain cdtor_returns_this cases in the C++ FE, and then warn_invalid_pointer makes use of this information and doesn't warn. In my first attempt I tried suppress_warning the MODIFY_EXPR or RETURN_EXPR we build in build_delete_destructor_body, but the complication is that the suppress_warning bits don't always survive gimplification; see e.g. gimplify_modify_expr where we do 6130 if (COMPARISON_CLASS_P (*from_p)) 6131 copy_warning (assign, *from_p); but here we're not dealing with a comparison. Removing that check regresses uninit-pr74762.C. Adding copy_warning (assign, *expr_p) regresses c-c++-common/uninit-17.c. PR target/104213 gcc/cp/ChangeLog: * decl.cc (finish_constructor_body): Suppress -Wuse-after-free. (finish_destructor_body): Likewise. * optimize.cc (build_delete_destructor_body): Likewise. gcc/ChangeLog: * gimple-ssa-warn-access.cc (pass_waccess::warn_invalid_pointer): Don't warn when the SSA_NAME_VAR of REF has supressed -Wuse-after-free. gcc/testsuite/ChangeLog: * g++.dg/warn/Wuse-after-free2.C: New test. * g++.dg/warn/Wuse-after-free3.C: New test.
2022-01-26c++: ->template and using-decl [PR104235]Jason Merrill2-1/+10
cp_parser_template_id wasn't prepared to handle getting a USING_DECL back from cp_parser_template_name. Let's defer that case to instantiation time, as well. PR c++/104235 gcc/cp/ChangeLog: * parser.cc (cp_parser_template_name): Repeat lookup of USING_DECL. gcc/testsuite/ChangeLog: * g++.dg/parse/template-keyword2.C: New test.
2022-01-26IPA mod-ref: fix usage of --param names in dump messages.Martin Liska4-14/+11
gcc/ChangeLog: * ipa-modref-tree.cc (modref_access_node::update): Remove "--param param=foo" with "--param foo". (modref_access_node::insert): Likewise. (modref_access_node::insert_kill): Likewise. * ipa-modref-tree.h (struct modref_ref_node): Likewise. (struct modref_base_node): Likewise. (struct modref_tree): Likewise. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/modref-7.c: Update scanned patterns. * gcc.dg/tree-ssa/modref-8.c: Likewise.
2022-01-26rtl: builtins: Fix builtins feclearexcept and feraiseexcept operand check ↵Raoni Fassina Firmino1-0/+3
[PR94193] Commit 4343f5e25679 ("rtl: builtins: (not just) rs6000: Add builtins for fegetround, feclearexcept and feraiseexcept [PR94193]") broke gcc bootstra when building with --enable-checking=rtl[1]. The function expand_builtin_feclear_feraise_except was failing to proper validate op0 predicate before emit_insn leading to the mismatch type failure. [1] https://gcc.gnu.org/pipermail/gcc-patches/2022-January/589186.html 2022-01-26 Raoni Fassina Firmino <raoni@linux.ibm.com> gcc/ PR target/94193 * builtins.cc (expand_builtin_feclear_feraise_except): Add op0 predicate check. Signed-off-by: Raoni Fassina Firmino <raoni@linux.ibm.com>
2022-01-26analyzer: fix missing uninit warning on args to stdio builtins [PR104224]David Malcolm3-0/+119
We were failing to check for uninitialized arguments to stdio builtins, such as when passing local "go" to the call to "printf" in "main" in the testcase. gcc/analyzer/ChangeLog: PR analyzer/104224 * region-model.cc (region_model::check_call_args): New. (region_model::on_call_pre): Call it when ignoring stdio builtins. * region-model.h (region_model::check_call_args): New decl gcc/testsuite/ChangeLog: PR analyzer/104224 * gcc.dg/analyzer/pr104224.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-01-26analyzer: fix sense in range::add_bound [PR94362]David Malcolm1-14/+79
Mikael Morin spotted that I got the sense wrong when discarding redundant constraints in r12-6782-gc4b8f3730a80025192fdb485ad2535c165340e41. Fixed as follows, which also moves the rejection of contradictory constraints in range::add_bound to earlier, so that this code can be self-tested. gcc/analyzer/ChangeLog: PR analyzer/94362 * constraint-manager.cc (range::add_bound): Fix tests for discarding redundant constraints. Perform test for rejecting unsatisfiable constraints earlier so that they don't update the object on failure. (selftest::test_range): New. (selftest::test_constant_comparisons): Add test coverage for existing constraints becoming narrower until they are unsatisfiable. (selftest::run_constraint_manager_tests): Call test_range. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-01-26testsuite: Fix up pr104188.c testcase for i686-linux [PR104188]Jakub Jelinek1-1/+2
On i686-linux this new testcase FAILs with: cc1: warning: SSE instruction set disabled, using 387 arithmetics FAIL: gcc.target/i386/pr104188.c (test for excess errors) Excess errors: cc1: warning: SSE instruction set disabled, using 387 arithmetics This is because it uses -mfpmath=sse, but -msse2 isn't on. Fixed by adding -msse2 to dg-options and requiring sse2_runtime effective target. 2022-01-26 Jakub Jelinek <jakub@redhat.com> PR target/104188 * gcc.target/i386/pr104188.c: Add dg-require-effective-target sse2_runtime. Add -msse2 to dg-options.
2022-01-25c++: alias template and typename [PR103057]Jason Merrill2-0/+26
Usually we handle DR1558 substitution near the top of tsubst, but in this case while substituting TYPENAME_TYPE we were passing an alias specialization to tsubst_aggr_type, which ignored its aliasness. PR c++/103057 gcc/cp/ChangeLog: * pt.cc (tsubst_aggr_type): Call tsubst for alias template specialization. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/alias-decl-void1.C: New test.
2022-01-26Daily bump.GCC Administrator5-1/+101
2022-01-25Avoid recomputing PHI results after failure (PR104203).Martin Sebor4-17/+32
Resolves: PR tree-optimization/104203 - huge compile-time regression in pointer_query gcc/ChangeLog: PR tree-optimization/104203 * gimple-ssa-warn-access.cc (pass_data pass_data_waccess): Use TV_WARN_ACCESS. * pointer-query.cc (access_ref::merge_ref): Change return type. Convert failure to a conservative success. (access_ref::get_ref): Adjust to the change above. Short-circuit PHI evaluation after first failure turned into conservative success. * pointer-query.h (access_ref::merge_ref): Change return type. * timevar.def (TV_WARN_ACCESS): New timer variable.
2022-01-25Fortran: MOLD argument to TRANSFER intrinsic having storage size zeroHarald Anlauf2-1/+12
gcc/fortran/ChangeLog: PR fortran/104227 * check.cc (gfc_calculate_transfer_sizes): Fix checking of arrays passed as MOLD argument to the TRANSFER intrinsic for having storage size zero. gcc/testsuite/ChangeLog: PR fortran/104227 * gfortran.dg/transfer_check_6.f90: New test.
2022-01-25Fortran: optional argument DIM for intrinsics NORM2, PARITY must be scalarHarald Anlauf2-0/+20
gcc/fortran/ChangeLog: PR fortran/104212 * check.cc (gfc_check_norm2): Check that optional argument DIM is scalar. (gfc_check_parity): Likewise. gcc/testsuite/ChangeLog: PR fortran/104212 * gfortran.dg/argument_checking_26.f90: New test.
2022-01-25c++: deleted fn and noexcept inst [PR101532, PR104225]Patrick Palka3-0/+19
Here when attempting to use B's implicitly deleted default constructor, mark_used rightfully returns false, but for the wrong reason: it tries to instantiate the synthesized noexcept specifier which then only silently fails because get_defaulted_eh_spec suppresses diagnostics for deleted functions. This lack of diagnostics causes us to crash on the first testcase below (thanks to the assert in finish_expr_stmt), and silently accept the second testcase. To fix this, this patch makes mark_used avoid attempting to instantiate the noexcept specifier of a deleted function, so that we'll instead directly reject (and diagnose) the function due to its deletedness. PR c++/101532 PR c++/104225 gcc/cp/ChangeLog: * decl2.cc (mark_used): Don't consider maybe_instantiate_noexcept on a deleted function. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/nsdmi-template21.C: New test. * g++.dg/cpp0x/nsdmi-template21a.C: New test.
2022-01-25c++: assignment to temporary [PR59950]Jason Merrill2-1/+10
Given build_this of a TARGET_EXPR, cp_build_fold_indirect_ref returns the TARGET_EXPR. But that's the wrong value category for the result of the defaulted class assignment operator, which returns an lvalue, so we need to actually build the INDIRECT_REF. PR c++/59950 gcc/cp/ChangeLog: * call.cc (build_over_call): Use cp_build_indirect_ref. gcc/testsuite/ChangeLog: * g++.dg/init/assign2.C: New test.
2022-01-25aix: AIX is not GLIBC.David Edelsohn1-0/+1
A recent patch added tests for OPTION_GLIBC that is defined in linux.h and linux64.h. This broke bootstrap for non-Linux rs6000 configurations. This patch defines OPTION_GLIBC as 0. * config/rs6000/aix.h (OPTION_GLIBC): Define as 0.
2022-01-25tree-optimization/104214 - amend PR100740 fix for pointer comparesRichard Biener2-3/+28
When we have a pointer relational compare we have stronger guarantees about overflow, in particular rewriting BASE0 + STEP0 cmp BASE1 + STEP1 as BASE0 + STEP0 - STEP1 cmp BASE1 is always valid and the new IV0 does not overflow. The patch basically reverts the previous change when pointers are involved, keeping only the more conservative handling for equality compares which can involve comparing different object addresses. 2022-01-25 Richard Biener <rguenther@suse.de> PR tree-optimization/104214 * tree-ssa-loop-niter.cc (number_of_iterations_cond): Use stronger guarantees for relational pointer compares when rewriting BASE0 + STEP0 cmp BASE1 + STEP1 as BASE0 + STEP0 - STEP1 cmp BASE1. * gcc.dg/vect/pr81196-2.c: New variant testcase only requiring vect_int.
2022-01-25Fortran: do not run signaling testsuite on 32-bit x86/x86_64Francois-Xavier Coudert1-1/+2
gcc/testsuite/ChangeLog: * gfortran.dg/ieee/signaling_3.f90: Skip test on 32-bit x86/x86_64.
2022-01-25Fortran: fix typo in signaling NaN testcaseFrancois-Xavier Coudert1-2/+2
gcc/testsuite/ChangeLog: * gfortran.dg/ieee/signaling_1.f90: Fix test.
2022-01-25rs6000: Remove GCC 8.1 U10__float128 mangling compatibility [PR104172]Jakub Jelinek3-67/+1
In GCC 7.x and earlier, while it had -mabi=ieeelongdouble option, that option was undocumented and unsupported. In GCC 8.1 that option got documented and -mabi=ieeelongdouble long double started to be mangled as U10__float128. In GCC 9 and backported to before 8.2 release, that mangling changed to u9__ieee128 and a support for emitting compatibility mangling aliases have been added. Unfortunately, as mentioned in the PR, those don't really work well in many cases, the free_lang_data pass throws away important trees, so e.g. with -flto -ffat-lto-objects the compiler often ICEs on templates that involve IEEE quad long double arguments etc. because the mangling was done too late (at final time). Furthermore, lto1's mangler is not the C++ mangler, so with -flto it would often emit as "mangled identifiers" something that wasn't a valid assembler identifier, e.g. operator+ etc. While it is possible to do such mangling earlier, e.g. at the same time when the C++ FE emits its mangling aliases and untested proof of concept is in the PR, there seems to be agreement that we shouldn't bother with this ABI compatibility with something that probably nobody really used. GCC 8.2 already uses the new mangling, it was just a few months, but more importantly, libstdc++ support for IEEE quad long double on powerpc64le-linux was only added in GCC 11, and glibc support for that some weeks after 8.2 got released. So, the following patch just drops those aliases. 2022-01-25 Jakub Jelinek <jakub@redhat.com> PR target/104172 gcc/ * config/rs6000/rs6000-internal.h (rs6000_passes_ieee128): Don't declare. * config/rs6000/rs6000.cc (rs6000_passes_ieee128, ieee128_mangling_gcc_8_1): Remove. (TARGET_ASM_GLOBALIZE_DECL_NAME): Don't redefine. (rs6000_mangle_type): Return "u9__ieee128" instead of ieee128_mangling_gcc_8_1 ? "U10__float128" : "u9__ieee128". (rs6000_globalize_decl_name): Remove. * config/rs6000/rs6000-call.cc (init_cumulative_args, rs6000_function_arg_advance_1): Don't set rs6000_passes_ieee128.
2022-01-25Daily bump.GCC Administrator6-1/+271
2022-01-24Remove duplicate code block.Martin Sebor1-30/+0
gcc/ChangeLog: * pointer-query.cc (pointer_query::dump): Remove duplicate block.
2022-01-24preprocessor: -Wbidi-chars and UCNs [PR104030]Marek Polacek20-19/+92
Stephan Bergmann reported that our -Wbidi-chars breaks the build of LibreOffice because we warn about UCNs even when their usage is correct: LibreOffice constructs strings piecewise, as in: aText = u"\u202D" + aText; and warning about that is overzealous. Since no editor (AFAIK) interprets UCNs to show them as Unicode characters, there's less risk in misinterpreting them, and so perhaps we shouldn't warn about them by default. However, identifiers containing UCNs or programs generating other programs could still cause confusion, so I'm keeping the UCN checking. To turn it on, you just need to use -Wbidi-chars=unpaired,ucn or -Wbidi-chars=any,ucn. The implementation is done by using the new EnumSet feature. PR preprocessor/104030 gcc/c-family/ChangeLog: * c.opt (Wbidi-chars): Mark as EnumSet. Also accept =ucn. gcc/ChangeLog: * doc/invoke.texi: Update documentation for -Wbidi-chars. libcpp/ChangeLog: * include/cpplib.h (enum cpp_bidirectional_level): Add bidirectional_ucn. Set values explicitly. * internal.h (cpp_reader): Adjust warn_bidi_p. * lex.cc (maybe_warn_bidi_on_close): Don't warn about UCNs unless UCN checking is on. (maybe_warn_bidi_on_char): Likewise. gcc/testsuite/ChangeLog: * c-c++-common/Wbidi-chars-10.c: Turn on UCN checking. * c-c++-common/Wbidi-chars-11.c: Likewise. * c-c++-common/Wbidi-chars-14.c: Likewise. * c-c++-common/Wbidi-chars-16.c: Likewise. * c-c++-common/Wbidi-chars-17.c: Likewise. * c-c++-common/Wbidi-chars-4.c: Likewise. * c-c++-common/Wbidi-chars-5.c: Likewise. * c-c++-common/Wbidi-chars-6.c: Likewise. * c-c++-common/Wbidi-chars-7.c: Likewise. * c-c++-common/Wbidi-chars-8.c: Likewise. * c-c++-common/Wbidi-chars-9.c: Likewise. * c-c++-common/Wbidi-chars-ranges.c: Likewise. * c-c++-common/Wbidi-chars-18.c: New test. * c-c++-common/Wbidi-chars-19.c: New test. * c-c++-common/Wbidi-chars-20.c: New test. * c-c++-common/Wbidi-chars-21.c: New test. * c-c++-common/Wbidi-chars-22.c: New test. * c-c++-common/Wbidi-chars-23.c: New test.
2022-01-24Fortran: provide a fallback implementation of issignalingFrancois-Xavier Coudert3-1/+44
For targets with IEEE support but without the issignaling macro in libc (currently, everywhere except glibc), this allows us to provide a fallback implementation. In order to keep the code in ieee_helper.c relatively readable, I've put that new implementation in a separate file, issignaling_fallback.h. libgfortran/ChangeLog: * ieee/issignaling_fallback.h: New file. * ieee/ieee_helper.c: Include issignaling_fallback.h when target does not define issignaling macro. gcc/testsuite/ChangeLog: * gfortran.dg/ieee/signaling_1.f90: Do not require issignaling. * gfortran.dg/ieee/signaling_2.f90: Add comment. * gfortran.dg/ieee/signaling_3.f90: New test.
2022-01-24rtl: builtins: (not just) rs6000: Add builtins for fegetround, feclearexcept ↵Raoni Fassina Firmino8-0/+419
and feraiseexcept [PR94193] This optimizations were originally in glibc, but was removed and suggested that they were a good fit as gcc builtins[1]. feclearexcept and feraiseexcept were extended (in comparison to the glibc version) to accept any combination of the accepted flags, not limited to just one flag bit at a time anymore. The builtin expanders needs knowledge of the target libc's FE_* values, so they are limited to expand only to suitable libcs. [1] https://sourceware.org/legacy-ml/libc-alpha/2020-03/msg00047.html https://sourceware.org/legacy-ml/libc-alpha/2020-03/msg00080.html 2020-08-13 Raoni Fassina Firmino <raoni@linux.ibm.com> gcc/ PR target/94193 * builtins.cc (expand_builtin_fegetround): New function. (expand_builtin_feclear_feraise_except): New function. (expand_builtin): Add cases for BUILT_IN_FEGETROUND, BUILT_IN_FECLEAREXCEPT and BUILT_IN_FERAISEEXCEPT. * config/rs6000/rs6000.md (fegetroundsi): New pattern. (feclearexceptsi): New Pattern. (feraiseexceptsi): New Pattern. * doc/extend.texi: Add a new introductory paragraph about the new builtins. * doc/md.texi: (fegetround@var{m}): Document new optab. (feclearexcept@var{m}): Document new optab. (feraiseexcept@var{m}): Document new optab. * optabs.def (fegetround_optab): New optab. (feclearexcept_optab): New optab. (feraiseexcept_optab): New optab. gcc/testsuite/ PR target/94193 * gcc.target/powerpc/builtin-feclearexcept-feraiseexcept-1.c: New test. * gcc.target/powerpc/builtin-feclearexcept-feraiseexcept-2.c: New test. * gcc.target/powerpc/builtin-fegetround.c: New test. Signed-off-by: Raoni Fassina Firmino <raoni@linux.ibm.com>
2022-01-24c++: Fix non-portable default argument of make_auto_1 [PR104197]Patrick Palka1-2/+3
Avoid using the macro current_template_depth, which expands to an expression that uses __FUNCTION__, within the signature of a function. PR c++/104197 gcc/cp/ChangeLog: * pt.cc (make_auto_1): Use -1 as a placeholder default argument for level.
2022-01-24c++: value category of compound object expr [PR104173]Patrick Palka2-11/+31
Here the call to (the &&-qualified) toLower() is incorrectly rejected during overload resolution because the object expression is encoded as an lvalue when it's really a prvalue. The object expression, instance()->applicationName(), is encoded as an INDIRECT_REF of a COMPOUND_EXPR *(*instance ();, &TARGET_EXPR <D.2383, QCoreApplication::applicationName ()>;); which lvalue_kind deems an lvalue. This issue is similar to PR88103 except that here the original compound object expression is a prvalue rather than an xvalue. The fix there was to adjust the result of unary_complex_lvalue in build_class_member_access_expr so that xvalueness of the original expression is preserved. This patch extends that fix so that rvalueness is preserved more generally. PR c++/104173 gcc/cp/ChangeLog: * typeck.cc (build_class_member_access_expr): Extend unary_complex_lvalue result adjustment to preserve all rvalues, not just xvalues. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/ref-qual21.C: New test.
2022-01-24tree-optimization/102131 - fix niter analysis wrt overflowRichard Biener8-10/+143
This fixes the overflow issues seen with analyzing BASE0 + STEP0 cmp BASE1 + STEP1 as BASE0 + STEP0 - STEP1 cmp BASE1 by following the logic we have when simplifying comparisons. 2022-01-24 Richard Biener <rguenther@suse.de> Jiufu Guo <guojiufu@linux.ibm.com> PR tree-optimization/100740 PR tree-optimization/101508 PR tree-optimization/101972 PR tree-optimization/102131 * tree-ssa-loop-niter.cc (number_of_iterations_cond): Properly constrain BASE0 + STEP0 cmp BASE1 + STEP1 to BASE0 + STEP0 - STEP1 cmp BASE1 transform. * gcc.dg/torture/pr100740.c: New testcase. * gcc.dg/torture/pr101508.c: Likewise. * gcc.dg/torture/pr101972.c: Likewise. * gcc.dg/torture/pr102131-1.c: Likewise. * gcc.dg/torture/pr102131-2.c: Likewise. * gcc.dg/torture/pr102131-3.c: Likewise. * gcc.dg/torture/pr102131-4.c: Likewise.
2022-01-24options: Add EnumBitSet property support [PR104158]Jakub Jelinek8-22/+81
On Sat, Jan 22, 2022 at 01:47:08AM +0100, Jakub Jelinek via Gcc-patches wrote: > I think with the 2) patch I achieve what we want for Fortran, for 1) > the only behavior from gcc 11 is that > -fsanitize-coverage=trace-cmp,trace-cmp is now rejected. > This is mainly from the desire to disallow > -fconvert=big-endian,little-endian or -Wbidi-chars=bidirectional,any > etc. where it would be confusing to users what exactly it means. > But it is the only from these options that actually acts as an Enum > bit set, each enumerator can be specified with all the others. > So one option would be stop requiring the EnumSet implies Set properties > must be specified and just require that either they are specified on all > EnumValues, or on none of them; the latter case would be for > -fsanitize-coverage= and the non-Set case would mean that all the > EnumValues need to have disjoint Value bitmasks and that they can > be all specified and unlike the Set case also repeated. > Thoughts on this? Here is an incremental patch to the first two patches of the series that implements EnumBitSet that fully restores the -fsanitize-coverage GCC 11 behavior. 2022-01-24 Jakub Jelinek <jakub@redhat.com> PR sanitizer/104158 * opt-functions.awk (var_set): Handle EnumBitSet property. * optc-gen.awk: Don't disallow RejectNegative if EnumBitSet is specified. * opts.h (enum cl_enum_var_value): New type. * opts-common.cc (decode_cmdline_option): Use CLEV_* values. Handle CLEV_BITSET. (cmdline_handle_error): Handle CLEV_BITSET. * opts.cc (test_enum_sets): Also test EnumBitSet requirements. * doc/options.texi (EnumBitSet): Document. * common.opt (fsanitize-coverage=): Use EnumBitSet instead of EnumSet. (trace-pc, trace-cmp): Drop Set properties. * gcc.dg/sancov/pr104158-7.c: Adjust for repeating of arguments being allowed.
2022-01-24fortran: Extend -fconvert= option for ppc64le r16_ieee and r16_ibmJakub Jelinek2-6/+15
This patch on top of the previously posted option handling changes patch allows specifying -fconvert=swap,r16_ieee etc. (but will error on it when not on powerpc64le because in the library such swapping is only implemented for HAVE_REAL_17). 2022-01-24 Jakub Jelinek <jakub@redhat.com> * lang.opt (fconvert=): Add EnumSet property and mention also r16_ieee and r16_ibm arguments. (big-endian, little-endian, native, swap): Add Set(1) property. (r16_ieee, r16_ibm): New EnumValue entries with Set(2) property. * trans-types.cc (gfc_init_kinds): Emit gfc_fatal_error for -fconvert=r16_ieee or -fconvert=r16_ibm when R16_IEEE <=> R16_IBM conversions aren't supported.
2022-01-24options: Fix up -fsanitize-coverage= [PR104158]Jakub Jelinek10-11/+79
This is incremental patch to fix up -fsanitize-coverage= option handling, allow -fno-sanitize-coverage= again, allow both options together in one option or make -fsanitize-coverage=trace-pc -fsanitize-coverage=trace-cmp actually enable both suboptions rather than the last one. 2022-01-24 Jakub Jelinek <jakub@redhat.com> PR sanitizer/104158 * common.opt (flag_sanitize_coverage): Remove Variable entry. (fsanitize-coverage=): Remove RejectNegative property, add Var(flag_sanitize_coverage) and EnumSet properties. (trace-pc): Add Set(1) property. (trace-cmp): Add Set(2) property. * opts.cc (common_handle_option): Don't handle OPT_fsanitize_coverage_. * gcc.dg/spellcheck-options-24.c: New test. * gcc.dg/sancov/pr104158-1.c: New test. * gcc.dg/sancov/pr104158-2.c: New test. * gcc.dg/sancov/pr104158-3.c: New test. * gcc.dg/sancov/pr104158-4.c: New test. * gcc.dg/sancov/pr104158-5.c: New test. * gcc.dg/sancov/pr104158-6.c: New test. * gcc.dg/sancov/pr104158-7.c: New test.
2022-01-24options: Add EnumSet and Set property support [PR104158]Jakub Jelinek7-19/+233
The following patch is infrastructure support for at least 3 different options that need changes: 1) PR104158 talks about a regression with the -fsanitizer-coverage= option; in GCC 11 and older and on trunk prior to r12-1177, this option behaved similarly to -f{,no-}sanitizer{,-recover}= options, namely that the option allows negative and argument of the option is a list of strings, each of them has some enumerator and -fsanitize-coverage= enabled those bits in the underlying flag_sanitize_coverage, while -fno-sanitize-coverage= disabled them. So, -fsanitize-coverage=trace-pc,trace-cmp was equivalent to -fsanitize-coverage=trace-pc -fsanitize-coverage=trace-cmp and both set flag_sanitize_coverage to (SANITIZE_COV_TRACE_PC | SANITIZE_COV_TRACE_CMP) Also, e.g. -fsanitize-coverage=trace-pc,trace-cmp -fno-sanitize-coverage=trace-pc would in the end set flag_sanitize_coverage to SANITIZE_COV_TRACE_CMP (first set both bits, then subtract one) The r12-1177 change, I think done to improve argument misspelling diagnostic, changed the option incompatibly in multiple ways, -fno-sanitize-coverage= is now rejected, only a single argument is allowed, not multiple and -fsanitize-coverage=trace-pc -fsanitize-coverage=trace-cmp enables just SANITIZE_COV_TRACE_CMP and not both (each option overrides the previous value) 2) Thomas Koenig wants to extend Fortran -fconvert= option for the ppc64le real(kind=16) swapping support; currently the option accepts -fconvert={native,swap,big-endian,little-endian} and the intent is to add support for -fconvert=r16_ibm and -fconvert=r16_ieee (that alone is just normal Enum), but also to handle -fconvert=swap,r16_ieee or -fconvert=r16_ieee,big-endian but not -fconvert=big-endian,little-endian - the native/swap/big-endian/little-endian are one mutually exclusive set and r16_ieee/r16_ibm another one. See https://gcc.gnu.org/pipermail/gcc-patches/2022-January/587943.html and thread around that. 3) Similarly Marek Polacek wants to extend the -Wbidi-chars= option, such that it will handle not just the current -Wbidi-chars={none,bidirectional,any}, but also -Wbidi-chars=ucn and bidirectional,ucn and ucn,any etc. Again two separate sets, one none/bidirectional/any and another one ucn. See https://gcc.gnu.org/pipermail/gcc-patches/2022-January/588960.html The following patch adds framework for this and I'll post incremental patches for 1) and 2). As I've tried to document, such options are marked by additional EnumSet property on the option and in that case all the EnumValues in the Enum referenced from it must use a new Set property with set number (initially I wanted just mark last enumerator in each mutually exclusive set, but optionlist is sorted and so it doesn't really work well). So e.g. for the Fortran -fconvert=, one specifies: fconvert= Fortran RejectNegative Joined Enum(gfc_convert) EnumSet Var(flag_convert) Init(GFC_FLAG_CONVERT_NATIVE) -fconvert=<big-endian|little-endian|native|swap|r16_ieee|r16_ibm> The endianness used for unformatted files. Enum Name(gfc_convert) Type(enum gfc_convert) UnknownError(Unrecognized option to endianness value: %qs) EnumValue Enum(gfc_convert) String(big-endian) Value(GFC_FLAG_CONVERT_BIG) Set(1) EnumValue Enum(gfc_convert) String(little-endian) Value(GFC_FLAG_CONVERT_LITTLE) Set(1) EnumValue Enum(gfc_convert) String(native) Value(GFC_FLAG_CONVERT_NATIVE) Set(1) EnumValue Enum(gfc_convert) String(swap) Value(GFC_FLAG_CONVERT_SWAP) Set(1) EnumValue Enum(gfc_convert) String(r16_ieee) Value(GFC_FLAG_CONVERT_R16_IEEE) Set(2) EnumValue Enum(gfc_convert) String(r16_ibm) Value(GFC_FLAG_CONVERT_R16_IBM) Set(2) and this says to the option handling code that 1) if only one arg is specified to one instance of the option, it can be any of those 6 2) if two args are specified, one has to be from the first 4 and another from the last 2, in any order 3) at most 2 args may be specified (there are just 2 sets) There is a requirement on the Value values checked in self-test, the values from one set ored together must be disjunct from values from another set ored together. In the Fortran case, the first 4 are 0-3 so mask is 3, and the last 2 are 4 and 8, so mask is 12. When say -fconvert=big-endian is specified, it sets the first set to GFC_FLAG_CONVERT_BIG (2) but doesn't modify whatever value the other set had, so e.g. -fconvert=big-endian -fconvert=r16_ieee -fconvert=r16_ieee -fconvert=big-endian -fconvert=r16_ieee,big_endian -fconvert=big_endian,r16_ieee all behave the same. Also, with the EnumSet support, it is now possible to allow not specifying RejectNegative - we can set some set's value and then clear it and set it again to some other value etc. I think with the 2) patch I achieve what we want for Fortran, for 1) the only behavior from gcc 11 is that -fsanitize-coverage=trace-cmp,trace-cmp is now rejected. This is mainly from the desire to disallow -fconvert=big-endian,little-endian or -Wbidi-chars=bidirectional,any etc. where it would be confusing to users what exactly it means. But it is the only from these options that actually acts as an Enum bit set, each enumerator can be specified with all the others. So one option would be stop requiring the EnumSet implies Set properties must be specified and just require that either they are specified on all EnumValues, or on none of them; the latter case would be for -fsanitize-coverage= and the non-Set case would mean that all the EnumValues need to have disjoint Value bitmasks and that they can be all specified and unlike the Set case also repeated. Thoughts on this? 2022-01-24 Jakub Jelinek <jakub@redhat.com> PR sanitizer/104158 * opt-functions.awk (var_set): Handle EnumSet property. * optc-gen.awk: Don't disallow RejectNegative if EnumSet is specified. * opt-read.awk: Handle Set property. * opts.h (CL_ENUM_SET_SHIFT, CL_ERR_ENUM_SET_ARG): Define. (struct cl_decoded_option): Mention enum in value description. Add mask member. (set_option): Add mask argument defaulted to 0. * opts.cc (test_enum_sets): New function. (opts_cc_tests): Call it. * opts-common.cc (enum_arg_to_value): Change return argument from bool to int, on success return index into the cl_enum_arg array, on failure -1. Add len argument, if non-0, use strncmp instead of strcmp. (opt_enum_arg_to_value): Adjust caller. (decode_cmdline_option): Handle EnumSet represented as CLVC_ENUM with non-zero var_value. Initialize decoded->mask. (decode_cmdline_options_to_array): CLear opt_array[0].mask. (handle_option): Pass decoded->mask to set_options last argument. (generate_option): Clear decoded->mask. (generate_option_input_file): Likewise. (cmdline_handle_error): Handle CL_ERR_ENUM_SET_ARG. (set_option): Add mask argument, use it for CLVC_ENUM. (control_warning_option): Adjust enum_arg_to_value caller. * doc/options.texi: Document Set and EnumSet properties.
2022-01-24properly disable -fsplit-stack on non-glibc targets [PR104170]Jakub Jelinek8-44/+71
On Sat, Jan 22, 2022 at 10:32:21AM +0100, Martin Liška wrote: > I've just noticed the patch broke a few cross compilers: > > s390x-ibm-tpf: > > /home/marxin/buildworker/zen2-cross-compilers/build/gcc/common/config/s390/s390-common.cc: In function ‘bool s390_supports_split_stack(bool, gcc_options*)’: > /home/marxin/buildworker/zen2-cross-compilers/build/gcc/common/config/s390/s390-common.cc:126:13: error: ‘struct gcc_options’ has no member named ‘x_linux_libc’ > 126 | if (opts->x_linux_libc == LIBC_GLIBC) > | ^~~~~~~~~~~~ > > i686-kopensolaris-gnu, i686-symbolics-gnu > > /home/marxin/buildworker/zen2-cross-compilers/build/gcc/common/config/i386/i386-common.cc: In function ‘bool ix86_supports_split_stack(bool, gcc_options*)’: > /home/marxin/buildworker/zen2-cross-compilers/build/gcc/common/config/i386/i386-common.cc:1721:13: error: ‘struct gcc_options’ has no member named ‘x_linux_libc’ > 1721 | if (opts->x_linux_libc != LIBC_GLIBC) > | ^~~~~~~~~~~~ > make[1]: *** [Makefile:2418: i386-common.o] Error 1 > > Can you please take a look? Btw. do you have a bugzilla account? I bet instead of opts->x_linux_libc != LIBC_GLIBC it needs to use #ifdef OPTION_GLIBC if (!OPTION_GLIBC) #endif or so. I think the first committed patch actually used that but used it in #if directive, which is wrong because it is something that needs to be evaluated at runtime. That doesn't work well either, because the *supports_split_stack hooks have opts argument and OPTION_GLIBC doesn't take that. So, here is a patch that introduces OPTION_*_P macros that take opts as an argument and redefines OPTION_* using those (similarly to how the option scripts create TARGET_*_P and TARGET_* macros). 2022-01-24 Jakub Jelinek <jakub@redhat.com> PR bootstrap/104170 * config/linux.h (OPTION_GLIBC_P, OPTION_UCLIBC_P, OPTION_BIONIC_P, OPTION_MUSL_P): Define. (OPTION_GLIBC, OPTION_UCLIBC, OPTION_BIONIC, OPTION_MUSL): Redefine using OPTION_*_P macros. * config/alpha/linux.h (OPTION_GLIBC_P, OPTION_UCLIBC_P, OPTION_BIONIC_P, OPTION_MUSL_P): Define. (OPTION_GLIBC, OPTION_UCLIBC, OPTION_BIONIC, OPTION_MUSL): Redefine using OPTION_*_P macros. * config/rs6000/linux.h (OPTION_GLIBC_P, OPTION_UCLIBC_P, OPTION_BIONIC_P, OPTION_MUSL_P): Define. (OPTION_GLIBC, OPTION_UCLIBC, OPTION_BIONIC, OPTION_MUSL): Redefine using OPTION_*_P macros. * config/rs6000/linux64.h (OPTION_GLIBC_P, OPTION_UCLIBC_P, OPTION_BIONIC_P, OPTION_MUSL_P): Define. (OPTION_GLIBC, OPTION_UCLIBC, OPTION_BIONIC, OPTION_MUSL): Redefine using OPTION_*_P macros. * config/fuchsia.h (OPTION_MUSL_P): Redefine. * config/glibc-stdint.h (OPTION_MUSL_P): Define if not defined. * common/config/s390/s390-common.cc (s390_supports_split_stack): Re-add ATTRIBUTE_UNUSED to opts parameter. If OPTION_GLIBC_P is defined, use OPTION_GLIBC_P (opts) as condition, otherwise assume if (false). * common/config/i386/i386-common.cc (ix86_supports_split_stack): If OPTION_GLIBC_P is defined use !OPTION_GLIBC_P (opts) as condition, otherwise assume if (true).
2022-01-24RISC-V: Fix testcase after bump isa spec versionKito Cheng1-1/+1
Extension version might be different among different ISA spec version, add explicitly isa-spec version to prevent that might fail when build GCC with different default ISA version. gcc/testsuite/ChangeLog * gcc.target/riscv/attribute-19.c: Add -misa-spec=2.2
2022-01-24RISC-V: Do not emit zcisr and zifencei if i-ext is 2.0Kito Cheng1-2/+12
I-ext 2.0 already included zicsr and zifencei, skip that prevent confusing binutils. gcc/ChangeLog * common/config/riscv/riscv-common.cc (riscv_subset_list::to_string): Skip zicsr and zifencei if I-ext is 2.0.
2022-01-24RISC-V: Change default ISA version into 20191213Jia-Wei Chen1-4/+4
Bump default ISA spec to newer version 20191213, current default ISA spec is 2.2, but it's already out of date for a long time, sync with binutils ISA version, convention in toolchain use. gcc/ChangeLog: * config.gcc: Modify default isa_spec version.
2022-01-24Update the type of control.base after changedJiufu Guo2-2/+28
This patch correct the type of niter->control.base, when it is updated as a PLUS expr. During build PLUS expr, the result type should align with the type of the operands. PR tree-optimization/102087 gcc/ChangeLog: * tree-ssa-loop-niter.cc (number_of_iterations_until_wrap): Correct PLUS result type. gcc/testsuite/ChangeLog: * gcc.dg/pr102087_1.c: New test.
2022-01-24RISC-V: Update testcases info with new implement infoLiaoShihua3-3/+3
After commit 591b6e00d1bfe12932ca31530d5859f95db8a35a " riscv: fix -Wformat-diag errors ", some strings in implement was changed. This patch update the check info in testcases to sync with it. gcc/testsuite/ChangeLog: * gcc.target/riscv/arch-9.c: Update the check info. * gcc.target/riscv/arch-10.c: Ditto. * gcc.target/riscv/arch-12.c: Ditto.
2022-01-23testsuite: Ignore pr104159 psabi warning.David Edelsohn1-1/+1
gcc/testsuite/ChangeLog: * gcc.dg/analyzer/torture/pr104159.c: Ignore psabi warning.
2022-01-23x86: Also check mode of memory broadcast in bcst_mem_operandH.J. Lu2-0/+72
Return false for invalid mode on memory broadcast in bcst_mem_operand: (vec_duplicate:V16SF (mem/j:V4SF (reg/v/f:DI 109 [ b ]))) gcc/ PR target/104188 * config/i386/predicates.md (bcst_mem_operand): Also check mode of memory broadcast. gcc/testsuite/ PR target/104188 * gcc.target/i386/pr104188.c: New test.