Skip to content
Snippets Groups Projects
  1. Sep 01, 2021
    • Iain Buclaw's avatar
      libphobos: Update comment for DRUNTIME_OS_SOURCES · fcc0c84c
      Iain Buclaw authored
      libphobos/ChangeLog:
      
      	* m4/druntime/os.m4: Update comment for DRUNTIME_OS_SOURCES.
      fcc0c84c
    • Iain Buclaw's avatar
      libphobos: Don't add zlib when ENABLE_LIBDRUNTIME_ONLY · 53cfed5c
      Iain Buclaw authored
      The D run-time library does not depend on zlib, so only include it in
      the library when Phobos is being built as well.
      
      libphobos/ChangeLog:
      
      	* src/Makefile.am: Don't add zlib when ENABLE_LIBDRUNTIME_ONLY.
      	* src/Makefile.in: Regenerate.
      53cfed5c
    • Jakub Jelinek's avatar
      vectorizer: Fix up vectorization using WIDEN_MINUS_EXPR [PR102124] · bea07159
      Jakub Jelinek authored
      The following testcase is miscompiled on aarch64-linux at -O3 since the
      introduction of WIDEN_MINUS_EXPR.
      The problem is if the inner type (half_type) is unsigned and the result
      type in which the subtraction is performed (type) has precision more than
      twice as larger as the inner type's precision.
      For other widening operations like WIDEN_{PLUS,MULT}_EXPR, if half_type
      is unsigned, the addition/multiplication result in itype is also unsigned
      and needs to be zero-extended to type.
      But subtraction is special, even when half_type is unsigned, the subtraction
      behaves as signed (also regardless of whether the result type is signed or
      unsigned), 0xfeU - 0xffU is -1 or 0xffffffffU, not 0x0000ffff.
      
      I think it is better not to use mixed signedness of types in
      WIDEN_MINUS_EXPR (have unsigned vector of operands and signed result
      vector), so this patch instead adds another cast to make sure we always
      sign-extend the result from itype to type if type is wider than itype.
      
      2021-09-01  Jakub Jelinek  <jakub@redhat.com>
      
      	PR tree-optimization/102124
      	* tree-vect-patterns.c (vect_recog_widen_op_pattern): For ORIG_CODE
      	MINUS_EXPR, if itype is unsigned with smaller precision than type,
      	add an extra cast to signed variant of itype to ensure sign-extension.
      
      	* gcc.dg/torture/pr102124.c: New test.
      bea07159
    • Martin Liska's avatar
      graph output: use better colors for edges · a61623d9
      Martin Liska authored
      gcc/ChangeLog:
      
      	* graph.c (draw_cfg_node_succ_edges): Do not color fallthru
      	  edges and rather use colors for TRUE and FALSE edges.
      a61623d9
    • Richard Biener's avatar
      tree-optimization/93491 - avoid PRE of trapping calls across exits · 13a43a90
      Richard Biener authored
      This makes us avoid PREing calls that could trap across other
      calls that might not return.  The PR88087 testcase has exactly
      such case so I've refactored the testcase to contain a valid PRE.
      I've also adjusted PRE to not consider pure calls possibly
      not returning in line with what we do elsewhere.
      
      Note we don't have a good idea whether a function always returns
      normally or whether its body is known to never trap.  That's
      something IPA could compute.
      
      2021-09-01  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/93491
      	* tree-ssa-pre.c (compute_avail): Set BB_MAY_NOTRETURN
      	after processing the stmt itself.  Do not consider
      	pure functions possibly not returning.  Properly avoid
      	adding possibly trapping calls to EXP_GEN when there's
      	a preceeding possibly not returning call.
      	* tree-ssa-sccvn.c (vn_reference_may_trap): Conservatively
      	not handle calls.
      
      	* gcc.dg/torture/pr93491.c: New testcase.
      	* gcc.dg/tree-ssa/pr88087.c: Change to valid PRE opportunity.
      13a43a90
    • Richard Biener's avatar
      tree-optimization/102139 - fix SLP DR base alignment · 153766ec
      Richard Biener authored
      When doing whole-function SLP we have to make sure the recorded
      base alignments we compute as the maximum alignment seen for a
      base anywhere in the function is actually valid at the point
      we want to make use of it.
      
      To make this work we now record the stmt the alignment was derived
      from in addition to the DRs innermost behavior and we use a
      dominance check to verify the recorded info is valid when doing
      BB vectorization.  For this to work for groups inside a BB that are
      separate by a call that might not return we now store the DR
      analysis group-id permanently and use that for an additional check
      when the DRs are in the same BB.
      
      2021-08-31  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/102139
      	* tree-vectorizer.h (vec_base_alignments): Adjust hash-map
      	type to record a std::pair of the stmt-info and the innermost
      	loop behavior.
      	(dr_vec_info::group): New member.
      	* tree-vect-data-refs.c (vect_record_base_alignment): Adjust.
      	(vect_compute_data_ref_alignment): Verify the recorded
      	base alignment can be used.
      	(data_ref_pair): Remove.
      	(dr_group_sort_cmp): Adjust.
      	(vect_analyze_data_ref_accesses): Store the group-ID in the
      	dr_vec_info and operate on a vector of dr_vec_infos.
      
      	* gcc.dg/torture/pr102139.c: New testcase.
      153766ec
    • YunQiang Su's avatar
      MAINTAINERS: Add YunQiang Su for write after approval · ea1a1642
      YunQiang Su authored
      ChangeLog:
      	* MAINTAINERS: Add myself for write after approval.
      ea1a1642
    • YunQiang Su's avatar
      md/define_c_enum: support value assignation · 7c922606
      YunQiang Su authored
      Currently, the enums from define_c_enum and define_enum can only
      has values one by one from 0.
      
      In fact we can support the behaviour just like C, aka like
        (define_enum "mips_isa" [(mips1 1) mips2 (mips32 32) mips32r2]),
      then we can get
        enum mips_isa {
          MIPS_ISA_MIPS1 = 1,
          MIPS_ISA_MIPS2 = 2,
          MIPS_ISA_MIPS32 = 32,
          MIPS_ISA_MIPS32R2 = 33
        };
      
      gcc/ChangeLog:
      	* read-md.c (md_reader::handle_enum): support value assignation.
      	* doc/md.texi: record define_c_enum value assignation support.
      7c922606
    • Jakub Jelinek's avatar
      bswap: Fix up bswap_view_convert handling [PR102141] · 45ff1251
      Jakub Jelinek authored
      bswap_view_convert is used twice in spots where gsi_insert_before is the
      right thing, but in the last one it wants to insert preparation stmts
      for the VIEW_CONVERT_EXPR emitted with gsi_insert_after, where at the
      gsi we still need to insert bswap_stmt and maybe mask_stmt whose lhs
      the preparation stmts will use.
      So, this patch adds a BEFORE argument to the function and emits the
      preparation statements before or after depending on that.
      
      2021-09-01  Jakub Jelinek  <jakub@redhat.com>
      
      	PR tree-optimization/102141
      	* gimple-ssa-store-merging.c (bswap_view_convert): Add BEFORE
      	argument.  If false, emit stmts after gsi instead of before, and
      	with GSI_NEW_STMT.
      	(bswap_replace): Adjust callers.  When converting output of bswap,
      	emit VIEW_CONVERT prepratation stmts after a copy of gsi instead
      	of before it.
      
      	* gcc.dg/pr102141.c: New test.
      45ff1251
    • Richard Biener's avatar
      tree-optimization/102149 - add testcase for fixed bug · e6bd9c42
      Richard Biener authored
      This adds the testcase from the PR.
      
      2021-09-01  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/102149
      	* gcc.dg/torture/pr102149.c: New testcase.
      e6bd9c42
    • Roger Sayle's avatar
      C: PR c/79412: Poison decls with error_mark_node after type mismatch · 82368522
      Roger Sayle authored
      This patch fixes an ICE during error-recovery regression in the C front-end.
      The symptom is that the middle-end's sanity checking assertions fail during
      gimplification when being asked to increment an array, which is non-sense.
      The issue is that the C-front end has detected the type mismatch and
      reported an error to the user, but hasn't provided any indication of this
      to the middle-end, simply passing bogus trees that the optimizers recognize
      as invalid.
      
      This appears to be a frequently reported ICE with 94730, 94731, 101036
      and 101365 all marked as duplicates.
      
      I believe the correct (polite) fix is to mark the mismatched types as
      problematic/dubious in the front-end, when the error is spotted, so that
      the middle-end has a heads-up and can be a little more forgiving.  This
      patch to c-decl.c's duplicate_decls sets (both) mismatched types to
      error_mark_node if they are significantly different, and we've issued
      an error message.  Alas, this is too punitive for FUNCTION_DECLs where
      we store return types, parameter lists, parameter types and attributes
      in the type, but fortunately the middle-end is already more cautious
      about trusting possibly suspect function types.
      
      This fix required one minor change to the testsuite, typedef-var-2.c
      where after conflicting type definitions, we now no longer assume that
      the (first or) second definition is the correct one.  This change only
      affects the behaviour after seen_error(), so should be relatively safe.
      
      2021-09-01  Roger Sayle  <roger@nextmovesoftware.com>
      	    Joseph Myers  <joseph@codesourcery.com>
      
      gcc/c/ChangeLog
      	PR c/79412
      	* c-decl.c (duplicate_decls): On significant mismatches, mark the
      	types of both (non-function) decls as error_mark_node, so that the
      	middle-end can see the code is malformed.
      	(free_attr_access_data): Don't process if the type has been set to
      	error_mark_node.
      
      gcc/testsuite/ChangeLog
      	PR c/79412
      	* gcc.dg/pr79412.c: New test case.
      	* gcc.dg/typedef-var-2.c: Update expeted errors.
      82368522
    • liuhongt's avatar
      Get rid of all float-int special cases in validate_subreg. · d2874d90
      liuhongt authored
      gcc/ChangeLog:
      
      	* emit-rtl.c (validate_subreg): Get rid of all float-int
      	special cases.
      d2874d90
    • liuhongt's avatar
      Revert "Make sure we're playing with integral modes before call extract_integral_bit_field." · 508fa61b
      liuhongt authored
      This reverts commit 7218c2ec.
      
           PR middle-end/102133
      508fa61b
    • GCC Administrator's avatar
      Daily bump. · 6d51ee43
      GCC Administrator authored
      6d51ee43
  2. Aug 31, 2021
    • Jason Merrill's avatar
      c++: Various small fixes · 9c6344c1
      Jason Merrill authored
      A copy-paste error, a couple of missed checks to guard undefined accesses,
      and we don't need to use type_uses_auto to extract the auto node we just
      built.
      
      gcc/cp/ChangeLog:
      
      	* coroutines.cc (flatten_await_stmt): Fix copyo.
      	* decl.c (reshape_init_class): Simplify.
      	* module.cc (module_state::read_language): Add null check.
      	* parser.c (build_range_temp): Avoid type_uses_auto.
      	(cp_parser_class_specifier_1): Add null check.
      9c6344c1
    • Harald Anlauf's avatar
      Fortran - extend set of substring expressions handled in length simplification · e4cb3bb9
      Harald Anlauf authored
      gcc/fortran/ChangeLog:
      
      	PR fortran/100950
      	* simplify.c (substring_has_constant_len): Minimize checks for
      	substring expressions being allowed.
      
      gcc/testsuite/ChangeLog:
      
      	PR fortran/100950
      	* gfortran.dg/pr100950.f90: Extend coverage.
      e4cb3bb9
    • Jonathan Wakely's avatar
      libstdc++: Add valid range checks to std::span constructors [PR98421] · ef7becc9
      Jonathan Wakely authored
      
      Signed-off-by: default avatarJonathan Wakely <jwakely@redhat.com>
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/98421
      	* include/std/span (span(Iter, size_type), span(Iter, Iter)):
      	Add valid range checks.
      	* testsuite/23_containers/span/cons_1_assert_neg.cc: New test.
      	* testsuite/23_containers/span/cons_2_assert_neg.cc: New test.
      ef7becc9
    • Patrick Palka's avatar
      c++: check arity before deduction w/ explicit targs [PR12672] · f1e73199
      Patrick Palka authored
      During overload resolution, when the arity of a function template
      clearly disagrees with the arity of the call, no specialization of the
      function template could yield a viable candidate.  The deduction routine
      type_unification_real already notices this situation, but not before
      it substitutes explicit template arguments into the template, a step
      which could induce a hard error.  Although it's necessary to perform
      this substitution first in order to check arity perfectly (since the
      substitution can e.g. expand a non-trailing parameter pack), in most
      cases we can determine ahead of time whether there's an arity
      disagreement without needing to perform deduction at all.
      
      To that end, this patch implements an (approximate) arity check in
      add_template_candidate_real that guards actual deduction.  It's enabled
      only when there are explicit template arguments since that's when
      deduction can force otherwise avoidable template instantiations.  (I
      experimented with enabling it unconditionally as an optimization, and
      observed some improvements to compile time of about 5% but also some
      slowdowns of about the same magnitude, so kept it conditional.)
      
      In passing, this adds a least_p parameter to arity_rejection for sake
      of consistent diagnostics with unify_arity.
      
      A couple of testcases needed to be adjusted so that deduction continues
      to occur as intended after this change.  Except in unify6.C, where we
      were expecting foo<void ()> to be ill-formed due to substitution
      forming a function type with an added 'const', but ISTM this is
      permitted by [dcl.fct]/7, so I changed the test accordingly.
      
      	PR c++/12672
      
      gcc/cp/ChangeLog:
      
      	* call.c (rejection_reason::call_varargs_p): Rename this
      	previously unused member to ...
      	(rejection_reason::least_p): ... this.
      	(arity_rejection): Add least_p parameter.
      	(add_template_candidate_real): When there are explicit
      	template arguments, check that the arity of the call agrees with
      	the arity of the function before attempting deduction.
      	(print_arity_information): Add least_p parameter.
      	(print_z_candidate): Adjust call to print_arity_information.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp0x/decltype29.C: Adjust.
      	* g++.dg/template/error56.C: Adjust.
      	* g++.old-deja/g++.pt/unify6.C: Adjust.
      	* g++.dg/template/explicit-args7.C: New test.
      f1e73199
    • Thomas Schwinge's avatar
      Fix 'OMP_CLAUSE_TILE' operands handling in 'gcc/tree.c:walk_tree_1' · 92dc5d84
      Thomas Schwinge authored
      In r245300 (commit 02889d23)
      "OpenACC tile clause support" that one had changed to three operands,
      similar to 'OMP_CLAUSE_COLLAPSE'.
      
      There is no (existing) test case where this seems to matter (likewise
      for 'OMP_CLAUSE_COLLAPSE'), but it's good to be consistent.
      
      	gcc/
      	* tree.c (walk_tree_1) <OMP_CLAUSE_TILE>: Handle three operands.
      92dc5d84
    • Thomas Schwinge's avatar
      [OMP] Standardize on 'omp_privatize_by_reference' · 22e6b327
      Thomas Schwinge authored
      ... instead of 'omp_is_reference' vs.
      'lang_hooks.decls.omp_privatize_by_reference'.
      
      	gcc/
      	* omp-general.h (omp_is_reference): Rename to...
      	(omp_privatize_by_reference): ... this.  Adjust all users...
      	* omp-general.c: ... here, ...
      	* gimplify.c: ... here, ...
      	* omp-expand.c: ... here, ...
      	* omp-low.c: ... here.
      22e6b327
    • Martin Sebor's avatar
      Avoid valid Coverity warning for comparing array to zero. · b3aa3288
      Martin Sebor authored
      	* gimple-ssa-warn-access.cc (maybe_warn_alloc_args_overflow): Test
      	pointer element for equality to zero, not that of the cotaining
      	array.
      b3aa3288
    • Martin Sebor's avatar
      Disable gcc_rich_location copying and assignment. · e4d2305a
      Martin Sebor authored
      gcc/cp/ChangeLog:
      
      	* parser.c (cp_parser_selection_statement): Use direct initialization
      	instead of copy.
      
      gcc/ChangeLog:
      
      	* gcc-rich-location.h (gcc_rich_location): Make ctor explicit.
      
      libcpp/ChangeLog:
      
      	* include/line-map.h (class rich_location): Disable copying and
      	assignment.
      e4d2305a
    • Martin Sebor's avatar
      Add attribute returns nonnull to get_range_query. · e45d5b6b
      Martin Sebor authored
      gcc/ChangeLog:
      	* function.h (function): Add comments.
      	(get_range_query): Same.  Add attribute returns nonnull.
      e45d5b6b
    • Jonathan Wakely's avatar
      libstdc++: Fix broken autoconf check for O_NONBLOCK · 1cacdef0
      Jonathan Wakely authored
      
      Signed-off-by: default avatarJonathan Wakely <jwakely@redhat.com>
      
      libstdc++-v3/ChangeLog:
      
      	* configure.ac: Fix checks for F_GETFL, F_SETFL and O_NONBLOCK.
      	* configure: Regenerate.
      1cacdef0
    • Jonathan Wakely's avatar
      libstdc++: Remove redundant noexcept-specifier on definitions · f63e86f7
      Jonathan Wakely authored
      
      These destructors are noexcept anyway. I removed the redundant noexcept
      from the error_category destructor's declaration in r0-123475, but
      didn't remove it from the defaulted definition in system_error.cc. That
      causes warnings if the library is built with Clang.
      
      This removes the redundant noexcept from ~error_category and
      ~system_error and adds tests to ensure they really are noexcept.
      
      Signed-off-by: default avatarJonathan Wakely <jwakely@redhat.com>
      
      libstdc++-v3/ChangeLog:
      
      	* src/c++11/system_error.cc (error_category::~error_category()):
      	Remove noexcept-specifier.
      	(system_error::~system_error()): Likewise.
      	* testsuite/19_diagnostics/error_category/noexcept.cc: New test.
      	* testsuite/19_diagnostics/system_error/noexcept.cc: New test.
      f63e86f7
    • Jonathan Wakely's avatar
      libstdc++: Add missing return for atomic timed wait [PR102074] · 763eb1f1
      Jonathan Wakely authored
      
      This adds a missing return statement to the non-futex wait-until
      operation.
      
      Signed-off-by: default avatarJonathan Wakely <jwakely@redhat.com>
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/102074
      	* include/bits/atomic_timed_wait.h (__timed_waiter_pool)
      	[!_GLIBCXX_HAVE_PLATFORM_TIMED_WAIT]: Add missing return.
      763eb1f1
    • Jonathan Wakely's avatar
      libstdc++: Improve error handling in Net TS name resolution · feec7ef6
      Jonathan Wakely authored
      
      Signed-off-by: default avatarJonathan Wakely <jwakely@redhat.com>
      
      libstdc++-v3/ChangeLog:
      
      	* include/experimental/internet (__make_resolver_error_code):
      	Handle EAI_SYSTEM errors.
      	(basic_resolver_results): Use __make_resolver_error_code. Use
      	Glibc NI_MAXHOST and NI_MAXSERV values for buffer sizes.
      feec7ef6
    • Jonathan Wakely's avatar
      libstdc++: Fix ip::tcp::resolver test failure on Solaris · 48b20d46
      Jonathan Wakely authored
      
      Solaris 11 does not have "http" in /etc/services, which causes this test
      to fail. Try some other services until we find one that works.
      
      Signed-off-by: default avatarJonathan Wakely <jwakely@redhat.com>
      
      libstdc++-v3/ChangeLog:
      
      	* testsuite/experimental/net/internet/resolver/ops/lookup.cc:
      	Try other service if "http" fails.
      48b20d46
    • Roger Sayle's avatar
      [Committed] Fix subreg_promoted_mode breakage on various platforms. · 863d6524
      Roger Sayle authored
      My apologies for the inconvenience.  My recent patch to preserve
      SUBREG_PROMOTED_VAR_P on (extend:HI (subreg/s:QI (reg:SI))), and other
      places in the middle-end, has broken the build on several targets.
      
      The change to convert_modes inadvertently used the same
      subreg_promoted_mode idiom for retrieving the mode of a SUBREG_REG
      as the existing code just a few lines earlier.  Alas in the meantime,
      the original SUBREG gets replaced by one without SUBREG_PROMOTED_VAR_P,
      the whole raison-d'etre for my patch, and I'd not realized/noticed
      that subreg_promoted_mode asserts for this.  Alas neither the bootstrap
      and regression test on x86_64-pc-linux-gnu nor my testing on nvptx-none
      must have hit this particular case.  The logic of this transformation
      is sound, it's the implementation that's bitten me.
      
      This patch has been committed, after another "make bootstrap" on
      x86_64-pc-linux-gnu (just in case), and confirmation/pre-approval
      from Jeff Law that this indeed fixes the build failures seen on
      several platforms.
      
      My humble apologies again.
      
      2021-08-31  Roger Sayle  <roger@nextmovesoftware.com>
      
      gcc/ChangeLog
      	* expr.c (convert_modes): Don't use subreg_promoted_mode on a
      	SUBREG if it can't be guaranteed to a SUBREG_PROMOTED_VAR_P set.
      	Instead use the standard (safer) is_a <scalar_int_mode> idiom.
      863d6524
    • Jason Merrill's avatar
      c++: use iloc_sentinel in another place · 17dc903e
      Jason Merrill authored
      Another place we can use iloc_sentinel instead of explicitly saving and
      restoring input_location.
      
      gcc/cp/ChangeLog:
      
      	* constexpr.c (explain_invalid_constexpr_fn): Use iloc_sentinel.
      17dc903e
    • Jason Merrill's avatar
      c++: Improve error recovery with constexpr [PR92193] · 9aeadd8c
      Jason Merrill authored
      The compiler tries to limit error cascades in limit_bad_template_recursion
      by avoiding triggering a new instantiation from one that has caused errors.
      We were exempting constexpr functions from this because they can be needed
      for constant evaluation, but as more and more functions get marked
      constexpr, this becomes an over-broad category.  So as suggested on IRC,
      this patch only exempts functions that are needed for mandatory constant
      evaluation.
      
      As noted in the comment, this flag doesn't particularly need to use a bit in
      the FUNCTION_DECL, but there were still some free.
      
      	PR c++/92193
      
      gcc/cp/ChangeLog:
      
      	* cp-tree.h (FNDECL_MANIFESTLY_CONST_EVALUATED): New.
      	* constexpr.c (cxx_eval_call_expression): Set it.
      	* pt.c (neglectable_inst_p): Check it.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/diagnostic/static_assert4.C: New test.
      9aeadd8c
    • Jeff Law's avatar
      Restore intent of data-sym-multi-pool test · 18f0e57b
      Jeff Law authored
      gcc/testsuite
      	* gcc.target/mips/mips.exp: Add tree-vrp to mips_option_group.
      	* gcc.target/mips/data-sym-multi-pool.c: Add -fno-tree-vrp.
      18f0e57b
    • Jeff Law's avatar
      More stabs removal. · d158c3f7
      Jeff Law authored
      gcc/
      
      	* config.gcc (cris-*-elf, cris-*-none): Remove dbxelf.h from
      	tm_file.
      	(m32r-*-elf, m32rle-*-elf, m32r-*-linux): Likewise.
      	(mn10300-*-*, am33_2.0-*-linux*): Likewise.
      	(xtensa*-*-elf, xtensa*-*-linux, xtensa*-*-uclinux): Likewise.
      	(m32c-*-elf*, m32c-*-rtems*): Likewise.
      	* config/cris/cris.h (DBX_NO_XREFS): Remove.
      	(DBX_CONTIN_LENGTH, DBX_CONTIN_CHAR): Likewise.
      	* config/m32r/m32r.h (DBXOUT_SOURCE_LINE): Likewise.
      	(DBX_DEBUGGING_INFO, DBX_CONTIN_LENGTH): Likewise.
      	* config/mn10300/mn10300.h (DEFAULT_GDB_EXTENSIONS): Likewise.
      	* config/mn10300/linux.h (DBX_REGISTER_NAMES): Likewise.
      d158c3f7
    • Jakub Jelinek's avatar
      testsuite: Fix gcc.dg/vect/pr101145* tests [PR101145] · eca73023
      Jakub Jelinek authored
      I'm getting:
      FAIL: gcc.dg/vect/pr101145.c scan-tree-dump-times vect "vectorized 1 loops" 7
      FAIL: gcc.dg/vect/pr101145_1.c scan-tree-dump-times vect "vectorized 1 loops" 2
      FAIL: gcc.dg/vect/pr101145_2.c scan-tree-dump-times vect "vectorized 1 loops" 2
      FAIL: gcc.dg/vect/pr101145_3.c scan-tree-dump-times vect "vectorized 1 loops" 2
      FAIL: gcc.dg/vect/pr101145.c -flto -ffat-lto-objects  scan-tree-dump-times vect "vectorized 1 loops" 7
      FAIL: gcc.dg/vect/pr101145_1.c -flto -ffat-lto-objects  scan-tree-dump-times vect "vectorized 1 loops" 2
      FAIL: gcc.dg/vect/pr101145_2.c -flto -ffat-lto-objects  scan-tree-dump-times vect "vectorized 1 loops" 2
      FAIL: gcc.dg/vect/pr101145_3.c -flto -ffat-lto-objects  scan-tree-dump-times vect "vectorized 1 loops" 2
      on i686-linux (or x86_64-linux with -m32/-mno-sse).
      The problem is that those tests use dg-options, which in */vect/ testsuite
      throws away all the carefully added default options to enable vectorization
      on each target (and which e.g. vect_int etc. effective targets rely on).
      The old way would be to name those tests gcc.dg/vect/O3-pr101145*,
      but we can also use dg-additional-options (which doesn't throw the default
      options, just appends to them) which is IMO better so that we don't have to
      rename the tests.
      
      2021-08-31  Jakub Jelinek  <jakub@redhat.com>
      
      	PR tree-optimization/101145
      	* gcc.dg/vect/pr101145.c: Use dg-additional-options with just -O3
      	instead of dg-options with -O3 -fdump-tree-vect-details.
      	* gcc.dg/vect/pr101145_1.c: Likewise.
      	* gcc.dg/vect/pr101145_2.c: Likewise.
      	* gcc.dg/vect/pr101145_3.c: Likewise.
      eca73023
    • Marcel Vollweiler's avatar
      Add support for device-modifiers for 'omp target device'. · 03be3cfe
      Marcel Vollweiler authored
      'device_num' and 'ancestor' are now parsed on target device constructs for C,
      C++, and Fortran (see OpenMP specification 5.0, p. 170). When 'ancestor' is
       used, then 'sorry, not supported' is output. Moreover, the restrictions for
      'ancestor' are implemented (see OpenMP specification 5.0, p. 174f).
      
      gcc/c/ChangeLog:
      
      	* c-parser.c (c_parser_omp_clause_device): Parse device-modifiers 'device_num'
      	and 'ancestor' in 'target device' clauses.
      
      gcc/cp/ChangeLog:
      
      	* parser.c (cp_parser_omp_clause_device): Parse device-modifiers 'device_num'
      	and 'ancestor' in 'target device' clauses.
      	* semantics.c (finish_omp_clauses): Error handling. Constant device ids must
      	evaluate to '1' if 'ancestor' is used.
      
      gcc/fortran/ChangeLog:
      
      	* gfortran.h: Add variable for 'ancestor' in struct gfc_omp_clauses.
      	* openmp.c (gfc_match_omp_clauses): Parse device-modifiers 'device_num'
      	and 'ancestor' in 'target device' clauses.
      	* trans-openmp.c (gfc_trans_omp_clauses): Set OMP_CLAUSE_DEVICE_ANCESTOR.
      
      gcc/ChangeLog:
      
      	* gimplify.c (gimplify_scan_omp_clauses): Error handling. 'ancestor' only
      	allowed on target constructs and only with particular other clauses.
      	* omp-expand.c (expand_omp_target): Output of 'sorry, not supported' if
      	'ancestor' is used.
      	* omp-low.c (check_omp_nesting_restrictions): Error handling. No nested OpenMP
      	structs when 'ancestor' is used.
      	(scan_omp_1_stmt): No usage of OpenMP runtime routines in a target region when
      	'ancestor' is used.
      	* tree-pretty-print.c (dump_omp_clause): Append 'ancestor'.
      	* tree.h (OMP_CLAUSE_DEVICE_ANCESTOR): Define macro.
      
      gcc/testsuite/ChangeLog:
      
      	* c-c++-common/gomp/target-device-1.c: New test.
      	* c-c++-common/gomp/target-device-2.c: New test.
      	* c-c++-common/gomp/target-device-ancestor-1.c: New test.
      	* c-c++-common/gomp/target-device-ancestor-2.c: New test.
      	* c-c++-common/gomp/target-device-ancestor-3.c: New test.
      	* c-c++-common/gomp/target-device-ancestor-4.c: New test.
      	* gfortran.dg/gomp/target-device-1.f90: New test.
      	* gfortran.dg/gomp/target-device-2.f90: New test.
      	* gfortran.dg/gomp/target-device-ancestor-1.f90: New test.
      	* gfortran.dg/gomp/target-device-ancestor-2.f90: New test.
      	* gfortran.dg/gomp/target-device-ancestor-3.f90: New test.
      	* gfortran.dg/gomp/target-device-ancestor-4.f90: New test.
      03be3cfe
    • Jonathan Wakely's avatar
      libstdc++: Fix 17_intro/names.cc failures on Solaris · 69b09c55
      Jonathan Wakely authored
      
      Signed-off-by: default avatarJonathan Wakely <jwakely@redhat.com>
      
      libstdc++-v3/ChangeLog:
      
      	* testsuite/17_intro/names.cc: Undefine some more names used
      	by Solaris system headers.
      69b09c55
    • Roger Sayle's avatar
      Preserve SUBREG_PROMOTED_VAR_P on (extend:HI (subreg/s:QI (reg:SI))). · cad36f38
      Roger Sayle authored
      SUBREG_PROMOTED_VAR_P is a mechanism for tracking that a partial subreg
      is correctly zero-extended or sign-extended in the parent register.  For
      example, the RTL (subreg/s/v:QI (reg/v:SI 23 [ x ]) 0) indicates that the
      byte x is zero extended in reg:SI 23, which is useful for optimization.
      An example is that zero extending the above QImode value to HImode can
      simply use a wider subreg, i.e. (subreg:HI (reg/v:SI 23 [ x ]) 0).
      
      This patch addresses the oversight/missed optimization opportunity that
      the new HImode subreg above should retain its SUBREG_PROMOTED_VAR_P
      annotation as its value is guaranteed to be correctly extended in the
      SImode parent.  The code below to preserve SUBREG_PROMOTED_VAR_P is already
      present in the middle-end (e.g. simplify-rtx.c:7232-7242) but missing
      from one or two (precisely three) places that (accidentally) strip it.
      
      Whilst there I also added another optimization.  If we need to extend
      the above QImode value beyond the SImode register holding it, say to
      DImode, we can eliminate the SUBREG and simply extend from the SImode
      register to DImode.
      
      2021-08-31  Roger Sayle  <roger@nextmovesoftware.com>
      
      gcc/ChangeLog
      	* expr.c (convert_modes): Preserve SUBREG_PROMOTED_VAR_P when
      	creating a (wider) partial subreg from a SUBREG_PROMOTED_VAR_P
      	subreg.
      	* simplify-rtx.c (simplify_unary_operation_1) [SIGN_EXTEND]:
      	Likewise, preserve SUBREG_PROMOTED_VAR_P when creating a (wider)
      	partial subreg from a SUBREG_PROMOTED_VAR_P subreg.  Generate
      	SIGN_EXTEND of the SUBREG_REG when a subreg would be paradoxical.
      	[ZERO_EXTEND]: Likewise, preserve SUBREG_PROMOTED_VAR_P when
      	creating a (wider) partial subreg from a SUBREG_PROMOTED_VAR_P
      	subreg.  Generate ZERO_EXTEND of the SUBREG_REG when a subreg
      	would be paradoxical.
      cad36f38
    • Roger Sayle's avatar
      Only simplify TRUNCATE to SUBREG on TRULY_NOOP_TRUNCATION targets. · 0960d937
      Roger Sayle authored
      As recently remarked by Jeff Law, SUBREGs are the "forever chemicals"
      of GCC's RTL; once created they persist in the environment.  The problem,
      according to the comment on lines 5428-5438 of combine.c is that
      non-tieable SUBREGs interfere with reload/register allocation, so
      combine often doesn't touch/clean-up instructions containing a SUBREG.
      
      This is the first and simplest of two patches to tackle that problem,
      by teaching combine to avoid converting explicit TRUNCATEs into
      SUBREGs that it can't handle.
      
      Consider the following (hypothetical) sequence of instructions on
      a STORE_FLAG_VALUE=1 target, which stores a zero or one in an SI
      register, then uselessly truncates to QImode, then extends it again.
      
      (set (reg:SI 27) (ne:SI (reg:BI 28) (const_int 0)))
      (set (reg:QI 26) (truncate:QI (reg:SI 27)))
      (set (reg:SI 0) (zero_extend:SI (reg:QI 26)))
      
      which ideally (i.e. with this patch) combine would simplify to:
      (set (reg:SI 0) (ne:SI (reg:BI 28) (const_int 0)))
      
      Alas currently, during combine the middle TRUNCATE is converted into
      a lowpart SUBREG, which subst then turns into (clobber (const_int 0)),
      abandoning the attempted combination, that then never reaches recog.
      
      2021-08-31  Roger Sayle  <roger@nextmovesoftware.com>
      
      gcc/ChangeLog
      	* combine.c (combine_simplify_rtx): Avoid converting an explicit
      	TRUNCATE into a lowpart SUBREG on !TRULY_NOOP_TRUNCATION targets.
      	* simplify-rtx.c (simplify_unary_operation_1): Likewise.
      0960d937
    • Richard Biener's avatar
      tree-optimization/102142 - fix typo in loop BB reduc cost adjustment · 67927342
      Richard Biener authored
      This fixes a typo in the condition guarding the cleanup of the
      visited flag of costed scalar stmts.
      
      2021-08-31  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/102142
      	* tree-vect-slp.c (vect_bb_vectorization_profitable_p): Fix
      	condition under which to unset the visited flag.
      
      	* g++.dg/torture/pr102142.C: New testcase.
      67927342
    • Richard Sandiford's avatar
      libgcc: Add missing runtime exception notices · de7a795c
      Richard Sandiford authored
      Quoting from https://gcc.gnu.org/pipermail/gcc/2021-July/236716.html:
      
      --------------------------------------------------------------------
      It was pointed out to me off-list that config/aarch64/value-unwind.h
      is missing the runtime exception.  It looks like a few other files
      are too; a fuller list is:
      
      libgcc/config/aarch64/value-unwind.h
      libgcc/config/frv/frv-abi.h
      libgcc/config/i386/value-unwind.h
      libgcc/config/pa/pa64-hpux-lib.h
      
      Certainly for the aarch64 file this was simply a mistake;
      it seems to have been copied from the i386 version, both of which
      reference the runtime exception but don't actually include it.
      --------------------------------------------------------------------
      
      Similarly, frv-abi.h referenced the exception but didn't include it.
      pa64-hpux-lib.h was missing any reference to the exception.
      
      The decision was that this was simply a mistake
      [https://gcc.gnu.org/pipermail/gcc/2021-July/236717.html]:
      
      --------------------------------------------------------------------
      […] It generally is
      considered a textual omission.  The runtime library components of GCC
      are intended to be licensed under the runtime exception, which was
      granted and approved at the time of introduction.
      --------------------------------------------------------------------
      
      and that we should simply change all of the files above
      [https://gcc.gnu.org/pipermail/gcc/2021-July/236719.html]:
      
      --------------------------------------------------------------------
      Please correct the text in the files. The files in libgcc used in the
      GCC runtime are intended to be licensed with the runtime exception and
      GCC previously was granted approval for that licensing and purpose.
      
      […]
      
      The runtime exception explicitly was intended for this purpose and
      usage at the time that GCC received approval to apply the exception.
      --------------------------------------------------------------------
      
      libgcc/
      	* config/aarch64/value-unwind.h: Add missing runtime exception
      	paragraph.
      	* config/frv/frv-abi.h: Likewise.
      	* config/i386/value-unwind.h: Likewise.
      	* config/pa/pa64-hpux-lib.h: Likewise.
      de7a795c
Loading