Skip to content
Snippets Groups Projects
  1. Sep 25, 2024
    • Jakub Jelinek's avatar
      c++: Add testcase for DR 2728 · 340ef965
      Jakub Jelinek authored
      Seems we already handle delete expressions the way the DR clarifies,
      so this patch just adds a testcase which verifies that.
      
      2024-09-25  Jakub Jelinek  <jakub@redhat.com>
      
      	* g++.dg/DRs/dr2728.C: New test.
      340ef965
    • Konstantinos Eleftheriou's avatar
      match: Fix A || B not optimized to true when !B implies A [PR114326] · a88d6c6d
      Konstantinos Eleftheriou authored
      
      In expressions like (a != b || ((a ^ b) & c) == d) and
      (a != b || (a ^ b) == c), (a ^ b) is folded to false.
      In the equivalent expressions (((a ^ b) & c) == d || a != b) and
      ((a ^ b) == c || a != b) this is not happening.
      
      This patch adds the following simplifications in match.pd:
      ((a ^ b) & c) cmp d || a != b --> 0 cmp d || a != b
      (a ^ b) cmp c || a != b --> 0 cmp c || a != b
      
      	PR tree-optimization/114326
      
      gcc/ChangeLog:
      
      	* match.pd: Add two patterns to fold a ^ b to 0, when a == b.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.dg/tree-ssa/fold-xor-and-or.c: New test.
      	* gcc.dg/tree-ssa/fold-xor-or.c: New test.
      
      Tested-by: default avatarChristoph Müllner <christoph.muellner@vrull.eu>
      Signed-off-by: default avatarPhilipp Tomsich <philipp.tomsich@vrull.eu>
      Signed-off-by: default avatarKonstantinos Eleftheriou <konstantinos.eleftheriou@vrull.eu>
      a88d6c6d
    • Richard Biener's avatar
      Speed up get_bitmask_from_range · 0e095df4
      Richard Biener authored
      When min != max we know min ^ max != 0.
      
      	* value-range.cc (get_bitmask_from_range): Remove redundant
      	compare of xorv with zero.
      0e095df4
    • Richard Biener's avatar
      Speed up wide_int_storage::operator=(wide_int_storage const&) · 6efc770a
      Richard Biener authored
      wide_int_storage shows up high in the profile for the testcase in
      PR114855 where the apparent issue is that the conditional jump
      on 'precision' after the (inlined) memcpy stalls the pipeline due
      to the data dependence and required store-to-load forwarding.  We
      can add scheduling freedom by instead testing precision as from the
      source which speeds up the function by 30%.  I've applied the
      same logic to the copy CTOR.
      
      	* wide-int.h (wide_int_storage::wide_int_storage): Branch
      	on source precision to avoid data dependence on memcpy
      	destination.
      	(wide_int_storage::operator=): Likewise.
      6efc770a
    • Marek Polacek's avatar
      c++: use TARGET_EXPR accessors · 1fea6f82
      Marek Polacek authored
      
      While futzing around with PR116416 I noticed that we can use
      the _SLOT and _INITIAL macros to make the code more readable.
      
      gcc/c-family/ChangeLog:
      
      	* c-pretty-print.cc (c_pretty_printer::primary_expression): Use
      	TARGET_EXPR accessors.
      	(c_pretty_printer::expression): Likewise.
      
      gcc/cp/ChangeLog:
      
      	* coroutines.cc (build_co_await): Use TARGET_EXPR accessors.
      	(finish_co_yield_expr): Likewise.
      	(register_awaits): Likewise.
      	(tmp_target_expr_p): Likewise.
      	(flatten_await_stmt): Likewise.
      	* error.cc (dump_expr): Likewise.
      	* semantics.cc (finish_omp_target_clauses): Likewise.
      	* tree.cc (bot_manip): Likewise.
      	(cp_tree_equal): Likewise.
      	* typeck.cc (cxx_mark_addressable): Likewise.
      	(cp_build_compound_expr): Likewise.
      	(cp_build_modify_expr): Likewise.
      	(check_return_expr): Likewise.
      
      Reviewed-by: default avatarJason Merrill <jason@redhat.com>
      1fea6f82
    • Konstantinos Eleftheriou's avatar
      match: Change (A * B) + (-C) to (B - C/A) * A, if C multiple of A [PR109393] · 08b8341f
      Konstantinos Eleftheriou authored
      The following function:
      
      int foo(int *a, int j)
      {
        int k = j - 1;
        return a[j - 1] == a[k];
      }
      
      does not fold to `return 1;` using -O2 or higher. The cause of this is that
      the expression `4 * j + (-4)` for the index computation is not folded to
      `4 * (j - 1)`. Existing simplifications that handle similar cases are applied
      when A == C, which is not the case in this instance.
      
      A previous attempt to address this issue is
      https://gcc.gnu.org/pipermail/gcc-patches/2024-April/649896.html
      
      
      
      This patch adds the following simplification in match.pd:
      (A * B) + (-C) -> (B - C/A) * A, if C a multiple of A
      
      which also handles cases where the index is j - 2, j - 3, etc.
      
      Bootstrapped for all languages and regression tested on x86-64 and aarch64.
      
      	PR tree-optimization/109393
      
      gcc/ChangeLog:
      
      	* match.pd: (A * B) + (-C) -> (B - C/A) * A, if C a multiple of A.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.dg/pr109393.c: New test.
      
      Tested-by: default avatarChristoph Müllner <christoph.muellner@vrull.eu>
      Signed-off-by: default avatarPhilipp Tomsich <philipp.tomsich@vrull.eu>
      Signed-off-by: default avatarKonstantinos Eleftheriou <konstantinos.eleftheriou@vrull.eu>
      08b8341f
    • Richard Biener's avatar
      remove dominator recursion from reassoc · af8ff004
      Richard Biener authored
      The reassoc pass currently walks dominators in a recursive way where
      I ran into a stack overflow with.  The following replaces it with
      worklists following patterns used elsewhere.
      
      	* tree-ssa-reassoc.cc (break_up_subtract_bb): Remove recursion.
      	(reassociate_bb): Likewise.
      	(do_reassoc): Implement worklist based dominator walks for
      	both break_up_subtract_bb and reassociate_bb.
      af8ff004
    • Aldy Hernandez's avatar
      Remove recursion in simplify_control_stmt_condition_1 [PR114855]. · 9b762638
      Aldy Hernandez authored
      Remove some ad-hoc simplification code in the forward threader, as the
      call into the ranger in m_simplifier->simplify() will handle anything we
      can do manually in simplify_control_stmt_condition_1.
      
      In PR114855, DOM time is reduced from 120s to 92s (-23%) and overall
      compilation time from 235s to 205s (-12%).  The total thread count at -O1 is
      unchanged for the testcase.
      
      In our bootstrap .ii benchmark suite, I see we thread 3 threads less
      over all files at -O1.  At -O2, the backward threader picks up one more,
      for no difference over all.
      
      	PR tree-optimization/114855
      
      gcc/ChangeLog:
      
      	* tree-ssa-threadedge.cc: Remove unneeded recursion.
      9b762638
    • Jason Merrill's avatar
      libstdc++: #ifdef out #pragma GCC system_header · 63a598de
      Jason Merrill authored
      In r15-3714-gd3a7302ec5985a I added -Wsystem-headers to the libstdc++ build
      flags to help catch problems in the library.  This patch takes a different
      approach, of disabling the #pragma system_header unless _GLIBCXX_SYSHDR is
      defined.  As a result, the testsuites will treat them as non-system-headers
      to get better warning coverage during regression testing of both gcc and
      libstdc++, not just when building the library.
      
      My rationale for the #ifdef instead of just removing the #pragma is the
      three G++ tests that want to test libstdc++ system header behavior, so we
      need a way to select it.
      
      This doesn't affect installed libraries, as they get their
      system-header status from the lookup path.  But testsuite_flags
      --build-includes gives -I directives rather than -isystem.
      
      This patch doesn't change the headers in config/ because I'm not compiling
      with most of them, so won't see any warnings that need fixing.  Adjusting
      them could happen later, or we can not bother.
      
      libstdc++-v3/ChangeLog:
      
      	* acinclude.m4 (WARN_FLAGS): Remove -Wsystem-headers.
      	* configure: Regenerate.
      	* include/bits/algorithmfwd.h: #ifdef out #pragma GCC system_header.
      	* include/bits/atomic_base.h
      	* include/bits/atomic_futex.h
      	* include/bits/atomic_timed_wait.h
      	* include/bits/atomic_wait.h
      	* include/bits/basic_ios.h
      	* include/bits/basic_string.h
      	* include/bits/boost_concept_check.h
      	* include/bits/char_traits.h
      	* include/bits/charconv.h
      	* include/bits/chrono.h
      	* include/bits/chrono_io.h
      	* include/bits/codecvt.h
      	* include/bits/concept_check.h
      	* include/bits/cpp_type_traits.h
      	* include/bits/elements_of.h
      	* include/bits/enable_special_members.h
      	* include/bits/erase_if.h
      	* include/bits/forward_list.h
      	* include/bits/functional_hash.h
      	* include/bits/gslice.h
      	* include/bits/gslice_array.h
      	* include/bits/hashtable.h
      	* include/bits/indirect_array.h
      	* include/bits/invoke.h
      	* include/bits/ios_base.h
      	* include/bits/iterator_concepts.h
      	* include/bits/locale_classes.h
      	* include/bits/locale_facets.h
      	* include/bits/locale_facets_nonio.h
      	* include/bits/localefwd.h
      	* include/bits/mask_array.h
      	* include/bits/max_size_type.h
      	* include/bits/memory_resource.h
      	* include/bits/memoryfwd.h
      	* include/bits/move_only_function.h
      	* include/bits/node_handle.h
      	* include/bits/ostream_insert.h
      	* include/bits/out_ptr.h
      	* include/bits/parse_numbers.h
      	* include/bits/postypes.h
      	* include/bits/quoted_string.h
      	* include/bits/range_access.h
      	* include/bits/ranges_base.h
      	* include/bits/refwrap.h
      	* include/bits/sat_arith.h
      	* include/bits/semaphore_base.h
      	* include/bits/slice_array.h
      	* include/bits/std_abs.h
      	* include/bits/std_function.h
      	* include/bits/std_mutex.h
      	* include/bits/std_thread.h
      	* include/bits/stl_iterator_base_funcs.h
      	* include/bits/stl_iterator_base_types.h
      	* include/bits/stl_tree.h
      	* include/bits/stream_iterator.h
      	* include/bits/streambuf_iterator.h
      	* include/bits/stringfwd.h
      	* include/bits/this_thread_sleep.h
      	* include/bits/unique_lock.h
      	* include/bits/uses_allocator_args.h
      	* include/bits/utility.h
      	* include/bits/valarray_after.h
      	* include/bits/valarray_array.h
      	* include/bits/valarray_before.h
      	* include/bits/version.h
      	* include/c_compatibility/fenv.h
      	* include/c_compatibility/inttypes.h
      	* include/c_compatibility/stdint.h
      	* include/decimal/decimal.h
      	* include/experimental/bits/net.h
      	* include/experimental/bits/shared_ptr.h
      	* include/ext/aligned_buffer.h
      	* include/ext/alloc_traits.h
      	* include/ext/atomicity.h
      	* include/ext/concurrence.h
      	* include/ext/numeric_traits.h
      	* include/ext/pod_char_traits.h
      	* include/ext/pointer.h
      	* include/ext/stdio_filebuf.h
      	* include/ext/stdio_sync_filebuf.h
      	* include/ext/string_conversions.h
      	* include/ext/type_traits.h
      	* include/ext/vstring.h
      	* include/ext/vstring_fwd.h
      	* include/ext/vstring_util.h
      	* include/parallel/algorithmfwd.h
      	* include/parallel/numericfwd.h
      	* include/tr1/functional_hash.h
      	* include/tr1/hashtable.h
      	* include/tr1/random.h
      	* libsupc++/exception.h
      	* libsupc++/hash_bytes.h
      	* include/bits/basic_ios.tcc
      	* include/bits/basic_string.tcc
      	* include/bits/fstream.tcc
      	* include/bits/istream.tcc
      	* include/bits/locale_classes.tcc
      	* include/bits/locale_facets.tcc
      	* include/bits/locale_facets_nonio.tcc
      	* include/bits/ostream.tcc
      	* include/bits/sstream.tcc
      	* include/bits/streambuf.tcc
      	* include/bits/string_view.tcc
      	* include/bits/version.tpl
      	* include/experimental/bits/string_view.tcc
      	* include/ext/pb_ds/detail/resize_policy/hash_prime_size_policy_imp.hpp
      	* include/ext/random.tcc
      	* include/ext/vstring.tcc
      	* include/tr2/bool_set.tcc
      	* include/tr2/dynamic_bitset.tcc
      	* include/bits/c++config
      	* include/c/cassert
      	* include/c/cctype
      	* include/c/cerrno
      	* include/c/cfloat
      	* include/c/ciso646
      	* include/c/climits
      	* include/c/clocale
      	* include/c/cmath
      	* include/c/csetjmp
      	* include/c/csignal
      	* include/c/cstdarg
      	* include/c/cstddef
      	* include/c/cstdio
      	* include/c/cstdlib
      	* include/c/cstring
      	* include/c/ctime
      	* include/c/cuchar
      	* include/c/cwchar
      	* include/c/cwctype
      	* include/c_global/cassert
      	* include/c_global/ccomplex
      	* include/c_global/cctype
      	* include/c_global/cerrno
      	* include/c_global/cfenv
      	* include/c_global/cfloat
      	* include/c_global/cinttypes
      	* include/c_global/ciso646
      	* include/c_global/climits
      	* include/c_global/clocale
      	* include/c_global/cmath
      	* include/c_global/csetjmp
      	* include/c_global/csignal
      	* include/c_global/cstdalign
      	* include/c_global/cstdarg
      	* include/c_global/cstdbool
      	* include/c_global/cstddef
      	* include/c_global/cstdint
      	* include/c_global/cstdio
      	* include/c_global/cstdlib
      	* include/c_global/cstring
      	* include/c_global/ctgmath
      	* include/c_global/ctime
      	* include/c_global/cuchar
      	* include/c_global/cwchar
      	* include/c_global/cwctype
      	* include/c_std/cassert
      	* include/c_std/cctype
      	* include/c_std/cerrno
      	* include/c_std/cfloat
      	* include/c_std/ciso646
      	* include/c_std/climits
      	* include/c_std/clocale
      	* include/c_std/cmath
      	* include/c_std/csetjmp
      	* include/c_std/csignal
      	* include/c_std/cstdarg
      	* include/c_std/cstddef
      	* include/c_std/cstdio
      	* include/c_std/cstdlib
      	* include/c_std/cstring
      	* include/c_std/ctime
      	* include/c_std/cuchar
      	* include/c_std/cwchar
      	* include/c_std/cwctype
      	* include/debug/array
      	* include/debug/bitset
      	* include/debug/deque
      	* include/debug/forward_list
      	* include/debug/list
      	* include/debug/map
      	* include/debug/set
      	* include/debug/string
      	* include/debug/unordered_map
      	* include/debug/unordered_set
      	* include/debug/vector
      	* include/decimal/decimal
      	* include/experimental/algorithm
      	* include/experimental/any
      	* include/experimental/array
      	* include/experimental/buffer
      	* include/experimental/chrono
      	* include/experimental/contract
      	* include/experimental/deque
      	* include/experimental/executor
      	* include/experimental/filesystem
      	* include/experimental/forward_list
      	* include/experimental/functional
      	* include/experimental/internet
      	* include/experimental/io_context
      	* include/experimental/iterator
      	* include/experimental/list
      	* include/experimental/map
      	* include/experimental/memory
      	* include/experimental/memory_resource
      	* include/experimental/net
      	* include/experimental/netfwd
      	* include/experimental/numeric
      	* include/experimental/propagate_const
      	* include/experimental/ratio
      	* include/experimental/regex
      	* include/experimental/scope
      	* include/experimental/set
      	* include/experimental/socket
      	* include/experimental/string
      	* include/experimental/string_view
      	* include/experimental/synchronized_value
      	* include/experimental/system_error
      	* include/experimental/timer
      	* include/experimental/tuple
      	* include/experimental/type_traits
      	* include/experimental/unordered_map
      	* include/experimental/unordered_set
      	* include/experimental/vector
      	* include/ext/algorithm
      	* include/ext/cmath
      	* include/ext/functional
      	* include/ext/iterator
      	* include/ext/memory
      	* include/ext/numeric
      	* include/ext/random
      	* include/ext/rb_tree
      	* include/ext/rope
      	* include/parallel/algorithm
      	* include/std/algorithm
      	* include/std/any
      	* include/std/array
      	* include/std/atomic
      	* include/std/barrier
      	* include/std/bit
      	* include/std/bitset
      	* include/std/charconv
      	* include/std/chrono
      	* include/std/codecvt
      	* include/std/complex
      	* include/std/concepts
      	* include/std/condition_variable
      	* include/std/coroutine
      	* include/std/deque
      	* include/std/execution
      	* include/std/expected
      	* include/std/filesystem
      	* include/std/format
      	* include/std/forward_list
      	* include/std/fstream
      	* include/std/functional
      	* include/std/future
      	* include/std/generator
      	* include/std/iomanip
      	* include/std/ios
      	* include/std/iosfwd
      	* include/std/iostream
      	* include/std/istream
      	* include/std/iterator
      	* include/std/latch
      	* include/std/limits
      	* include/std/list
      	* include/std/locale
      	* include/std/map
      	* include/std/memory
      	* include/std/memory_resource
      	* include/std/mutex
      	* include/std/numbers
      	* include/std/numeric
      	* include/std/optional
      	* include/std/ostream
      	* include/std/print
      	* include/std/queue
      	* include/std/random
      	* include/std/ranges
      	* include/std/ratio
      	* include/std/regex
      	* include/std/scoped_allocator
      	* include/std/semaphore
      	* include/std/set
      	* include/std/shared_mutex
      	* include/std/span
      	* include/std/spanstream
      	* include/std/sstream
      	* include/std/stack
      	* include/std/stacktrace
      	* include/std/stdexcept
      	* include/std/streambuf
      	* include/std/string
      	* include/std/string_view
      	* include/std/syncstream
      	* include/std/system_error
      	* include/std/text_encoding
      	* include/std/thread
      	* include/std/tuple
      	* include/std/type_traits
      	* include/std/typeindex
      	* include/std/unordered_map
      	* include/std/unordered_set
      	* include/std/utility
      	* include/std/valarray
      	* include/std/variant
      	* include/std/vector
      	* include/std/version
      	* include/tr1/array
      	* include/tr1/cfenv
      	* include/tr1/cinttypes
      	* include/tr1/cmath
      	* include/tr1/complex
      	* include/tr1/cstdbool
      	* include/tr1/cstdint
      	* include/tr1/cstdio
      	* include/tr1/cstdlib
      	* include/tr1/cwchar
      	* include/tr1/cwctype
      	* include/tr1/functional
      	* include/tr1/memory
      	* include/tr1/random
      	* include/tr1/regex
      	* include/tr1/tuple
      	* include/tr1/type_traits
      	* include/tr1/unordered_map
      	* include/tr1/unordered_set
      	* include/tr1/utility
      	* include/tr2/bool_set
      	* include/tr2/dynamic_bitset
      	* include/tr2/type_traits
      	* libsupc++/atomic_lockfree_defines.h
      	* libsupc++/compare
      	* libsupc++/cxxabi.h
      	* libsupc++/cxxabi_forced.h
      	* libsupc++/cxxabi_init_exception.h
      	* libsupc++/exception
      	* libsupc++/initializer_list
      	* libsupc++/new
      	* libsupc++/typeinfo: Likewise.
      	* testsuite/20_util/ratio/operations/ops_overflow_neg.cc
      	* testsuite/23_containers/array/tuple_interface/get_neg.cc
      	* testsuite/23_containers/vector/cons/destructible_debug_neg.cc
      	* testsuite/24_iterators/operations/prev_neg.cc
      	* testsuite/ext/type_traits/add_unsigned_floating_neg.cc
      	* testsuite/ext/type_traits/add_unsigned_integer_neg.cc
      	* testsuite/ext/type_traits/remove_unsigned_floating_neg.cc
      	* testsuite/ext/type_traits/remove_unsigned_integer_neg.cc: Adjust
      	line numbers.
      
      gcc/testsuite/ChangeLog
      
      	* g++.dg/analyzer/fanalyzer-show-events-in-system-headers-default.C
      	* g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C
      	* g++.dg/diagnostic/disable.C: #define _GLIBCXX_SYSHDR.
      63a598de
    • Jason Merrill's avatar
      libstdc++: more #pragma diagnostic · 2407dbe1
      Jason Merrill authored
      The CI saw failures on 17_intro/headers/c++2011/parallel_mode.cc due to
      -Wdeprecated-declarations warnings in some parallel/ headers.
      
      libstdc++-v3/ChangeLog:
      
      	* include/parallel/base.h: Suppress -Wdeprecated-declarations.
      	* include/parallel/multiseq_selection.h: Likewise.
      2407dbe1
    • Richard Biener's avatar
      Use tree view for find_always_executed_bbs result · 7ad17fe0
      Richard Biener authored
      The following makes us use bitmap tree view for the always-executed-BBs
      bitmap as computed by IPA utils find_always_executed_bbs and used by
      IPA modref (where it shows up in the profile for PR114855.
      
      	* ipa-utils.cc (find_always_executed_bbs): Switch result
      	bitmap to tree view.
      7ad17fe0
    • Tobias Burnus's avatar
      OpenMP: Update OMP_REQUIRES_TARGET_USED for declare_target + interop · fcff9c3d
      Tobias Burnus authored
      Older versions of the OpenMP specification were not clear about what counted
      as device usage. Newer (like TR13) are rather clear. Hence, this commit adds
      GCC's target-used flag also when a 'declare target' or an 'interop' are
      encountered.  (The latter only to Fortran as C/C++ parsing support is still
      missing.) TR13 also lists 'dispatch' as target-used construct (as it has the
      device clause) and 'device_safesync' as clause with global requirement
      property, but both are not yet supported in GCC.
      
      gcc/c/ChangeLog:
      
      	* c-parser.cc (c_parser_omp_declare_target): Set target-used bit
      	in omp_requires_mask.
      
      gcc/cp/ChangeLog:
      
      	* parser.cc (cp_parser_omp_declare_target): Set target-used bit
      	in omp_requires_mask.
      
      gcc/fortran/ChangeLog:
      
      	* parse.cc (decode_omp_directive): Set target-used bit of
      	omp_requires_mask when encountering the declare_target or interop
      	directive.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/gomp/interop-1.f90: Add dg-error for missing
      	omp requires requirement and declare_variant usage.
      	* gfortran.dg/gomp/requires-8.f90: Likewise.
      fcff9c3d
    • Pan Li's avatar
      RISC-V: Cleanup debug code for SAT_* testcases [NFC] · 5d87b98a
      Pan Li authored
      
      Some print code for debugging is committed by mistake, remove them
      from the test header file.
      
      It is test only patch and obvious up to a point, will commit it
      directly if no comments in next 48H.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/riscv/scalar_sat_binary_run_xxx.h: Remove printf
      	code for debugging.
      
      Signed-off-by: default avatarPan Li <pan2.li@intel.com>
      5d87b98a
    • Richard Biener's avatar
      rtl-optimization/114855 - slow add_store_equivs in IRA · cc141b56
      Richard Biener authored
      For the testcase in PR114855 at -O1 add_store_equivs shows up as the
      main sink for bitmap_set_bit because it uses a bitmap to mark all
      seen insns by UID to make sure the forward walk in memref_used_between_p
      will find the insn in question.  Given we do have a CFG here the
      functions operation is questionable, given memref_used_between_p
      together with the walk of all insns is obviously quadratic in the
      worst case that whole thing should be re-done ... but, for the
      testcase, using a sbitmap of size get_max_uid () + 1 gets
      bitmap_set_bit off the profile and improves IRA time from 15.58s (8%)
      to 3.46s (2%).
      
      Now, given above quadraticness I wonder whether we should instead
      gate add_store_equivs on optimize > 1 or flag_expensive_optimizations.
      
      	PR rtl-optimization/114855
      	* ira.cc (add_store_equivs): Use sbitmap for tracking
      	visited insns.
      cc141b56
    • Richard Biener's avatar
      Disable add_store_equivs when -fno-expensive-optimizations · 0b2d3bfa
      Richard Biener authored
      IRAs add_store_equivs is quadratic in the size of the function worst
      case, disable it when -fno-expensive-optimizations which means at
      -O1 and -Og.
      
      	* ira.cc (ira): Gate add_store_equivs on flag_expensive_optimizations.
      0b2d3bfa
    • Richard Biener's avatar
      tree-optimization/114855 - slow VRP due to equiv oracle queries · caf3fe78
      Richard Biener authored
      For the testcase in PR114855 VRP takes 320.41s (23%) (after mitigating
      backwards threader slowness).  This is mostly due to the bitmap check
      in equiv_oracle::find_equiv_dom.  The following turns this bitmap
      to tree view, trading the linear search for a O(log N) one which
      improves VRP time to 54.54s (5%).
      
      	PR tree-optimization/114855
      	* value-relation.cc (equiv_oracle::equiv_oracle): Switch
      	m_equiv_set to tree view.
      caf3fe78
    • Pan Li's avatar
      RISC-V: Refine the testcase of vector SAT_TRUNC · 5b652b01
      Pan Li authored
      
      Take scan-assembler-times for vnclip insn check instead of function body,
      as we only care about if we can generate the fixed point insn vnclip.
      
      The below test are passed for this patch.
      * The rv64gcv fully regression test.
      
      It is test only patch and obvious up to a point, will commit it
      directly if no comments in next 48H.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-1.c: Remove
      	func body check and take scan asm times instead.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-10.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-11.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-12.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-13.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-14.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-15.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-16.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-17.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-18.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-19.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-2.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-20.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-21.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-22.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-23.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-24.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-3.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-4.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-5.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-6.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-7.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-8.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-9.c: Ditto.
      
      Signed-off-by: default avatarPan Li <pan2.li@intel.com>
      5b652b01
    • Pan Li's avatar
      RISC-V: Refine the testcase of vector SAT_SUB · 32bcca3e
      Pan Li authored
      
      Take scan-assembler-times for vssub insn check instead of function body,
      as we only care about if we can generate the fixed point insn vssub.
      
      The below test are passed for this patch.
      * The rv64gcv fully regression test.
      
      It is test only patch and obvious up to a point, will commit it
      directly if no comments in next 48H.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-1.c: Remove
      	func body check and take scan asm times instead.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-10.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-11.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-12.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-13.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-14.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-15.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-16.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-17.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-18.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-19.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-2.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-20.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-21.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-22.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-23.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-24.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-25.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-26.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-27.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-28.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-29.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-3.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-30.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-31.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-32.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-33.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-34.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-35.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-36.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-37.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-38.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-39.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-4.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-40.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-5.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-6.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-7.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-8.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-9.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub_trunc-1.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub_trunc-2.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub_trunc-3.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub_zip.c: Ditto.
      
      Signed-off-by: default avatarPan Li <pan2.li@intel.com>
      32bcca3e
    • Pan Li's avatar
      RISC-V: Refine the testcase of vector SAT_ADD · 043d607c
      Pan Li authored
      
      Take scan-assembler-times for vsadd insn check instead of function body,
      as we only care about if we can generate the fixed point insn vsadd.
      
      The below test are passed for this patch.
      * The rv64gcv fully regression test.
      
      It is test only patch and obvious up to a point, will commit it
      directly if no comments in next 48H.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_s_add-1.c: Remove
      	func body check and take scan asm times instead.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_s_add-2.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_s_add-3.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_s_add-4.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-1.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-10.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-11.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-12.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-13.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-14.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-15.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-16.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-17.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-18.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-19.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-2.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-20.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-21.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-22.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-23.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-24.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-25.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-26.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-27.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-28.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-29.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-3.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-30.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-31.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-32.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-4.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-5.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-6.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-7.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-8.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-9.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-1.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-10.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-11.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-12.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-13.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-14.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-15.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-16.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-2.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-3.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-4.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-5.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-6.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-7.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-8.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add_imm-9.c: Ditto.
      
      Signed-off-by: default avatarPan Li <pan2.li@intel.com>
      043d607c
    • Lingling Kong's avatar
      i386: Update the comment for mapxf option · 742d242f
      Lingling Kong authored
      gcc/ChangeLog:
      
      	* config/i386/i386.opt: Update the features included in apxf.
      742d242f
    • Sandra Loosemore's avatar
      OpenMP: Fix testsuite failure on x86 with -m32 · 6935bddd
      Sandra Loosemore authored
      The testcase decare-variant-duplicates.c added in commit
      96246bff failed on 32-bit x86
      because on that target "i386" is defined as a preprocessor macro
      and cannot be used as an identifier.  Fixed by rewriting that test
      not to do that.
      
      gcc/testsuite/ChangeLog
      	* c-c++-common/gomp/declare-variant-duplicates.c: Avoid using
      	"i386" as an identifier.
      6935bddd
    • GCC Administrator's avatar
      Daily bump. · 2d8392c4
      GCC Administrator authored
      2d8392c4
  2. Sep 24, 2024
    • Thomas Koenig's avatar
      Add random numbers and fix some bugs. · 291e20e8
      Thomas Koenig authored
      This patch adds random number support for UNSIGNED, plus fixes
      two bugs, with array I/O where the type used to be set to BT_INTEGER,
      and for division with the divisor being a constant.
      
      gcc/fortran/ChangeLog:
      
      	* check.cc (gfc_check_random_number): Adjust for unsigned.
      	* iresolve.cc (gfc_resolve_random_number): Handle unsigned.
      	* trans-expr.cc (gfc_conv_expr_op): Handle BT_UNSIGNED for divide.
      	* trans-types.cc (gfc_get_dtype_rank_type): Handle BT_UNSIGNED.
      	* gfortran.texi: Add RANDOM_NUMBER for UNSIGNED.
      
      libgfortran/ChangeLog:
      
      	* gfortran.map: Add _gfortran_random_m1, _gfortran_random_m2,
      	_gfortran_random_m4, _gfortran_random_m8 and _gfortran_random_m16.
      	* intrinsics/random.c (random_m1): New function.
      	(random_m2): New function.
      	(random_m4): New function.
      	(random_m8): New function.
      	(random_m16): New function.
      	(arandom_m1): New function.
      	(arandom_m2): New function.
      	(arandom_m4): New function.
      	(arandom_m8): New funciton.
      	(arandom_m16): New function.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/unsigned_30.f90: New test.
      291e20e8
    • Thomas Koenig's avatar
      Implement IANY, IALL and IPARITY for unsigned. · fbeb1a96
      Thomas Koenig authored
      gcc/fortran/ChangeLog:
      
      	* check.cc (gfc_check_transf_bit_intrins): Handle unsigned.
      	* gfortran.texi: Docment IANY, IALL and IPARITY for unsigned.
      	* iresolve.cc (gfc_resolve_iall): Set flag to use integer
      	if type is BT_UNSIGNED.
      	(gfc_resolve_iany): Likewise.
      	(gfc_resolve_iparity): Likewise.
      	* simplify.cc (do_bit_and): Adjust asserts for BT_UNSIGNED.
      	(do_bit_ior): Likewise.
      	(do_bit_xor): Likewise
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/unsigned_29.f90: New test.
      fbeb1a96
    • Jakub Jelinek's avatar
      options: Regenerate c.opt.urls · 1762b7f8
      Jakub Jelinek authored
      Forgot to regenerate URLs for the C++23 P2718R0 patch.
      
      2024-09-24  Jakub Jelinek  <jakub@redhat.com>
      
      	* c.opt.urls: Regenerate.
      1762b7f8
    • Thomas Koenig's avatar
      Implement SUM and PRODUCT for unsigned. · 5e918a4d
      Thomas Koenig authored
      gcc/fortran/ChangeLog:
      
      	* gfortran.texi: Document SUM and PRODUCT.
      	* iresolve.cc (resolve_transformational): New argument,
      	use_integer, to translate calls to unsigned to calls to
      	integer.
      	(gfc_resolve_product): Use it
      	(gfc_resolve_sum): Use it.
      	* simplify.cc (init_result_expr): Handle BT_UNSIGNED.
      
      libgfortran/ChangeLog:
      
      	* generated/product_c10.c: Regenerated.
      	* generated/product_c16.c: Regenerated.
      	* generated/product_c17.c: Regenerated.
      	* generated/product_c4.c: Regenerated.
      	* generated/product_c8.c: Regenerated.
      	* generated/product_i1.c: Regenerated.
      	* generated/product_i16.c: Regenerated.
      	* generated/product_i2.c: Regenerated.
      	* generated/product_i4.c: Regenerated.
      	* generated/product_i8.c: Regenarated.
      	* generated/product_r10.c: Regenerated.
      	* generated/product_r16.c: Regenerated.
      	* generated/product_r17.c: Regenerated.
      	* generated/product_r4.c: Regenerated.
      	* generated/product_r8.c: Regenarated.
      	* generated/sum_c10.c: Regenerated.
      	* generated/sum_c16.c: Regenerated.
      	* generated/sum_c17.c: Regenerated.
      	* generated/sum_c4.c: Regenerated.
      	* generated/sum_c8.c: Regenerated.
      	* generated/sum_i1.c: Regenerated.
      	* generated/sum_i16.c: Regenerated.
      	* generated/sum_i2.c: Regenerated.
      	* generated/sum_i4.c: Regenerated.
      	* generated/sum_i8.c: Regenerated.
      	* generated/sum_r10.c: Regenerated.
      	* generated/sum_r16.c: Regenerated.
      	* generated/sum_r17.c: Regenerated.
      	* generated/sum_r4.c: Regenerated.
      	* generated/sum_r8.c: Regenerated.
      	* m4/ifunction.m4: Whitespace fix.
      	* m4/product.m4: If type is integer, change to unsigned.
      	* m4/sum.m4: Likewise.
      5e918a4d
    • Thomas Koenig's avatar
      Implement MATMUL and DOT_PRODUCT for unsigned. · 5d98fe09
      Thomas Koenig authored
      gcc/fortran/ChangeLog:
      
      	* arith.cc (gfc_arith_uminus): Fix warning.
      	(gfc_arith_minus): Correctly truncate unsigneds.
      	* check.cc (gfc_check_dot_product): Handle unsigned arguments.
      	(gfc_check_matmul): Likewise.
      	* expr.cc (gfc_get_unsigned_expr): New function.
      	* gfortran.h (gfc_get_unsigned_expr): Add prototype.
      	* iresolve.cc (gfc_resolve_matmul): If using UNSIGNED, use the
      	signed integer version.
      	* gfortran.texi: Document MATMUL and DOT_PRODUCT for unsigned.
      	* simplify.cc (compute_dot_product): Handle unsigneds.
      
      libgfortran/ChangeLog:
      
      	* m4/iparm.m4: Add UNSIGED if type is m.
      	* m4/matmul.m4: If type is GFC_INTEGER, use GFC_UINTEGER instead.
      	Whitespace fixes.
      	* m4/matmul_internal.m4: Whitespace fixes.
      
      	* generated/matmul_c10.c: Regenerated.
      	* generated/matmul_c16.c: Regenerated.
      	* generated/matmul_c17.c: Regenerated.
      	* generated/matmul_c4.c: Regenerated.
      	* generated/matmul_c8.c: Regeneraated.
      	* generated/matmul_i1.c: Regenerated.
      	* generated/matmul_i16.c: Regenerated.
      	* generated/matmul_i2.c: Regenerated.
      	* generated/matmul_i4.c: Regenerated.
      	* generated/matmul_i8.c: Regenerated.
      	* generated/matmul_r10.c: Regenerated.
      	* generated/matmul_r16.c: Regenerated.
      	* generated/matmul_r17.c: Regenerated.
      	* generated/matmul_r4.c: Regenerated.
      	* generated/matmul_r8.c: Regenerated.
      	* libgfortran.h: Add array types for unsiged.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/unsigned_25.f90: New test.
      	* gfortran.dg/unsigned_26.f90: New test.
      5d98fe09
    • Jakub Jelinek's avatar
      c++: Implement C++23 P2718R0 - Wording for P2644R1 Fix for Range-based for Loop [PR107637] · 650e9156
      Jakub Jelinek authored
      The following patch implements the C++23 P2718R0 paper
      - Wording for P2644R1 Fix for Range-based for Loop.
      The patch introduces a new option, -f{,no-}range-for-ext-temps so that
      user can control the behavior even in older C++ versions.
      The option is on by default in C++23 and later (-fno-range-for-ext-temps
      is an error in that case) and in the -std=gnu++11 ... -std=gnu++20 modes
      (one can use -fno-range-for-ext-temps to request previous behavior in that
      case), and is not enabled by default in -std=c++11 ... -std=c++20 modes
      but one can explicitly enable it with -frange-for-ext-temps.
      As all the temporaries from __for_range initialization should have life
      extended until the end of __for_range scope, this patch disables (for
      -frange-for-ext-temps and if !processing_template_decl) CLEANUP_POINT_EXPR wrapping
      of the __for_range declaration, also disables -Wdangling-reference warning
      as well as the rest of extend_ref_init_temps (we know the __for_range temporary
      is not TREE_STATIC and as all the temporaries from the initializer will be life
      extended, we shouldn't try to handle temporaries referenced by references any
      differently) and adds an extra push_stmt_list/pop_stmt_list before
      cp_finish_decl of __for_range and after end of the for body and wraps all
      that into CLEANUP_POINT_EXPR.
      I had to repeat that also for OpenMP range loops because those are handled
      differently.
      
      2024-09-24  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c++/107637
      gcc/
      	* omp-general.cc (find_combined_omp_for, find_nested_loop_xform):
      	Handle CLEANUP_POINT_EXPR like TRY_FINALLY_EXPR.
      	* doc/invoke.texi (frange-for-ext-temps): Document.  Add
      	-fconcepts to the C++ option list.
      gcc/c-family/
      	* c.opt (frange-for-ext-temps): New option.
      	* c-opts.cc (c_common_post_options): Set flag_range_for_ext_temps
      	for C++23 or later or for C++11 or later in !flag_iso mode if
      	the option wasn't set by user.
      	* c-cppbuiltin.cc (c_cpp_builtins): Change __cpp_range_based_for
      	value for flag_range_for_ext_temps from 201603L to 202212L in C++17
      	or later.
      	* c-omp.cc (c_find_nested_loop_xform_r): Handle CLEANUP_POINT_EXPR
      	like TRY_FINALLY_EXPR.
      gcc/cp/
      	* cp-tree.h: Implement C++23 P2718R0 - Wording for P2644R1 Fix for
      	Range-based for Loop.
      	(cp_convert_omp_range_for): Add bool tmpl_p argument.
      	(find_range_for_decls): Declare.
      	* parser.cc (cp_convert_range_for): For flag_range_for_ext_temps call
      	push_stmt_list () before cp_finish_decl for range_temp and save it
      	temporarily to FOR_INIT_STMT.
      	(cp_convert_omp_range_for): Add tmpl_p argument.  If set, remember
      	DECL_NAME of range_temp and for cp_finish_decl call restore it before
      	clearing it again, if unset, don't adjust DECL_NAME of range_temp at
      	all.
      	(cp_parser_omp_loop_nest): For flag_range_for_ext_temps range for add
      	CLEANUP_POINT_EXPR around sl.  Call find_range_for_decls and adjust
      	DECL_NAMEs for range fors if not processing_template_decl.  Adjust
      	cp_convert_omp_range_for caller.  Remove superfluous backslash at the
      	end of line.
      	* decl.cc (initialize_local_var): For flag_range_for_ext_temps
      	temporarily clear stmts_are_full_exprs_p rather than set for
      	for_range__identifier decls.
      	* call.cc (extend_ref_init_temps): For flag_range_for_ext_temps return
      	init early for for_range__identifier decls.
      	* semantics.cc (find_range_for_decls): New function.
      	(finish_for_stmt): Use it.  For flag_range_for_ext_temps if
      	cp_convert_range_for set FOR_INIT_STMT, pop_stmt_list it and wrap
      	into CLEANUP_POINT_EXPR.
      	* pt.cc (tsubst_omp_for_iterator): Adjust tsubst_omp_for_iterator
      	caller.
      	(tsubst_stmt) <case OMP_FOR>: For flag_range_for_ext_temps if there
      	are any range fors in the loop nest, add push_stmt_list starting
      	before the initializations, pop_stmt_list it after the body and wrap
      	into CLEANUP_POINT_EXPR.  Change DECL_NAME of range for temps from
      	NULL to for_range_identifier.
      gcc/testsuite/
      	* g++.dg/cpp23/range-for1.C: New test.
      	* g++.dg/cpp23/range-for2.C: New test.
      	* g++.dg/cpp23/range-for3.C: New test.
      	* g++.dg/cpp23/range-for4.C: New test.
      	* g++.dg/cpp23/range-for5.C: New test.
      	* g++.dg/cpp23/range-for6.C: New test.
      	* g++.dg/cpp23/range-for7.C: New test.
      	* g++.dg/cpp23/range-for8.C: New test.
      	* g++.dg/cpp23/feat-cxx2b.C (__cpp_range_based_for): Check for
      	202212L rather than 201603L.
      	* g++.dg/cpp26/feat-cxx26.C (__cpp_range_based_for): Likewise.
      	* g++.dg/warn/Wdangling-reference4.C: Don't expect warning for C++23
      	or newer.  Use dg-additional-options rather than dg-options.
      libgomp/
      	* testsuite/libgomp.c++/range-for-1.C: New test.
      	* testsuite/libgomp.c++/range-for-2.C: New test.
      	* testsuite/libgomp.c++/range-for-3.C: New test.
      	* testsuite/libgomp.c++/range-for-4.C: New test.
      	* testsuite/libgomp.c++/range-for-5.C: New test.
      650e9156
    • Iain Sandoe's avatar
      libgcc, Darwin: Drop the legacy library build for macOS >= 15 [PR116809]. · d9cafa0c
      Iain Sandoe authored
      
      We have been building a legacy libgcc_s.1 DSO to support code that
      was built with older compilers.
      
      From macOS 15,  the unwinder no longer exports some of the symbols used
      in that library which (a) cuases bootstrap fail and (b) means that the
      legacy library is no longer useful.
      
      No open branch of GCC emits references to this library - and any already
      -built code that depends on the symbols would need rework anyway.
      
      	PR target/116809
      
      libgcc/ChangeLog:
      
      	* config.host: Build legacy libgcc_s.1 on hosts before macOS 15.
      	* config/i386/t-darwin: Remove reference to legacy libgcc_s.1
      	* config/rs6000/t-darwin: Likewise.
      	* config/t-darwin-libgccs1: New file.
      
      Signed-off-by: default avatarIain Sandoe <iain@sandoe.co.uk>
      d9cafa0c
    • Jakub Jelinek's avatar
      i386: Fix comment typo · dab45002
      Jakub Jelinek authored
      Found a comment typo, fixed as obvious.
      
      2024-09-24  Jakub Jelinek  <jakub@redhat.com>
      
      	* config/i386/i386-expand.cc (ix86_expand_round_builtin): Fix comment
      	typo, insead -> instead.
      dab45002
    • Nina Dinka Ranns's avatar
      c++/contracts: ICE in build_contract_condition_function [PR116490] · ae57e527
      Nina Dinka Ranns authored
      
      We currently do not expect comdat group of the guarded function to
      be set at the time of generating pre and post check function.
      However, in the case of an explicit instantiation, the guarded
      function has been added to a comdat group before generating contract
      check functions, which causes the observed ICE. Current assert
      removed and an additional check for comdat group of the guarded
      function added. With this change, the pre and post check functions
      get added to the same comdat group of the guarded function if the
      guarded function is already placed in a comdat group.
      
      	PR c++/116490
      
      gcc/cp/ChangeLog:
      
      	* contracts.cc (build_contract_condition_function): added
      	a check for comdat group of the guarded function. If set,
      	the condition check function is added to the same comdat
      	group.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/contracts/pr116490.C: New test.
      
      Signed-off-by: default avatarNina Ranns <dinka.ranns@gmail.com>
      ae57e527
    • Tobias Burnus's avatar
      libgomp: with USM, init 'link' variables with host address · 4cb20dc0
      Tobias Burnus authored
      If requires unified_shared_memory or self_maps is set, make
      'declare target link' variables to point initially to the host pointer.
      
      libgomp/ChangeLog:
      
      	* target.c (gomp_load_image_to_device): For requires
      	unified_shared_memory, update 'link' vars to point to the host var.
      	* testsuite/libgomp.c-c++-common/target-link-3.c: New test.
      	* testsuite/libgomp.c-c++-common/target-link-4.c: New test.
      4cb20dc0
    • Yixuan Chen's avatar
      [PATCH] RISC-V: Fix FIXED_REGISTERS comment missing return address register · 79a3d3da
      Yixuan Chen authored
      gcc/ChangeLog:
      
      	* config/riscv/riscv.h: Fix FIXED_REGISTERS comment missing return
      	address register.
      79a3d3da
    • Sandra Loosemore's avatar
      OpenMP: Check additional restrictions on context selector properties · 96246bff
      Sandra Loosemore authored
      TR13 (pre-6.0) of the OpenMP spec says:
      
      "Each trait-property may only be specified once in a trait selector
      other than those in the construct selector set."
      
      and
      
      "If trait-property any is specified in the kind trait-selector of the
      device selector set or the target_device selector sets, no other
      trait-property may be specified in the same selector set."
      
      These restrictions (with slightly different wording) date back to
      OpenMP 5.1, but were not in 5.0 which was the basis for GCC's
      implementation.
      
      This patch adds a diagnostic, adds new testcases, and fixes some older
      testcases that include now-invalid selectors.
      
      gcc/ChangeLog
      	* omp-general.cc (omp_check_context_selector): Reject other
      	properties in the same selector set with kind(any).  Also reject
      	duplicate name-list properties.
      
      gcc/testsuite/ChangeLog
      	* c-c++-common/gomp/declare-variant-10.c: Fix broken tests.
      	* c-c++-common/gomp/declare-variant-3.c: Likewise.
      	* c-c++-common/gomp/declare-variant-9.c: Likewise.
      	* c-c++-common/gomp/declare-variant-any.c: New.
      	* c-c++-common/gomp/declare-variant-duplicates.c: New.
      	* gfortran.dg/gomp/declare-variant-10.f90: Fix broken tests.
      	* gfortran.dg/gomp/declare-variant-3.f90: Likewise.
      	* gfortran.dg/gomp/declare-variant-9.f90: Likewise.
      	* gfortran.dg/gomp/declare-variant-any.f90: New.
      	* gfortran.dg/gomp/declare-variant-duplicates.f90: New.
      96246bff
    • Richard Biener's avatar
      Simplify range-op shift mask generation · 2114243c
      Richard Biener authored
      The following reduces the number of wide_ints built which show up
      in the profile for PR114855 as the largest remaining bit at -O1.
      
      	* range-op.cc (operator_rshift::op1_range): Use wi::mask instead
      	of shift and not.
      2114243c
    • Pan Li's avatar
      Widening-Mul: Fix one ICE for SAT_SUB matching operand checking · de6fe690
      Pan Li authored
      
      This patch would like to fix the following ICE for -O2 -m32 of x86_64.
      
      during RTL pass: expand
      JackMidiAsyncWaitQueue.cpp.cpp: In function 'void DequeueEvent(unsigned
      int)':
      JackMidiAsyncWaitQueue.cpp.cpp:3:6: internal compiler error: in
      expand_fn_using_insn, at internal-fn.cc:263
          3 | void DequeueEvent(unsigned frame) {
            |      ^~~~~~~~~~~~
      0x27b580d diagnostic_context::diagnostic_impl(rich_location*,
      diagnostic_metadata const*, diagnostic_option_id, char const*,
      __va_list_tag (*) [1], diagnostic_t)
              ???:0
      0x27c4a3f internal_error(char const*, ...)
              ???:0
      0x27b3994 fancy_abort(char const*, int, char const*)
              ???:0
      0xf25ae5 expand_fn_using_insn(gcall*, insn_code, unsigned int, unsigned int)
              ???:0
      0xf2a124 expand_direct_optab_fn(internal_fn, gcall*, optab_tag, unsigned int)
              ???:0
      0xf2c87c expand_SAT_SUB(internal_fn, gcall*)
              ???:0
      
      We allowed the operand convert when matching SAT_SUB in match.pd, to support
      the zip benchmark SAT_SUB pattern.  Aka,
      
      (convert? (minus (convert1? @0) (convert1? @1))) for below sample code.
      
      void test (uint16_t *x, unsigned b, unsigned n)
      {
        unsigned a = 0;
        register uint16_t *p = x;
      
        do {
          a = *--p;
          *p = (uint16_t)(a >= b ? a - b : 0); // Truncate after .SAT_SUB
        } while (--n);
      }
      
      The pattern match for SAT_SUB itself may also act on below scalar sample
      code too.
      
      unsigned long long GetTimeFromFrames(int);
      unsigned long long GetMicroSeconds();
      
      void DequeueEvent(unsigned frame) {
        long long frame_time = GetTimeFromFrames(frame);
        unsigned long long current_time = GetMicroSeconds();
        DequeueEvent(frame_time < current_time ? 0 : frame_time - current_time);
      }
      
      Aka:
      
      uint32_t a = (uint32_t)SAT_SUB(uint64_t, uint64_t);
      
      Then there will be a problem when ia32 or -m32 is given when compiling.
      Because we only check the lhs (aka uint32_t) type is supported by ifn
      instead of the operand (aka uint64_t).  Mostly DImode is disabled for
      32 bits target like ia32 or rv32gcv, and then trigger ICE when expanding.
      
      The below test suites are passed for this patch.
      * The rv64gcv fully regression test.
      * The x86 bootstrap test.
      * The x86 fully regression test.
      
      	PR middle-end/116814
      
      gcc/ChangeLog:
      
      	* tree-ssa-math-opts.cc (build_saturation_binary_arith_call): Make
      	ifn is_supported type check based on operand instead of lhs.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/torture/pr116814-1.C: New test.
      
      Signed-off-by: default avatarPan Li <pan2.li@intel.com>
      de6fe690
    • Richard Biener's avatar
      tree-optimization/116819 - SLP with !STMT_VINFO_RELEVANT representative · cef29936
      Richard Biener authored
      Under some circumstances we can end up picking a not relevant stmt
      as representative of a SLP node.  Instead of skipping stmt analysis
      and declaring success we have to either ignore relevancy throughout
      the code base or fail SLP operation verification.  The following
      does the latter.
      
      	PR tree-optimization/116819
      	* tree-vect-stmts.cc (vect_analyze_stmt): When the SLP
      	representative isn't relevant signal failure instead of
      	success.
      cef29936
    • Robin Dapp's avatar
      RISC-V: testsuite: Fix SELECT_VL SLP fallout. · 4bd3ccae
      Robin Dapp authored
      This fixes asm-scan fallout from r15-3712-g5e3a4a01785e2d where we allow
      SLP with SELECT_VL.
      
      Assisted by sed and regtested on rv64gcv_zvfh_zvbb.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_s_add-1.c: Expect
      	length-controlled loop.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_s_add-2.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_s_add-3.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_s_add-4.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-1.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-10.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-11.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-12.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-13.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-14.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-15.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-16.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-17.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-18.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-19.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-2.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-20.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-21.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-22.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-23.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-24.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-25.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-26.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-27.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-28.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-29.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-3.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-30.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-31.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-32.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-4.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-5.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-6.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-7.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-8.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_add-9.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-1.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-10.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-11.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-12.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-13.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-14.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-15.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-16.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-17.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-18.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-19.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-2.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-20.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-21.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-22.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-23.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-24.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-25.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-26.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-27.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-28.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-29.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-3.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-30.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-31.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-32.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-33.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-34.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-35.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-36.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-37.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-38.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-39.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-4.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-40.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-5.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-6.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-7.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-8.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub-9.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub_trunc-1.c:
      	Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub_trunc-2.c:
      	Ditto.
      	* gcc.target/riscv/rvv/autovec/binop/vec_sat_u_sub_trunc-3.c:
      	Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-1.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-10.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-11.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-12.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-13.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-14.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-15.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-16.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-17.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-18.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-19.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-2.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-20.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-21.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-22.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-23.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-24.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-3.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-4.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-5.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-6.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-7.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-8.c: Ditto.
      	* gcc.target/riscv/rvv/autovec/unop/vec_sat_u_trunc-9.c: Ditto.
      4bd3ccae
    • Robin Dapp's avatar
      RISC-V: Add more vector-vector extract cases. · be50c763
      Robin Dapp authored
      This adds a V16SI -> V4SI and related i.e. "quartering" vector-vector
      extract expander for VLS modes.  It helps with spills in x264 that may
      cause a load-hit-store.
      
      gcc/ChangeLog:
      
      	* config/riscv/autovec.md (vec_extract<mode><vls_quarter>):
      	Add quarter vec-vec extract.
      	* config/riscv/vector-iterators.md: New iterators.
      be50c763
    • Robin Dapp's avatar
      RISC-V: Fix effective target check. · e45537f5
      Robin Dapp authored
      The return value is inverted in check_effective_target_rvv_zvl256b_ok
      and check_effective_target_rvv_zvl512b_ok.  Fix this and also just use
      the current march.
      
      gcc/testsuite/ChangeLog:
      
      	* lib/target-supports.exp: Fix effective target check.
      e45537f5
Loading