Skip to content
Snippets Groups Projects
  1. May 02, 2022
    • Richard Biener's avatar
      tree-optimization/104240 - SLP discovery with swapped comparisons · 41e3db05
      Richard Biener authored
      The following extends SLP discovery to handle swapped operands
      in comparisons.
      
      2022-05-02  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/104240
      	* tree-vect-slp.cc (op1_op0_map): New.
      	(vect_get_operand_map): Handle compares.
      	(vect_build_slp_tree_1): Support swapped operands for
      	tcc_comparison.
      
      	* gcc.dg/vect/bb-slp-pr104240.c: New testcase.
      41e3db05
    • Patrick Palka's avatar
      libstdc++: Don't use std::tolower in <charconv> [PR103911] · 86d821dd
      Patrick Palka authored
      As with std::isdigit in r12-6281-gc83ecfbe74a5cf, we shouldn't be using
      std::tolower in <charconv> either.
      
      	PR libstdc++/103911
      
      libstdc++-v3/ChangeLog:
      
      	* src/c++17/floating_from_chars.cc (find_end_of_float): Accept
      	two delimeters for the exponent part in the form of a possibly
      	NULL string of length two.  Don't use std::tolower.
      	(pattern): Adjust calls to find_end_of_float accordingly.
      86d821dd
    • Patrick Palka's avatar
      libstdc++: case-sensitivity in hexfloat std::from_chars [PR105441] · 576f975c
      Patrick Palka authored
      The hexfloat parser for binary32/64 added in r12-6645-gcc3bf3404e4b1c
      overlooked that the exponent part can also begin with an uppercase 'P'.
      
      	PR libstdc++/105441
      
      libstdc++-v3/ChangeLog:
      
      	* src/c++17/floating_from_chars.cc (__floating_from_chars_hex):
      	Also accept 'P' as the start of the exponent.
      	* testsuite/20_util/from_chars/7.cc: Add corresponding testcase.
      576f975c
    • Jakub Jelinek's avatar
      expand: Throw away non-external decls without varpool nodes [PR105415] · 02f03c5c
      Jakub Jelinek authored
      The following testcase fails -fcompare-debug on aarch64-linux.  The problem
      is that for the n variable we create a varpool node, then remove it again
      because the var isn't really used, but it keeps being referenced in debug
      stmts/insns with -g.  Later during sched1 pass we ask whether the n var
      can be modified through some store to an anchored variable and with -g
      we create a new varpool node for it again just so that we can find its
      ultimate alias target.  Even later on we create some cgraph node for the
      loop parallelization, but as there has been an extra varpool node creation
      in between, we get higher node->order with -g than without.
      
      The patch fixes that by throwing variables without varpool nodes away
      during expansion time, they are very unlikely to actually end up with
      useful debug info anyway.
      
      I've bootstrapped/regtested the following on x86_64-linux and i686-linux,
      then bootstrapped with the patch reverted, reapplied the patch and did make
      cc1plus in stage3.  The debug section sizes are identical, .debug_info and
      .debug_loc is identical too, so I think we don't lose any debug info through
      it.
      So at least on cc1plus it makes no difference.
      
      2022-05-02  Jakub Jelinek  <jakub@redhat.com>
      
      	PR debug/105415
      	* cfgexpand.cc (expand_debug_expr): Don't make_decl_rtl_for_debug
      	if there is no symtab node for the VAR_DECL.
      
      	* gcc.dg/pr105415.c: New test.
      02f03c5c
    • Sebastian Huber's avatar
      gcov: Fix first time gcov info dump · 880a9845
      Sebastian Huber authored
      This patch fixes an issue introduced by commit
      ef9a53fe:
      
      gcc --coverage main.c && ./a.out
      libgcov profiling error:a-main.gcda:Error writing
      
      gcc/ChangeLog:
      
      	* gcov-io.cc (gcov_rewrite):  Clear the file error status.
      880a9845
    • Richard Biener's avatar
      tree-optimization/105437 - BB vect with extern defs of throwing stmts · 3a3eda00
      Richard Biener authored
      We have to watch out for vectorized stmt insert locations if the
      def from the last stmt alters control flow.  We constrain region
      building so we know the def is outside of the current region
      and thus we can insert at the region start point.
      
      2022-05-02  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/105437
      	* tree-vect-slp.cc (vect_schedule_slp_node): Handle the
      	case where last_stmt alters control flow.
      
      	* g++.dg/vect/pr105437.cc: New testcase.
      3a3eda00
    • Richard Biener's avatar
      Use CASE_CONVERT in a few more cases · 82a344f2
      Richard Biener authored
      This uses CASE_CONVERT more which eases eventual removal of NOP_EXPR.
      
      2022-04-29  Richard Biener  <rguenther@suse.de>
      
      gcc/cp/
      	* constexpr.cc (fold_simple_1): Use CASE_CONVERT.
      	* cp-gimplify.cc (cp_fold): Likewise.
      	* pt.cc (tsubst_copy): Likewise.
      
      gcc/
      	* dojump.cc (do_jump): Use CASE_CONVERT.
      	* tree-ssa-dom.cc (edge_info::derive_equivalences): Likewise.
      82a344f2
    • Jakub Jelinek's avatar
      system.h: Include <initializer_list> in system.h unconditionally · 4a0e89b1
      Jakub Jelinek authored
      On Sun, May 01, 2022 at 07:06:53PM +0100, Jonathan Wakely wrote:
      > > >> the reason is that "gcc/analyzer/region-model.cc” uses initializer_lists, and it seems that <initializer_list>
      > > >> is not transitively included by any used headers for _LIBCPP_VERSION < 4000.  I fixed that locally by
      > > >> adding initializer_list into system.h (and adding INCLUDE_INITIALIZER_LIST to the top of gcc/analyzer/region-model.cc)
      > > >> - with that change those versions do bootstrap and test OK***
      > > >
      > > > From what I can see, with libstdc++ it works because <utility> which is
      > > > included by system.h includes <initializer_list>.
      > > > If I rename initializer_list in analyzer/region-model.ii to initializer_listx, I
      > > > also get:
      > > > ../../gcc/analyzer/region-model.cc: In function ‘void ana::selftest::test_binop_svalue_folding()’:
      > > > ../../gcc/analyzer/region-model.cc:4966:48: error: deducing from brace-enclosed initializer list requires ‘#include <initializer_list>’
      > > > 4508 |
      > > >  +++ |+#include <initializer_list>
      > > > 4509 | static void
      > > > ......
      > > > 4966 |     for (auto op : {BIT_IOR_EXPR, TRUTH_OR_EXPR})
      > > >      |                                                ^
      > > > ../../gcc/analyzer/region-model.cc:4978:49: error: deducing from brace-enclosed initializer list requires ‘#include <initializer_list>’
      > > > 4978 |     for (auto op : {BIT_AND_EXPR, TRUTH_AND_EXPR})
      > > >      |                                                 ^
      > > >
      > > > I think we have 2 options, one is do what you wrote above,
      > > > INCLUDE_INITIALIZER_LIST defined before system.h to get #include <initializer_list>.
      > > > The other option is just to include that unconditionally, it is a very small
      > > > header.  For libstdc++ it will make no difference as it is included anyway
      > > > and the header is really small there, libc++ includes <cstddef> which isn't
      > > > normally included and system.h includes <stddef.h> instead.
      > >
      > > I’d say unconditionally would be OK. I suppose the chance that any host
      > > C++ is good enough to build GCC as-is but fails to provide
      > > <initializer_list> is zero?
      > >
      >
      > Yes, definitely.
      >
      > > I’d be OK to do this change without a new RC even.
      
      2022-05-02  Jakub Jelinek  <jakub@redhat.com>
      
      	* system.h: Include initializer_list.
      4a0e89b1
    • Martin Liska's avatar
      libgcov: add ATTRIBUTE_UNUSED for dump_string · 28cfea98
      Martin Liska authored
      Mitigates the following clang warning:
      libgcc/libgcov-driver.c:416:1: warning: unused function 'dump_string' [-Wunused-function]
      
      libgcc/ChangeLog:
      
      	* libgcov-driver.c: Add ATTRIBUTE_UNUSED.
      28cfea98
    • GCC Administrator's avatar
      Daily bump. · bee8b860
      GCC Administrator authored
      bee8b860
  2. May 01, 2022
    • Segher Boessenkool's avatar
      rs6000: "Y" is DS-form, not DQ-form · 69daa924
      Segher Boessenkool authored
      2022-05-01  Segher Boessenkool  <segher@kernel.crashing.org>
      
      	* config/rs6000/constraints.md (Y constraint): Fix comment.
      69daa924
    • Aldy Hernandez's avatar
      Denormalize VR_VARYING to VR_RANGE before passing it to set_range_info_raw. · 75bbc3da
      Aldy Hernandez authored
      We are ICEing in set_range_info_raw because value_range_kind cannot be
      VR_VARYING, since SSA_NAME_RANGE_TYPE can only hold VR_RANGE /
      VR_ANTI_RANGE.  Most of the time setting a VR_VARYING as a global
      range makes no sense.  However, we can have a range spanning the
      entire domain (VR_RANGE of [MIN,MAX] which is essentially a
      VR_VARYING), if the nonzero bits are set.
      
      This was working before because set_range_info_raw allows setting
      VR_RANGE of [MIN, MAX].  However, when going through an irange, we
      normalize this to a VR_VARYING, thus causing the ICE.  It's
      interesting that other calls to set_range_info with an irange haven't
      triggered this.
      
      One solution would be to just ignore VR_VARYING and bail, since
      set_range_info* is really an update of the current range semantic
      wise.  After all, we keep the nonzero bits which provide additional
      info.  But this would be a change in behavior, so not suitable until
      after GCC 12 is released.  So in order to keep with current behavior
      we can just denormalize the varying to VR_RANGE.
      
      Tested on x86-64 Linux.
      
      	    PR tree-optimization/105432
      
      gcc/ChangeLog:
      
      	* tree-ssanames.cc (set_range_info): Denormalize VR_VARYING to
      	VR_RANGE before passing a piecewise range to set_range_info_raw.
      75bbc3da
    • GCC Administrator's avatar
      Daily bump. · 95874f95
      GCC Administrator authored
      95874f95
  3. Apr 30, 2022
    • Patrick Palka's avatar
      gengtype: remove "tree_exp" special attribute · 559bba46
      Patrick Palka authored
      The function comment for adjust_field_tree_exp says this attribute is
      for handling expression trees whose operands may contain pointers to RTL
      instead of to trees.  But ever since r0-59671-gac45df5dba5804, which
      fixed/removed the last two tree codes for which this was possible
      (WITH_CLEANUP_EXPR and GOTO_SUBROUTINE_EXPR), this special attribute is
      mostly a no-op.
      
      This patch removes it and instead just annotates struct tree_exp
      with the "length" attribute directly.  Not sure it makes a difference,
      but I use %h instead of %0 in the attribute string to be consistent with
      the other uses of the "length" attribute within tree-core.h.
      
      This changes the code generated for TS_EXP handling in gt-cp-tree.h from:
      
        case TS_EXP:
          gt_ggc_m_9tree_node ((*x).generic.exp.typed.type);
          switch ((int) (TREE_CODE ((tree) &(*x))))
            {
            default:
      	{
      	  size_t i3;
      	  size_t l3 = (size_t)(TREE_OPERAND_LENGTH ((tree) &(*x)));
      	  for (i3 = 0; i3 != l3; i3++) {
      	    gt_ggc_m_9tree_node ((*x).generic.exp.operands[i3]);
      	  }
      	}
      	break;
            }
          break;
      
      to:
      
        case TS_EXP:
          {
            size_t l3 = (size_t)(TREE_OPERAND_LENGTH ((tree)&((*x).generic.exp)));
            gt_ggc_m_9tree_node ((*x).generic.exp.typed.type);
            {
      	size_t i3;
      	for (i3 = 0; i3 != l3; i3++) {
      	  gt_ggc_m_9tree_node ((*x).generic.exp.operands[i3]);
      	}
            }
          }
      
      which seems equivalent and simpler.
      
      gcc/ChangeLog:
      
      	* gengtype.cc (adjust_field_tree_exp): Remove.
      	(adjust_field_type): Don't handle the "tree_exp" special attribute.
      	* tree-core.h (struct tree_exp): Remove "special" and "desc"
      	attributes.  Add "length" attribute.
      559bba46
    • Jason Merrill's avatar
      c-family: attribute ((aligned, mode)) [PR100545] · 0aa277bf
      Jason Merrill authored
      The problem here was that handle_mode_attribute clobbered the changes of any
      previous attribute, only copying type qualifiers to the new type.  And
      common_handle_aligned_attribute had previously set up the typedef, so when
      we later called set_underlying_type it saw DECL_ORIGINAL_TYPE set and just
      returned, even though handle_mode_attribute had messed up the TREE_TYPE.
      So, let's fix handle_mode_attribute to copy attributes, alignment, and
      typedefness to the new type.
      
      	PR c/100545
      
      gcc/c-family/ChangeLog:
      
      	* c-attribs.cc (handle_mode_attribute): Copy attributes, aligned,
      	and typedef.
      	* c-common.cc (set_underlying_type): Add assert.
      
      gcc/testsuite/ChangeLog:
      
      	* c-c++-common/attr-mode-1.c: New test.
      	* c-c++-common/attr-mode-2.c: New test.
      0aa277bf
    • GCC Administrator's avatar
      Daily bump. · 66d1e440
      GCC Administrator authored
      66d1e440
  4. Apr 29, 2022
    • Jason Merrill's avatar
      c++: reorganize friend template matching [PR91618] · e9d2adc1
      Jason Merrill authored
      The the different calling of check_explicit_specialization for class and
      namespace scope friends bothered me, so this patch combines them.
      
      	PR c++/91618
      	PR c++/96604
      
      gcc/cp/ChangeLog:
      
      	* friend.cc (do_friend): Call check_explicit_specialization here.
      	* decl.cc (grokdeclarator): Not here.
      	* decl2.cc (check_classfn): Or here.
      e9d2adc1
    • Jason Merrill's avatar
      c++: alias CTAD and member alias templates [PR104470] · 4259c229
      Jason Merrill authored
      In this testcase, we were trying to substitute into
      variant<Foo<T>>::__accepted_type, but failed to look it up because
      variant<Foo<T>> doesn't exist.  In other cases we already rewrite such
      things into a dependent reference; we need to do that for alias templates as
      well.
      
      This caused some testsuite regressions on alias uses outside of deduction
      guides, so I've made all of this rewriting conditional on a new tf_dguide
      tsubst flag.
      
      	PR c++/104470
      
      gcc/cp/ChangeLog:
      
      	* cp-tree.h (enum tsubst_flags): Add tf_dguide.
      	* pt.cc (tsubst_aggr_type): Check it.
      	(tsubst_baselink, tsubst_copy): Check it.
      	(maybe_dependent_member_ref): Check it.
      	(instantiate_alias_template): Handle it.
      	(build_deduction_guide): Set it.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp2a/explicit11.C: Second example also ill-formed.
      	* g++.dg/cpp2a/class-deduction-alias12.C: New test.
      4259c229
    • Jason Merrill's avatar
      c++: lambda capture dependent type [PR82980] · 53e72521
      Jason Merrill authored
      The stage 4 patch limited direct propagation of dependent type to capture
      field/proxy to the "current instantiation", but many more types should be
      suitable as well.
      
      	PR c++/82980
      
      gcc/cp/ChangeLog:
      
      	* lambda.cc (type_deducible_expression_p): Allow more types.
      53e72521
    • Jason Merrill's avatar
      c++: tidy auto deduction · 8189838d
      Jason Merrill authored
      In r185768 I added the !FUNCTION_DECL check, but we might as well just check
      for variable; nothing else should take this path, and asserting as much
      doesn't regress anything.
      
      gcc/cp/ChangeLog:
      
      	* decl.cc (cp_finish_decl): Only consider auto for vars.
      8189838d
    • Marek Polacek's avatar
      c++: pedwarn for empty unnamed enum in decl [PR67048] · fd0d3e91
      Marek Polacek authored
      [dcl.dcl]/5 says that
      
        enum { };
      
      is ill-formed, and since r197742 we issue a pedwarn.  However, the
      pedwarn also fires for
      
         enum { } x;
      
      which is well-formed.  So only warn when {} is followed by a ;.  This
      should be correct since you can't have "enum {}, <whatever>" -- that
      produces "expected unqualified-id before ',' token".
      
      	PR c++/67048
      
      gcc/cp/ChangeLog:
      
      	* parser.cc (cp_parser_enum_specifier): Warn about empty unnamed enum
      	only when it's followed by a semicolon.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp0x/enum42.C: New test.
      fd0d3e91
    • Jason Merrill's avatar
      c++: check completeness after auto deduction [PR80351] · 8d0fcf13
      Jason Merrill authored
      Normally we check for incomplete type in start_decl, but that obviously
      doesn't work for auto variables. Thanks to Pokechu22 for the analysis and
      testcases:
      
      "When cp_finish_decl calls cp_apply_type_quals_to_decl on a const auto or
      constexpr auto variable, the type might not be complete the first time
      (this happened when auto deduces to an initializer_list).
      cp_apply_type_quals_to_decl removes the const qualifier if the type is
      not complete, which is appropriate for grokdeclarator, on the assumption
      that the type will be complete when called by cp_finish_decl."
      
      	PR c++/80351
      
      gcc/cp/ChangeLog:
      
      	* decl.cc (cp_finish_decl): Check completeness of deduced type.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp0x/constexpr-77482.C: Adjust message.
      	* g++.dg/cpp1y/auto-fn27.C: Likewise.
      	* g++.dg/cpp1y/lambda-generic-variadic22.C: Likewise.
      	* g++.dg/cpp1z/decomp54.C: Likewise.
      	* g++.dg/cpp0x/initlist-const1.C: New test.
      	* g++.dg/warn/Wunused-var-37.C: New test.
      	* g++.dg/warn/Wunused-var-38.C: New test.
      	* g++.dg/warn/Wunused-var-39.C: New test.
      8d0fcf13
    • Thomas Koenig's avatar
      Fix exchanged period and letter in gfortan.texi. · 4a8b45e8
      Thomas Koenig authored
      gcc/fortran/ChangeLog:
      
      	* gfortran.texi: Fix exchanged period and letter.
      4a8b45e8
    • Martin Jambor's avatar
      ipa: Release body of clone_of when removing its last clone (PR 100413) · 27ee75db
      Martin Jambor authored
      In the PR, the verifier complains that we did not manage to remove the
      body of a node and it is right.  The node is kept for materialization
      of two clones but after one is materialized, the other one is removed
      as unneeded (as a part of delete_unreachable_blocks_update_callgraph).
      The problem is that the node removal does not check for this situation
      and can leave the clone_of node there with a body attached to it even
      though there is no use for it any more.  This patch does checks for it
      and handles the situation in a simlar way that
      cgraph_node::materialize_clone does it, except that it also has to be
      careful that the removed node itself does not have any clones, which
      would still need the clone_of's body.  Failing to do that results in a
      bootstrap failure.
      
      gcc/ChangeLog:
      
      2022-04-27  Martin Jambor  <mjambor@suse.cz>
      
      	PR ipa/100413
      	* cgraph.cc (cgraph_node::remove): Release body of the node this
      	is clone_of if appropriate.
      
      gcc/testsuite/ChangeLog:
      
      2022-04-27  Martin Jambor  <mjambor@suse.cz>
      
      	PR ipa/100413
      	* g++.dg/ipa/pr100413.C: New test.
      27ee75db
    • Andre Vieira's avatar
      aarch64: Add option to pr105219 testcase · 210cda73
      Andre Vieira authored
      Add option that originally caused testcase to fail for aarch64.
      
      gcc/testsuite/ChangeLog:
      
      	PR tree-optimization/105219
      	* gcc.dg/vect/pr105219.c: Add aarch64 target option.
      210cda73
    • Marek Polacek's avatar
      c++: Add fixed test [PR83596] · 1c798ab7
      Marek Polacek authored
      This was fixed by r269078.
      
      	PR c++/83596
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp1z/nontype5.C: New test.
      1c798ab7
    • Jonathan Wakely's avatar
      libstdc++: Add missing exports for ppc64le --with-long-double-format=ibm [PR105417] · bb7cf39b
      Jonathan Wakely authored
      The --with-long-double-abi=ibm build is missing some exports that are
      present in the --with-long-double-abi=ieee build. Those symbols never
      should have been exported at all, but now that they have been, they
      should be exported consistently by both ibm and ieee.
      
      This simply defines them as aliases for equivalent symbols that are
      already present. The abi-tag on num_get::_M_extract_int isn't really
      needed, because it only uses a std::string as a local variable, not in
      the return type or function parameters, so it's safe to define the
      _M_extract_int[abi:cxx11] symbols as aliases for the corresponding
      function without the abi-tag.
      
      This causes some new symbols to be added to the GLIBCXX_3.4.29 version
      for the ibm long double build mode, but there is no advantage to adding
      them to 3.4.30 for that build. That would just create more
      inconsistencies.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/105417
      	* config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt:
      	Regenerate.
      	* src/c++11/compatibility-ldbl-alt128.cc [_GLIBCXX_USE_DUAL_ABI]:
      	Define __gnu_ieee128::num_get<C>::_M_extract_int[abi:cxx11]<I>
      	symbols as aliases for corresponding symbols without abi-tag.
      bb7cf39b
    • Marek Polacek's avatar
      c++: Add fixed test [PR78244] · 19c62569
      Marek Polacek authored
      This was finally fixed for GCC 11 by r11-434.
      
      	PR c++/78244
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp0x/Wnarrowing20.C: New test.
      19c62569
    • Marek Polacek's avatar
      c++: Add fixed test [PR71424] · e1115a4f
      Marek Polacek authored
      This was fixed by r12-6329-g4f6bc28fc7dd86.
      
      	PR c++/71424
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp0x/initlist-array15.C: New test.
      e1115a4f
    • Jason Merrill's avatar
      c++: using in diagnostics [PR102987] · a0a2554d
      Jason Merrill authored
      The decl pretty-printing code wasn't looking at the flags parameter, so we
      were printing 'using' in the middle of an expression.
      
      	PR c++/102987
      
      gcc/cp/ChangeLog:
      
      	* error.cc (dump_decl) [USING_DECL]: Respect flags.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/diagnostic/using1.C: Check pretty-printing.
      a0a2554d
    • Jason Merrill's avatar
      c++: dump alias-declaration scope · ac5b356d
      Jason Merrill authored
      An alias can't be declared with a qualified-id in actual code, but in
      diagnostics we want to know which scope it belongs to, and I think a
      nested-name-specifier is the best way to provide that.
      
      gcc/cp/ChangeLog:
      
      	* error.cc (dump_decl): Check TFF_UNQUALIFIED_NAME.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp0x/alias-decl-1.C: Expect qualified name.
      ac5b356d
    • Jakub Jelinek's avatar
      c++: Improve diagnostics for template args terminated with >= or >>= [PR104319] · a282da22
      Jakub Jelinek authored
      As mentioned in the PR, for C++98 we have diagnostics that expect
      >> terminating template arguments to be a mistake for > > (C++11
      said it has to be treated that way), while if user trying to spare the
      spacebar doesn't separate > from following = or >> from following =,
      the diagnostics is confusing, while clang suggests adding space in between.
      
      The following patch does that for >= and >>= too.
      
      For some strange reason the error recovery emits further errors,
      not really sure what's going on because I overwrite the token->type
      like the code does for the C++11 >> case or for the C++98 >> cases,
      but at least the first error is nicer (well, for the C++98 nested
      template case and >>= I need to overwrite it to > and so the = is lost,
      so perhaps some follow-up errors are needed for that case).
      
      2022-04-29  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c++/104319
      	* parser.cc (cp_parser_template_argument): Treat >= like C++98 >>
      	after a type id by setting maybe_type_id and aborting tentative
      	parse.
      	(cp_parser_enclosed_template_argument_list): Handle
      	CPP_GREATER_EQ like misspelled CPP_GREATER CPP_RQ and
      	CPP_RSHIFT_EQ like misspelled CPP_GREATER CPP_GREATER_EQ
      	or CPP_RSHIFT CPP_EQ or CPP_GREATER CPP_GREATER CPP_EQ.
      	(cp_parser_next_token_ends_template_argument_p): Return true
      	also for CPP_GREATER_EQ and CPP_RSHIFT_EQ.
      
      	* g++.dg/parse/template28.C: Adjust expected diagnostics.
      	* g++.dg/parse/template30.C: New test.
      a282da22
    • Rainer Orth's avatar
      libstdc++: Update Solaris baselines for GCC 12.1 · 8c465ddd
      Rainer Orth authored
      The following patch updates the Solaris baselines for GCC 12.1.
      
      Tested on i386-pc-solaris2.11 and sparc-sun-solaris2.11 (Solaris 11.3
      and 11.4 in each case).
      
      The only (expected) difference between the 11.3 and 11.4 versions is
      
      --- baseline_symbols.txt.s113s	2022-04-28 10:37:11.464068450 +0000
      +++ baseline_symbols.txt.s114s	2022-04-27 16:54:31.995636805 +0000
      @@ -4070,3 +4070,3 @@
      -FUNC:_ZSt10from_charsPKcS0_RdSt12chars_format@@GLIBCXX_3.4.30
      -FUNC:_ZSt10from_charsPKcS0_ReSt12chars_format@@GLIBCXX_3.4.30
      -FUNC:_ZSt10from_charsPKcS0_RfSt12chars_format@@GLIBCXX_3.4.30
      +FUNC:_ZSt10from_charsPKcS0_RdSt12chars_format@@GLIBCXX_3.4.29
      +FUNC:_ZSt10from_charsPKcS0_ReSt12chars_format@@GLIBCXX_3.4.29
      +FUNC:_ZSt10from_charsPKcS0_RfSt12chars_format@@GLIBCXX_3.4.29
      
      which is handled by the fix for PR libstdc++/103407.  I'm using the 11.4
      version here.
      
      
      2022-04-27  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
      
      	libstdc++-v3:
      	* config/abi/post/i386-solaris/baseline_symbols.txt: Regenerate.
      	* config/abi/post/i386-solaris/amd64/baseline_symbols.txt:
      	Likewise.
      	* config/abi/post/sparc-solaris/baseline_symbols.txt: Likewise.
      	* config/abi/post/sparc-solaris/sparcv9/baseline_symbols.txt:
      	Likewise.
      8c465ddd
    • Uros Bizjak's avatar
      i386: Optimize double-word negation [PR51954] · 59119253
      Uros Bizjak authored
      Introduce peephole2 pattern to convert from:
      
         mov %esi, %edx
         negl %eax
         adcl $0, %edx
         negl %edx
       to:
         xorl %edx, %edx
         negl %eax
         sbbl %esi, %edx
      
      This conversion is profitable only when initial move is found.  Otherwise,
      additional move to a temporary together with clearing xor is needed.
      
      2022-04-29  Uroš Bizjak  <ubizjak@gmail.com>
      
      gcc/ChangeLog:
      
      	PR target/51954
      	* config/i386/i386.md (adcl/neg -> sbb peephole): New peephole2.
      gcc/testsuite/ChangeLog:
      
      	PR target/51954
      	* gcc.target/i386/pr51954.c: New test.
      59119253
    • Richard Biener's avatar
      Fix is_gimple_condexpr vs is_gimple_condexpr_for_cond · c090743b
      Richard Biener authored
      The following fixes wrongly used is_gimple_condexpr and makes
      canonicalize_cond_expr_cond honor either, delaying final checking
      to callers where all but two in ifcombine are doing the correct
      thing already.
      
      This fixes bugs but is now mainly in preparation for making
      COND_EXPRs in GIMPLE assignments no longer have a GENERIC expression
      as condition operand like we already transitioned VEC_COND_EXPR earlier.
      
      2022-04-11  Richard Biener  <rguenther@suse.de>
      
      	* gimple-expr.cc (is_gimple_condexpr): Adjust comment.
      	(canonicalize_cond_expr_cond): Move here from gimple.cc,
      	allow both COND_EXPR and GIMPLE_COND forms.
      	* gimple-expr.h (canonicalize_cond_expr_cond): Declare.
      	* gimple.cc (canonicalize_cond_expr_cond): Remove here.
      	* gimple.h (canonicalize_cond_expr_cond): Likewise.
      	* gimple-loop-versioning.cc (loop_versioning::version_loop):
      	Use is_gimple_condexpr_for_cond.
      	* tree-parloops.cc (gen_parallel_loop): Likewise.
      	* tree-ssa-ifcombine.cc (ifcombine_ifandif): Check for
      	a proper cond expr after canonicalize_cond_expr_cond.
      	Use is_gimple_condexpr_for_cond where appropriate.
      	* tree-ssa-loop-manip.cc (determine_exit_conditions): Likewise.
      	* tree-vect-loop-manip.cc (slpeel_add_loop_guard): Likewise.
      c090743b
    • Richard Biener's avatar
      Add gsi_after_labels overload for gimple_seq · 4aa61e08
      Richard Biener authored
      The following adds gsi_after_labels for gimple_seq so I do not have
      to open-code it.  I took the liberty to remove the two #defines
      wrapping gsi_start_1 and gsi_last_1 as we now have C++ references.
      
      2022-02-01  Richard Biener  <rguenther@suse.de>
      
      	* gimple-iterator.h (gsi_after_labels): Add overload for
      	gimple_seq.
      	(gsi_start_1): Rename to gsi_start and take a reference.
      	(gsi_last_1): Likewise.
      	* gimple-iterator.cc (gsi_for_stmt): Use gsi_start.
      	* omp-low.cc (lower_rec_input_clauses): Likewise.
      	(lower_omp_scan): Likewise.
      4aa61e08
    • Richard Biener's avatar
      tree-optimization/105431 - another overflow in powi handling · 44b09adb
      Richard Biener authored
      This avoids undefined signed overflow when calling powi_as_mults_1.
      
      2022-04-29  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/105431
      	* tree-ssa-math-opts.cc (powi_as_mults_1): Make n unsigned.
      	(powi_as_mults): Use absu_hwi.
      	(gimple_expand_builtin_powi): Remove now pointless n != -n
      	check.
      44b09adb
    • Aldy Hernandez's avatar
      Move common code from range-op.cc to header files. · 9eb38e88
      Aldy Hernandez authored
      In preparation for the agnostication of ranger, this patch moves
      common code that can be shared between non-integer ranges (initially
      pointers) into the relevant header files.
      
      This is a relatively non-invasive change, as any changes that would
      need to be ported to GCC 12, would occur in the range-op entries
      themselves, not in the supporting glue which I'm moving.
      
      Tested and benchmarked on x86-64 Linux.
      
      gcc/ChangeLog:
      
      	* range-op.cc (empty_range_varying): Move to range-op.h.
      	(range_true): Move to range.h.
      	(range_false): Same.
      	(range_true_and_false): Same.
      	(enum bool_range_state): Move to range-op.h.
      	(relop_early_resolve): Same.
      	(operator_equal::op1_op2_relation): Abstract code to...
      	(equal_op1_op2_relation): ...here.
      	(operator_not_equal::op1_op2_relation): Abstract code to...
      	(not_equal_op1_op2_relation): ...here.
      	(operator_lt::op1_op2_relation): Abstract code to...
      	(lt_op1_op2_relation): ...here.
      	(operator_le::op1_op2_relation): Abstract code to...
      	(le_op1_op2_relation): ...here.
      	(operator_gt::op1_op2_relation): Abstract code to...
      	(gt_op1_op2_relation): ...here.
      	(operator_ge::op1_op2_relation): Abstract code to...
      	(ge_op1_op2_relation): ...here.
      	(class range_op_table): Move to range-op.h.
      	* range-op.h (equal_op1_op2_relation): Moved from range-op.cc.
      	(not_equal_op1_op2_relation): Same.
      	(lt_op1_op2_relation): Same.
      	(le_op1_op2_relation): Same.
      	(gt_op1_op2_relation): Same.
      	(ge_op1_op2_relation): Same.
      	(enum bool_range_state): Same.
      	(get_bool_state): Same.
      	(empty_range_varying): Same.
      	(relop_early_resolve): Same.
      	(class range_op_table): Same.
      	* range.h (range_true): Same.
      	(range_false): Same.
      	(range_true_and_false): Same.
      9eb38e88
    • Aldy Hernandez's avatar
      Remove various deprecated methods in class irange. · c13fd1b8
      Aldy Hernandez authored
      This patch cleans up some irange methods in preparation for other
      cleanups later in the cycle.
      
      First, we prefer the reference overloads for union and intersect as
      the pointer versions have been deprecated for a couple releases.
      
      Also, I've renamed the legacy union/intersect whose only function was
      to provide additional verbosity for VRP into
      legacy_verbose_{union,intersect}.  This is a temporary rename to serve
      as a visual reminder of which of the methods are bound for the chopping
      block when the legacy code gets removed later this cycle.
      
      Tested on x86-64 Linux.
      
      gcc/ChangeLog:
      
      	* gimple-fold.cc (size_must_be_zero_p): Use reference
      	instead of pointer
      	* gimple-ssa-evrp-analyze.cc
      	(evrp_range_analyzer::record_ranges_from_incoming_edge): Rename
      	intersect to legacy_verbose_intersect.
      	* ipa-cp.cc (ipcp_vr_lattice::meet_with_1): Use reference instead
      	of pointer.
      	* tree-ssa-dom.cc (dom_jt_simplifier::simplify): Use value_range
      	instead of value_range_equiv.
      	* tree-vrp.cc (extract_range_from_plus_minus_expr): Use reference
      	instead of pointer.
      	(find_case_label_range): Same.
      	* value-range-equiv.cc (value_range_equiv::intersect): Rename to...
      	(value_range_equiv::legacy_verbose_intersect): ...this.
      	(value_range_equiv::union_): Rename to...
      	(value_range_equiv::legacy_verbose_union_): ...this.
      	* value-range-equiv.h (class value_range_equiv): Rename union and
      	intersect to legacy_verbose_{intersect,union}.
      	* value-range.cc (irange::union_): Rename to...
      	(irange::legacy_verbose_union_): ...this.
      	(irange::intersect): Rename to...
      	(irange::legacy_verbose_intersect): ...this.
      	* value-range.h (irange::union_): Rename union_ to
      	legacy_verbose_union.
      	(irange::intersect): Rename intersect to legacy_verbose_intersect.
      	* vr-values.cc (vr_values::update_value_range): Same.
      	(vr_values::extract_range_for_var_from_comparison_expr): Same.
      	(vr_values::extract_range_from_cond_expr): Rename union_ to
      	legacy_verbose_union.
      	(vr_values::extract_range_from_phi_node): Same.
      c13fd1b8
    • Aldy Hernandez's avatar
      Prefer global range info setters that take a range. · 6ccc4356
      Aldy Hernandez authored
      This patch consolidates the multiple ways we have of storing global
      ranges into one accepting a range.
      
      In an upcoming patch series later this cycle we will be providing a
      way to store iranges globally, as opposed to the mechanism we have now
      which squishes wider ranges into value_range's.  This is preparation
      for such work.
      
      Tested and benchmarked on x86-64 Linux.
      
      gcc/ChangeLog:
      
      	* gimple-ssa-evrp-analyze.cc
      	(evrp_range_analyzer::set_ssa_range_info): Use *range_info methods
      	that take a range.
      	* gimple-ssa-sprintf.cc (try_substitute_return_value): Same.
      	* ipa-prop.cc (ipcp_update_vr): Same.
      	* tree-inline.cc (remap_ssa_name): Same.
      	* tree-ssa-copy.cc (fini_copy_prop): Same.
      	* tree-ssa-math-opts.cc (optimize_spaceship): Same.
      	* tree-ssa-phiopt.cc (replace_phi_edge_with_variable): Same.
      	* tree-ssa-pre.cc (insert_into_preds_of_block): Same.
      	* tree-ssa-sccvn.cc (eliminate_dom_walker::eliminate_stmt): Same.
      	* tree-ssa-strlen.cc (set_strlen_range): Same.
      	(strlen_pass::handle_builtin_string_cmp): Same.
      	* tree-ssanames.cc (set_range_info): Make static.
      	(duplicate_ssa_name_range_info): Make static and add a new variant
      	calling the static.
      	* tree-ssanames.h (set_range_info): Remove version taking wide ints.
      	(duplicate_ssa_name_range_info): Remove version taking a
      	range_info_def and replace with a version taking SSA names.
      	* tree-vect-loop-manip.cc (vect_gen_vector_loop_niters): Use *range_info methods
      	that take a range.
      	(vect_do_peeling): Same.
      	* tree-vrp.cc (vrp_asserts::remove_range_assertions): Same.
      	* vr-values.cc (simplify_truth_ops_using_ranges): Same.
      6ccc4356
Loading