Skip to content
Snippets Groups Projects
  1. Oct 10, 2024
  2. Oct 09, 2024
    • liuhongt's avatar
      Adjust testcase after relax O2 vectorization. · d5d1189c
      liuhongt authored
      gcc/testsuite/ChangeLog:
      
      	* gcc.dg/fstack-protector-strong.c: Adjust
      	scan-assembler-times.
      	* gcc.dg/graphite/scop-6.c: Refine the testcase to avoid array
      	out of bounds.
      	* gcc.dg/graphite/scop-9.c: Ditto.
      	* gcc.dg/tree-ssa/ivopts-lt-2.c: Add -fno-tree-vectorize.
      	* gcc.dg/tree-ssa/ivopts-lt.c: Ditto.
      	* gcc.dg/tree-ssa/loop-16.c: Ditto.
      	* gcc.dg/tree-ssa/loop-28.c: Ditto.
      	* gcc.dg/tree-ssa/loop-bound-2.c: Ditto.
      	* gcc.dg/tree-ssa/loop-bound-4.c: Ditto.
      	* gcc.dg/tree-ssa/loop-bound-6.c: Ditto.
      	* gcc.dg/tree-ssa/predcom-4.c: Ditto.
      	* gcc.dg/tree-ssa/predcom-5.c: Ditto.
      	* gcc.dg/tree-ssa/scev-11.c: Ditto.
      	* gcc.dg/tree-ssa/scev-9.c: Ditto.
      	* gcc.dg/tree-ssa/split-path-11.c: Ditto.
      	* gcc.dg/unroll-8.c: Ditto.
      	* gcc.dg/var-expand1.c: Ditto.
      	* gcc.dg/vect/vect-cost-model-6.c: Removed.
      	* gcc.target/i386/pr86270.c: Ditto.
      	* gcc.target/i386/pr86722.c: Ditto.
      	* gcc.target/x86_64/abi/callabi/leaf-2.c: Ditto.
      d5d1189c
    • liuhongt's avatar
      Enable vectorization for unknown tripcount in very cheap cost model but... · 70c3db51
      liuhongt authored
      Enable vectorization for unknown tripcount in very cheap cost model but disable epilog vectorization.
      
      gcc/ChangeLog:
      
      	* tree-vect-loop.cc (vect_analyze_loop_costing): Enable
      	vectorization for LOOP_VINFO_PEELING_FOR_NITER in very cheap
      	cost model.
      	(vect_analyze_loop): Disable epilogue vectorization in very
      	cheap cost model.
      	* doc/invoke.texi: Adjust documents for very-cheap cost model.
      70c3db51
    • Jovan Vukic's avatar
      RISC-V: Optimize branches with shifted immediate operands · c8957c87
      Jovan Vukic authored
      After the valuable feedback I received, it’s clear to me that the
      oversight was in the tests showing the benefits of the patch. In the
      test file, I added functions f5 and f6, which now generate more
      efficient code with fewer instructions.
      
      Before the patch:
      
      f5:
              li      a4,2097152
              addi    a4,a4,-2048
              li      a5,1167360
              and     a0,a0,a4
              addi    a5,a5,-2048
              beq     a0,a5,.L4
      
      f6:
              li      a5,3407872
              addi    a5,a5,-2048
              and     a0,a0,a5
              li      a5,1114112
              beq     a0,a5,.L7
      
      After the patch:
      
      f5:
              srli    a5,a0,11
              andi    a5,a5,1023
              li      a4,569
              beq     a5,a4,.L5
      
      f6:
              srli    a5,a0,11
              andi    a5,a5,1663
              li      a4,544
              beq     a5,a4,.L9
      
      	PR target/115921
      
      gcc/ChangeLog:
      
      	* config/riscv/iterators.md (any_eq): New code iterator.
      	* config/riscv/riscv.h (COMMON_TRAILING_ZEROS): New macro.
      	(SMALL_AFTER_COMMON_TRAILING_SHIFT): Ditto.
      	* config/riscv/riscv.md (*branch<ANYI:mode>_shiftedarith_<optab>_shifted):
      	New pattern.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/riscv/branch-1.c: Additional tests.
      c8957c87
    • Jeff Law's avatar
      Revert "RISC-V: Add implication for M extension." · df3bda45
      Jeff Law authored
      This reverts commit 0a193466.
      df3bda45
    • Jeff Law's avatar
      Revert "RISC-V: Enable builtin __riscv_mul with Zmmul extension." · e889235c
      Jeff Law authored
      This reverts commit 2990f580.
      e889235c
    • Eric Botcazou's avatar
      Fix LTO bootstrap failure with -Werror=lto-type-mismatch · 7ac96b05
      Eric Botcazou authored
      In GNAT's implementation model, using convention C (or C_Pass_By_Copy) has
      no effect on the internal representation of types since the representation
      is identical to that of C by default.  It's even counter-productive given
      the implementation advice listed in B.3(63-71) so the interface between the
      front-end and gigi does not use it and instead uses structurally identical
      types on both sides.
      
      gcc/ada
      	PR ada/117038
      	* fe.h (struct c_array): Add 'const' to declaration of pointer.
      	(C_Source_Buffer): Use consistent formatting.
      	* par-ch3.adb (P_Component_Items): Properly set Aliased_Present on
      	access definition.
      	* sinput.ads: Remove clause for Interfaces.C.
      	(C_Array): Change type of Length to Integer and make both components
      	aliased.  Remove Convention aspect.
      	(C_Source_Buffer): Remove all aspects.
      	* sinput.adb (C_Source_Buffer): Adjust to above change.
      7ac96b05
    • Eric Botcazou's avatar
      Remove support for HP-UX 10 · 820cd526
      Eric Botcazou authored
      gcc/ada
      	* Makefile.rtl: Remove HP-UX 10 section.
      	* libgnarl/s-osinte__hpux-dce.ads: Delete.
      	* libgnarl/s-osinte__hpux-dce.adb: Likewise.
      	* libgnarl/s-taprop__hpux-dce.adb: Likewise.
      	* libgnarl/s-taspri__hpux-dce.ads: Likewise.
      	* libgnat/s-oslock__hpux-dce.ads: Likewise.
      820cd526
    • Jason Merrill's avatar
      c++: more modules and -M · dcee0b65
      Jason Merrill authored
      In r15-4119-gc877a27f04f648 I told preprocess_file to use the
      directives-only scan with modules, but it seems that I also need to set the
      cpp_option so that communication between _cpp_handle_directive and
      scan_translation_unit_directives_only works properly in
      c-c++-common/cpp/embed-6.c.
      
      gcc/c-family/ChangeLog:
      
      	* c-ppoutput.cc (preprocess_file): Set directives_only flag.
      dcee0b65
    • Jason Merrill's avatar
      libcpp: fix typo · d264b75e
      Jason Merrill authored
      libcpp/ChangeLog:
      
      	* macro.cc (_cpp_pop_context): Fix typo.
      d264b75e
    • Torbjörn SVENSSON's avatar
      testsuite: arm: use effective-target for mod* tests · 08e91d71
      Torbjörn SVENSSON authored
      This fixes a typo introduced in r15-4200-gcf08dd297ca that was reported
      at https://linaro.atlassian.net/browse/GNU-1369
      
      .
      
      gcc/testsuite/ChangeLog
      
      	* gcc.target/arm/mod_2.c: Corrected effective-target to
      	arm_cpu_cortex_a57_ok.
      	* gcc.target/arm/mod_256.c: Likewise.
      
      Signed-off-by: default avatarTorbjörn SVENSSON <torbjorn.svensson@foss.st.com>
      08e91d71
    • Jonathan Wakely's avatar
      libstdc++: Test 17_intro/names.cc with -D_FORTIFY_SOURCE=2 [PR116210] · 4f97411c
      Jonathan Wakely authored
      Add a new testcase that repeats 17_intro/names.cc but with
      _FORTIFY_SOURCE defined, to find problems in Glibc fortify wrappers like
      https://sourceware.org/bugzilla/show_bug.cgi?id=32052 (which is fixed
      now).
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/116210
      	* testsuite/17_intro/names.cc (sz): Undef for versions of Glibc
      	that use it in the fortify wrappers.
      	* testsuite/17_intro/names_fortify.cc: New test.
      4f97411c
    • Jonathan Wakely's avatar
      libstdc++: Drop format attribute from snprintf wrapper [PR116969] · 5247ee08
      Jonathan Wakely authored
      When __LONG_DOUBLE_IEEE128__ is defined we need to declare a wrapper for
      Glibc's 'snprintf' symbol, so we can call the original definition that
      works with the IBM128 format of long double. Because we were declaring
      the wrapper using __typeof__(__builtin_snprintf) it inherited the
      __attribute__((format(printf, 3, 4))) decoration, and then we got a
      warning for calling that wrapper with an __ibm128 argument for a %Lf
      conversion specifier. The warning is bogus, because the function we're
      calling really does want __ibm128 for %Lf, but there's no "printf but
      with a different long double format" archetype for the attribute.
      
      In r15-4039-g28911f626864e7 I added a diagnostic pragma to suppress the
      warning, but it would be better to just declare the wrapper without the
      attribute, and not have to suppress a warning for code that we know is
      actually correct.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/116969
      	* include/bits/locale_facets_nonio.tcc (money_put::__do_put):
      	Remove diagnostic pragmas.
      	(__glibcxx_snprintfibm128): Declare type manually, instead of
      	using __typeof__(__builtin_snprintf).
      5247ee08
    • Frank Scheiner's avatar
      libstdc++: Workaround glibc headers on ia64-linux · c0bc9a15
      Frank Scheiner authored
      We see:
      
      ```
      FAIL: 17_intro/names.cc  -std=gnu++17 (test for excess errors)
      FAIL: 17_intro/names_pstl.cc  -std=gnu++17 (test for excess errors)
      FAIL: experimental/names.cc  -std=gnu++17 (test for excess errors)
      ```
      
      ...on ia64-linux.
      
      This is due to:
      
      * /usr/include/bits/sigcontext.h:32-38:
      ```
      32 struct __ia64_fpreg
      33   {
      34     union
      35       {
      36         unsigned long bits[2];
      37       } u;
      38   } __attribute__ ((__aligned__ (16)));
      ```
      
      * /usr/include/sys/ucontext.h:39-45:
      ```
        39 struct __ia64_fpreg_mcontext
        40   {
        41     union
        42       {
        43         unsigned long __ctx(bits)[2];
        44       } __ctx(u);
        45   } __attribute__ ((__aligned__ (16)));
      ```
      
      ...from glibc 2.39 (w/ia64 support re-added). See the discussion
      starting on [1].
      
      [1]: https://gcc.gnu.org/pipermail/gcc-patches/2024-June/654487.html
      
      
      
      Signed-off-by: default avatarFrank Scheiner <frank.scheiner@web.de>
      
      libstdc++-v3/ChangeLog:
      
      	* testsuite/17_intro/names.cc [__linux__ && __ia64__]: Undefine
      	'u' as used in glibc headers.
      c0bc9a15
    • Richard Sandiford's avatar
      aarch64: Fix SVE ACLE gimple folds for C++ LTO [PR116629] · fee3adba
      Richard Sandiford authored
      The SVE ACLE code has two ways of handling overloaded functions.
      One, used by C, is to define a single dummy function for each unique
      overloaded name, with resolve_overloaded_builtin then resolving calls
      to real non-overloaded functions.  The other, used by C++, is to
      define a separate function for each individual overload.
      
      The builtins harness assigns integer function codes programmatically.
      However, LTO requires it to use the same assignment for every
      translation unit, regardless of language.  This means that C++ TUs
      need to create (unused) slots for the C overloads and that C TUs
      need to create (unused) slots for the C++ overloads.
      
      In many ways, it doesn't matter whether the LTO frontend itself
      uses the C approach or the C++ approach to defining overloaded
      functions, since the LTO frontend never has to resolve source-level
      overloading.  However, the C++ approach of defining a separate
      function for each overload means that C++ calls never need to
      be redirected to a different function.  Calls to an overload
      can appear in the LTO dump and survive until expand.  In contrast,
      calls to C's dummy overload functions are resolved by the front
      end and never survive to LTO (or expand).
      
      Some optimisations work by moving between sibling functions, such as _m
      to _x.  If the source function is an overload, the expected destination
      function is too.  The LTO frontend needs to define C++ overloads if it
      wants to do this optimisation properly for C++.
      
      The PR is about a tree checking failure caused by trying to use a
      stubbed-out C++ overload in LTO.  Dealing with that by detecting the
      stub (rather than changing which overloads are defined) would have
      turned this from an ice-on-valid to a missed optimisation.
      
      In future, it would probably make sense to redirect overloads to
      non-overloaded functions during gimple folding, in case that exposes
      more CSE opportunities.  But it'd probably be of limited benefit, since
      it should be rare for code to mix overloaded and non-overloaded uses of
      the same operation.  It also wouldn't be suitable for backports.
      
      gcc/
      	PR target/116629
      	* config/aarch64/aarch64-sve-builtins.cc
      	(function_builder::function_builder): Use direct overloads for LTO.
      
      gcc/testsuite/
      	PR target/116629
      	* gcc.target/aarch64/sve/acle/general/pr106326_2.c: New test.
      fee3adba
    • Richard Sandiford's avatar
      testsuite: Make check-function-bodies work with LTO · b94331d9
      Richard Sandiford authored
      This patch tries to make check-function-bodies automatically
      choose between reading the regular assembly file and reading the
      LTO assembly file.  There should only ever be one right answer,
      since check-function-bodies doesn't make sense on slim LTO output.
      
      Maybe this will turn out to be impossible to get right, but I'd like
      to try at least.
      
      gcc/testsuite/
      	* lib/scanasm.exp (check-function-bodies): Look in ltrans0.ltrans.s
      	if the test appears to be using LTO.
      b94331d9
    • Jonathan Wakely's avatar
      libstdc++: Ignore _GLIBCXX_USE_POSIX_SEMAPHORE if not supported [PR116992] · 9a5ac633
      Jonathan Wakely authored
      If _GLIBCXX_HAVE_POSIX_SEMAPHRE is undefined then users get an error
      when defining _GLIBCXX_USE_POSIX_SEMAPHORE. We can just ignore it
      instead (and warn them it's being ignored).
      
      This fixes a testsuite failure on hppa64-hp-hpux11.11 (and probably some
      other targets):
      
      FAIL: 30_threads/semaphore/platform_try_acquire_for.cc  -std=gnu++20 (test for excess errors)
      Excess errors:
      semaphore:49: error: '__semaphore_impl' has not been declared
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/116992
      	* include/bits/semaphore_base.h (_GLIBCXX_USE_POSIX_SEMAPHORE):
      	Undefine and issue a warning if POSIX sem_t is not supported.
      	* testsuite/30_threads/semaphore/platform_try_acquire_for.cc:
      	Prune new warning.
      9a5ac633
    • Jonathan Wakely's avatar
      libstdc++: Fix -Wnarrowing in <complex> [PR116991] · e998014d
      Jonathan Wakely authored
      When _GLIBCXX_USE_C99_COMPLEX_ARC is undefined we use the generic
      __complex_acos function template for _Float32 etc. and that gives a
      -Wnarrowing warning:
      
      complex:2043: warning: ISO C++ does not allow converting to '_Float32' from 'long double' with greater conversion rank [-Wnarrowing]
      
      Use a cast to do the conversion so that it doesn't warn.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/116991
      	* include/std/complex (__complex_acos): Cast literal to
      	destination type.
      e998014d
    • Jonathan Wakely's avatar
      libstdc++: Fix -Wsign-compare in std::latch::count_down · f5021ce9
      Jonathan Wakely authored
      Also add assertions for the precondition on the parameter's value.
      
      libstdc++-v3/ChangeLog:
      
      	* include/std/latch (latch::count_down): Add assertions for
      	preconditions. Cast parameter to avoid -Wsign-compare on some
      	targets.
      f5021ce9
    • Jonathan Wakely's avatar
      libstdc++: Enable _GLIBCXX_ASSERTIONS by default for -O0 [PR112808] · 361d230f
      Jonathan Wakely authored
      Too many users don't know about -D_GLIBCXX_ASSERTIONS and so are missing
      valuable checks for C++ standard library preconditions. This change
      enables libstdc++ assertions by default when compiling with -O0 so that
      we diagnose more bugs by default.
      
      When users enable optimization we don't add the assertions by default
      (because they have non-zero overhead) so they still need to enable them
      manually.
      
      For users who really don't want the assertions even in unoptimized
      builds, defining _GLIBCXX_NO_ASSERTIONS will prevent them from being
      enabled automatically.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/112808
      	* doc/xml/manual/using.xml (_GLIBCXX_ASSERTIONS): Document
      	implicit definition for -O0 compilation.
      	(_GLIBCXX_NO_ASSERTIONS): Document.
      	* doc/html/manual/using_macros.html: Regenerate.
      	* include/bits/c++config [!__OPTIMIZE__] (_GLIBCXX_ASSERTIONS):
      	Define for unoptimized builds.
      361d230f
    • Jonathan Wakely's avatar
      libstdc++: Simplify std::aligned_storage and fix for versioned namespace [PR61458] · 6ce1df37
      Jonathan Wakely authored
      This simplifies the implementation of std::aligned_storage. For the
      unstable ABI it also fixes the bug where its size is too large when the
      default alignment is used. We can't fix that for the stable ABI though,
      so just add a comment about the bug.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/61458
      	* doc/doxygen/user.cfg.in (GENERATE_BUGLIST): Set to NO.
      	* include/std/type_traits (__aligned_storage_msa): Remove.
      	(__aligned_storage_max_align_t): New struct.
      	(__aligned_storage_default_alignment): New function.
      	(aligned_storage): Use __aligned_storage_default_alignment for
      	default alignment. Replace union with a struct containing an
      	aligned buffer. Improve Doxygen comment.
      	(aligned_storage_t): Use __aligned_storage_default_alignment for
      	default alignment.
      6ce1df37
    • Jonathan Wakely's avatar
      libstdc++: Do not cast away const-ness in std::construct_at (LWG 3870) · 2eaae1bd
      Jonathan Wakely authored
      This change also requires implementing the proposed resolution of LWG
      3216 so that std::make_shared and std::allocate_shared still work, and
      the proposed resolution of LWG 3891 so that std::expected still works.
      
      libstdc++-v3/ChangeLog:
      
      	* include/bits/shared_ptr_base.h: Remove cv-qualifiers from
      	type managed by _Sp_counted_ptr_inplace, as per LWG 3210.
      	* include/bits/stl_construct.h: Do not cast away cv-qualifiers
      	when passing pointer to placement new.
      	* include/std/expected: Use remove_cv_t for union member, as per
      	LWG 3891.
      	* testsuite/20_util/allocator/void.cc: Do not test construction
      	via const pointer.
      2eaae1bd
    • Jonathan Wakely's avatar
      libstdc++: Make std::construct_at support arrays (LWG 3436) · 993deb3a
      Jonathan Wakely authored
      The issue was approved at the recent St. Louis meeting, requiring
      support for bounded arrays, but only without arguments to initialize the
      array elements.
      
      libstdc++-v3/ChangeLog:
      
      	* include/bits/stl_construct.h (construct_at): Support array
      	types (LWG 3436).
      	* testsuite/20_util/specialized_algorithms/construct_at/array.cc:
      	New test.
      	* testsuite/20_util/specialized_algorithms/construct_at/array_neg.cc:
      	New test.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp0x/initlist-opt1.C: Adjust for different diagnostics
      	from std::construct_at by adding -fconcepts-diagnostics-depth=2.
      993deb3a
    • Jonathan Wakely's avatar
      libstdc++: Tweak %c formatting for chrono types · ce89d2f3
      Jonathan Wakely authored
      libstdc++-v3/ChangeLog:
      
      	* include/bits/chrono_io.h (__formatter_chrono::_M_c): Add
      	[[unlikely]] attribute to condition for missing %c format in
      	locale. Use %T instead of %H:%M:%S in fallback.
      ce89d2f3
    • Jonathan Wakely's avatar
      libstdc++: Fix formatting of chrono::duration with character rep [PR116755] · b349c651
      Jonathan Wakely authored
      Implement Peter Dimov's suggestion for resolving LWG 4118, which is to
      use +d.count() so that character types are promoted to an integer type
      before formatting them. This didn't have unanimous consensus in the
      committee as Howard Hinnant proposed that we should format the rep
      consistently with std::format("{}", d.count()) instead. That ends up
      being more complicated, because it makes std::formattable a precondition
      of operator<< which was not previously the case, and it means that
      ios_base::fmtflags from the stream would be ignored because std::format
      doesn't use them.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/116755
      	* include/bits/chrono_io.h (operator<<): Use +d.count() for
      	duration inserter.
      	(__formatter_chrono::_M_format): Likewise for %Q format.
      	* testsuite/20_util/duration/io.cc: Test durations with
      	character types as reps.
      b349c651
    • Richard Biener's avatar
      Clear DR_GROUP_NEXT_ELEMENT upon group dissolving · 55dbb4b5
      Richard Biener authored
      I've tried to sanitize DR_GROUP_NEXT_ELEMENT accesses but there are too
      many so the following instead makes sure DR_GROUP_NEXT_ELEMENT is never
      non-NULL for !STMT_VINFO_GROUPED_ACCESS.
      
      	* tree-vect-data-refs.cc (vect_analyze_data_ref_access): When
      	cancelling a DR group also clear DR_GROUP_NEXT_ELEMENT.
      55dbb4b5
    • Richard Biener's avatar
      tree-optimization/117041 - fix load classification of former grouped load · 72c83f64
      Richard Biener authored
      When we first detect a grouped load but later dis-associate it we
      only set DR_GROUP_FIRST_ELEMENT to NULL, indicating it is not a
      STMT_VINFO_GROUPED_ACCESS but leave DR_GROUP_NEXT_ELEMENT set.  This
      causes a stray DR_GROUP_NEXT_ELEMENT access in get_group_load_store_type
      to go wrong, indicating a load isn't single_element_p when it actually
      is, leading to wrong classification and an ICE.
      
      	PR tree-optimization/117041
      	* tree-vect-stmts.cc (get_group_load_store_type): Only
      	check DR_GROUP_NEXT_ELEMENT for STMT_VINFO_GROUPED_ACCESS.
      
      	* gcc.dg/torture/pr117041.c: New testcase.
      72c83f64
    • Torbjörn SVENSSON's avatar
      testsuite: arm: use effective-target for vsel*, mod* and pr65647.c tests · cf08dd29
      Torbjörn SVENSSON authored
      
      Update test cases to use -mcpu=unset/-march=unset feature introduced in
      r15-3606-g7d6c6a0d15c.
      
      gcc/testsuite/ChangeLog
      
      	* gcc.target/arm/pr65647.c: Use effective-target arm_arch_v6m.
      	Removed unneeded dg-skip-if.
      	* gcc.target/arm/mod_2.c: Use effective-target arm_cpu_cortex_a57.
      	* gcc.target/arm/mod_256.c: Likewise.
      	* gcc.target/arm/vseleqdf.c: Likewise.
      	* gcc.target/arm/vseleqsf.c: Likewise.
      	* gcc.target/arm/vselgedf.c: Likewise.
      	* gcc.target/arm/vselgesf.c: Likewise.
      	* gcc.target/arm/vselgtdf.c: Likewise.
      	* gcc.target/arm/vselgtsf.c: Likewise.
      	* gcc.target/arm/vselledf.c: Likewise.
      	* gcc.target/arm/vsellesf.c: Likewise.
      	* gcc.target/arm/vselltdf.c: Likewise.
      	* gcc.target/arm/vselltsf.c: Likewise.
      	* gcc.target/arm/vselnedf.c: Likewise.
      	* gcc.target/arm/vselnesf.c: Likewise.
      	* gcc.target/arm/vselvcdf.c: Likewise.
      	* gcc.target/arm/vselvcsf.c: Likewise.
      	* gcc.target/arm/vselvsdf.c: Likewise.
      	* gcc.target/arm/vselvssf.c: Likewise.
      	* lib/target-supports.exp: Define effective-target arm_cpu_cortex_a57.
      	Update effective-target arm_v8_1_lob_ok to use -mcpu=unset.
      
      Signed-off-by: default avatarTorbjörn SVENSSON <torbjorn.svensson@foss.st.com>
      cf08dd29
    • Ken Matsui's avatar
      libcpp: Use ' instead of %< and %> [PR117039] · f7099903
      Ken Matsui authored
      
      	PR bootstrap/117039
      
      libcpp/ChangeLog:
      
      	* directives.cc (do_pragma_once): Use ' instead of %< and %>.
      
      Signed-off-by: default avatarKen Matsui <kmatsui@gcc.gnu.org>
      f7099903
    • René Rebe's avatar
      Enable LRA for ia64 · 68afc7ac
      René Rebe authored
      This was tested by bootstrapping GCC natively on ia64-t2-linux-gnu and
      running the testsuite (based on
      23611606):
      
      https://gcc.gnu.org/pipermail/gcc-testresults/2024-June/817268.html
      
      For comparison, the same with just
      23611606:
      
      https://gcc.gnu.org/pipermail/gcc-testresults/2024-June/817267.html
      
      
      
      gcc/
      	* config/ia64/ia64.cc: Enable LRA for ia64.
      	* config/ia64/ia64.md: Likewise.
      	* config/ia64/predicates.md: Likewise.
      
      Signed-off-by: default avatarRené Rebe <rene@exactcode.de>
      68afc7ac
    • René Rebe's avatar
      Remove ia64*-*-linux from the list of obsolete targets · 452b12ce
      René Rebe authored
      
      The following un-deprecates ia64*-*-linux for GCC 15. Since we plan to
      support this for some years to come.
      
      gcc/
      	* config.gcc: Only list ia64*-*-(hpux|vms|elf) in the list of
      	obsoleted targets.
      
      contrib/
      	* config-list.mk (LIST): no --enable-obsolete for ia64-linux.
      
      Signed-off-by: default avatarRené Rebe <rene@exactcode.de>
      452b12ce
    • Richard Biener's avatar
      tree-optimization/116974 - Handle single-lane SLP for OMP scan store · 9df0772d
      Richard Biener authored
      The following massages the GIMPLE matching way of handling scan
      stores to work with single-lane SLP.  I do not fully understand all
      the cases that can happen and the stmt matching at vectorizable_store
      time is less than ideal - but the following gets me all the testcases
      to pass with and without forced SLP.
      
      Long term we want to perform the matching at SLP discovery time,
      properly chaining the various SLP instances the current state ends
      up with.
      
      	PR tree-optimization/116974
      	* tree-vect-stmts.cc (check_scan_store): Pass in the SLP node
      	instead of just a flag.  Allow single-lane scan stores.
      	(vectorizable_store): Adjust.
      	* tree-vect-loop.cc (vect_analyze_loop_2): Empty scan_map
      	before re-trying.
      9df0772d
    • Richard Biener's avatar
      tree-optimization/116575 - handle SLP of permuted masked loads · dc90578f
      Richard Biener authored
      The following handles SLP discovery of permuted masked loads which
      was prohibited (because wrongly handled) for PR114375.  In particular
      with single-lane SLP at the moment all masked group loads appear
      permuted and we fail to use masked load lanes as well.  The following
      addresses parts of the issues, starting with doing correct basic
      discovery - namely discover an unpermuted mask load followed by
      a permute node.  In particular groups with gaps do not support masking
      yet (and didn't before w/o SLP IIRC).  There's still issues with
      how we represent masked load/store-lanes I think, but I first have to
      get my hands on a good testcase.
      
      	PR tree-optimization/116575
      	PR tree-optimization/114375
      	* tree-vect-slp.cc (vect_build_slp_tree_2): Do not reject
      	permuted mask loads without gaps but instead discover a
      	node for the full unpermuted load and permute that with
      	a VEC_PERM node.
      
      	* gcc.dg/vect/vect-pr114375.c: Expect vectorization now with avx2.
      dc90578f
    • Richard Biener's avatar
      tree-optimization/117000 - elide .REDUC_IOR with compare against zero · 5977b746
      Richard Biener authored
      The following adds a pattern to elide a .REDUC_IOR operation when
      the result is compared against zero with a cbranch.  I've resorted
      to using can_compare_p since that's what RTL expansion eventually
      checks - while GIMPLE allowed whole vector equality compares for long
      I'll notice vector lowering won't lower unsupported ones and RTL
      expansion doesn't seem to try using [u]cmp<vector-mode> optabs
      (and neither x86 nor aarch64 implements those).  There's cstore
      but no target implements that for vector modes either.
      
      	PR tree-optimization/117000
      	* match.pd (.REDUC_IOR !=/== 0): New pattern.
      	* gimple-match-head.cc: Include memmodel.h and optabs.h.
      	* generic-match-head.cc: Likewise.
      
      	* gcc.target/i386/pr117000.c: New testcase.
      5977b746
    • Richard Biener's avatar
      Fix memory leak in vect_cse_slp_nodes · fd883919
      Richard Biener authored
      The following avoids copying scalar stmts again for the re-lookup
      of the slot to replace the NULL guard with node.
      
      	* tree-vect-slp.cc (vect_cse_slp_nodes): Fix memory leak.
      fd883919
    • Jan Beulich's avatar
      gcc/doc: adjust __builtin_choose_expr() description · 4b152f62
      Jan Beulich authored
      Present wording has misled people to believe the ?: operator would be
      evaluating all three of the involved expressions.
      
      gcc/
      
      	* doc/extend.texi: Clarify __builtin_choose_expr()
      	(dis)similarity to the ?: operator.
      4b152f62
    • Ken Matsui's avatar
      gcc, libcpp: Add warning switch for "#pragma once in main file" [PR89808] · 821d5610
      Ken Matsui authored
      
      This patch adds a warning switch for "#pragma once in main file".  The
      warning option name is Wpragma-once-outside-header, which is the same
      as Clang provides.
      
      	PR preprocessor/89808
      
      gcc/c-family/ChangeLog:
      
      	* c.opt (Wpragma_once_outside_header): Define new option.
      	* c.opt.urls: Regenerate.
      
      gcc/ChangeLog:
      
      	* doc/invoke.texi (Warning Options): Document
      	-Wno-pragma-once-outside-header.
      
      libcpp/ChangeLog:
      
      	* include/cpplib.h (cpp_warning_reason): Define
      	CPP_W_PRAGMA_ONCE_OUTSIDE_HEADER.
      	* directives.cc (do_pragma_once): Use
      	CPP_W_PRAGMA_ONCE_OUTSIDE_HEADER.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/warn/Wno-pragma-once-outside-header.C: New test.
      	* g++.dg/warn/Wpragma-once-outside-header.C: New test.
      
      Signed-off-by: default avatarKen Matsui <kmatsui@gcc.gnu.org>
      Reviewed-by: default avatarMarek Polacek <polacek@redhat.com>
      821d5610
    • GCC Administrator's avatar
      Daily bump. · 41179a32
      GCC Administrator authored
      41179a32
    • Artemiy Volkov's avatar
      tree-optimization/116024 - simplify some cases of X +- C1 cmp C2 · 52fdf1e7
      Artemiy Volkov authored
      Whenever C1 and C2 are integer constants, X is of a wrapping type, and
      cmp is a relational operator, the expression X +- C1 cmp C2 can be
      simplified in the following cases:
      
      (a) If cmp is <= and C2 -+ C1 == +INF(1), we can transform the initial
      comparison in the following way:
         X +- C1 <= C2
         -INF <= X +- C1 <= C2 (add left hand side which holds for any X, C1)
         -INF -+ C1 <= X <= C2 -+ C1 (add -+C1 to all 3 expressions)
         -INF -+ C1 <= X <= +INF (due to (1))
         -INF -+ C1 <= X (eliminate the right hand side since it holds for any X)
      
      (b) By analogy, if cmp if >= and C2 -+ C1 == -INF(1), use the following
      sequence of transformations:
      
         X +- C1 >= C2
         +INF >= X +- C1 >= C2 (add left hand side which holds for any X, C1)
         +INF -+ C1 >= X >= C2 -+ C1 (add -+C1 to all 3 expressions)
         +INF -+ C1 >= X >= -INF (due to (1))
         +INF -+ C1 >= X (eliminate the right hand side since it holds for any X)
      
      (c) The > and < cases are negations of (a) and (b), respectively.
      
      This transformation allows to occasionally save add / sub instructions,
      for instance the expression
      
      3 + (uint32_t)f() < 2
      
      compiles to
      
      cmn     w0, #4
      cset    w0, ls
      
      instead of
      
      add     w0, w0, 3
      cmp     w0, 2
      cset    w0, ls
      
      on aarch64.
      
      Testcases that go together with this patch have been split into two
      separate files, one containing testcases for unsigned variables and the
      other for wrapping signed ones (and thus compiled with -fwrapv).
      Additionally, one aarch64 test has been adjusted since the patch has
      caused the generated code to change from
      
      cmn     w0, #2
      csinc   w0, w1, wzr, cc   (x < -2)
      
      to
      
      cmn     w0, #3
      csinc   w0, w1, wzr, cs   (x <= -3)
      
      This patch has been bootstrapped and regtested on aarch64, x86_64, and
      i386, and additionally regtested on riscv32.
      
      gcc/ChangeLog:
      
      	PR tree-optimization/116024
      	* match.pd: New transformation around integer comparison.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.dg/tree-ssa/pr116024-2.c: New test.
      	* gcc.dg/tree-ssa/pr116024-2-fwrapv.c: Ditto.
      	* gcc.target/aarch64/gtu_to_ltu_cmp_1.c: Adjust.
      52fdf1e7
Loading