Skip to content
Snippets Groups Projects
  1. Nov 18, 2023
    • Frederik Harwath's avatar
      MAINTAINERS: Update my e-mail address · 9419b408
      Frederik Harwath authored
      	* MAINTAINERS: Change my address.
      9419b408
    • Juzhe-Zhong's avatar
      RISC-V: Refactor RVV iterators[NFC] · 07fe0793
      Juzhe-Zhong authored
      This patch refactors RVV iteratros for easier maintain.
      
      E.g.
      
      (define_mode_iterator V [
        RVVM8QI RVVM4QI RVVM2QI RVVM1QI RVVMF2QI RVVMF4QI (RVVMF8QI "TARGET_MIN_VLEN > 32")
      
        RVVM8HI RVVM4HI RVVM2HI RVVM1HI RVVMF2HI (RVVMF4HI "TARGET_MIN_VLEN > 32")
      
        (RVVM8HF "TARGET_VECTOR_ELEN_FP_16") (RVVM4HF "TARGET_VECTOR_ELEN_FP_16") (RVVM2HF "TARGET_VECTOR_ELEN_FP_16")
        (RVVM1HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF2HF "TARGET_VECTOR_ELEN_FP_16")
        (RVVMF4HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32")
      
        RVVM8SI RVVM4SI RVVM2SI RVVM1SI (RVVMF2SI "TARGET_MIN_VLEN > 32")
      
        (RVVM8SF "TARGET_VECTOR_ELEN_FP_32") (RVVM4SF "TARGET_VECTOR_ELEN_FP_32") (RVVM2SF "TARGET_VECTOR_ELEN_FP_32")
        (RVVM1SF "TARGET_VECTOR_ELEN_FP_32") (RVVMF2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
      
        (RVVM8DI "TARGET_VECTOR_ELEN_64") (RVVM4DI "TARGET_VECTOR_ELEN_64")
        (RVVM2DI "TARGET_VECTOR_ELEN_64") (RVVM1DI "TARGET_VECTOR_ELEN_64")
      
        (RVVM8DF "TARGET_VECTOR_ELEN_FP_64") (RVVM4DF "TARGET_VECTOR_ELEN_FP_64")
        (RVVM2DF "TARGET_VECTOR_ELEN_FP_64") (RVVM1DF "TARGET_VECTOR_ELEN_FP_64")
      ])
      
      change it into:
      
      (define_mode_iterator V [VI VF_ZVFHMIN])
      
      gcc/ChangeLog:
      
      	* config/riscv/vector-iterators.md: Refactor iterators.
      07fe0793
    • Francois-Xavier Coudert's avatar
      Testsuite: remove unused variables · f76d47e6
      Francois-Xavier Coudert authored
      Missing from earlier commit, which removed the only use of those two
      variables.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/coarray/caf.exp: Remove unused variable.
      	* gfortran.dg/dg.exp: Remove unused variable.
      f76d47e6
    • Francois-Xavier Coudert's avatar
      libsanitizer: fix build on darwin · c2553dd3
      Francois-Xavier Coudert authored
      Upstream report of the issue at
      https://github.com/llvm/llvm-project/issues/72639
      
      libsanitizer/ChangeLog:
      
      	* asan/asan_mac.cpp: Protect Apple blocks behind the
      	MISSING_BLOCKS_SUPPORT macro.
      c2553dd3
    • Lulu Cheng's avatar
      LoongArch: atomic_load and atomic_store are implemented using dbar grading. · 26ab97e0
      Lulu Cheng authored
      Because the la464 memory model design allows the same address load out of order,
      so in the following test example, the Load of 23 lines may be executed first over
      the load of 21 lines, resulting in an error.
      So when memmodel is MEMMODEL_RELAXED, the load instruction will be followed by
      "dbar 0x700" when implementing _atomic_load.
      
        1 void *
        2 gomp_ptrlock_get_slow (gomp_ptrlock_t *ptrlock)
        3 {
        4   int *intptr;
        5   uintptr_t oldval = 1;
        6
        7   __atomic_compare_exchange_n (ptrlock, &oldval, 2, false,
        8                                MEMMODEL_RELAXED, MEMMODEL_RELAXED);
        9
       10   /* futex works on ints, not pointers.
       11      But a valid work share pointer will be at least
       12      8 byte aligned, so it is safe to assume the low
       13      32-bits of the pointer won't contain values 1 or 2.  */
       14   __asm volatile ("" : "=r" (intptr) : "0" (ptrlock));
       15 #if __BYTE_ORDER == __BIG_ENDIAN
       16   if (sizeof (*ptrlock) > sizeof (int))
       17     intptr += (sizeof (*ptrlock) / sizeof (int)) - 1;
       18 #endif
       19   do
       20     do_wait (intptr, 2);
       21   while (__atomic_load_n (intptr, MEMMODEL_RELAXED) == 2);
       22   __asm volatile ("" : : : "memory");
       23   return (void *) __atomic_load_n (ptrlock, MEMMODEL_ACQUIRE);
       24 }
      
      gcc/ChangeLog:
      
      	* config/loongarch/sync.md (atomic_load<mode>): New template.
      26ab97e0
    • Lulu Cheng's avatar
      LoongArch: Implement atomic operations using LoongArch1.1 instructions. · 1b12e7a0
      Lulu Cheng authored
      1. short and char type calls for atomic_add_fetch and __atomic_fetch_add are
         implemented using amadd{_db}.{b/h}.
      2. Use amcas{_db}.{b/h/w/d} to implement __atomic_compare_exchange_n and __atomic_compare_exchange.
      3. The short and char types of the functions __atomic_exchange and __atomic_exchange_n are
         implemented using amswap{_db}.{b/h}.
      
      gcc/ChangeLog:
      
      	* config/loongarch/loongarch-def.h: Add comments.
      	* config/loongarch/loongarch-opts.h (ISA_BASE_IS_LA64V110): Define macro.
      	* config/loongarch/loongarch.cc (loongarch_memmodel_needs_rel_acq_fence):
      	Remove redundant code implementations.
      	* config/loongarch/sync.md (d): Added QI, HI support.
      	(atomic_add<mode>): New template.
      	(atomic_exchange<mode>_short): Likewise.
      	(atomic_cas_value_strong<mode>_amcas): Likewise..
      	(atomic_fetch_add<mode>_short): Likewise.
      1b12e7a0
    • Lulu Cheng's avatar
      LoongArch: Add LA664 support. · c68463ab
      Lulu Cheng authored
      Define ISA_BASE_LA64V110, which represents the base instruction set defined in LoongArch1.1.
      Support the configure setting --with-arch =la664, and support -march=la664,-mtune=la664.
      
      gcc/ChangeLog:
      
      	* config.gcc: Support LA664.
      	* config/loongarch/genopts/loongarch-strings: Likewise.
      	* config/loongarch/genopts/loongarch.opt.in: Likewise.
      	* config/loongarch/loongarch-cpu.cc (fill_native_cpu_config): Likewise.
      	* config/loongarch/loongarch-def.c: Likewise.
      	* config/loongarch/loongarch-def.h (N_ISA_BASE_TYPES): Likewise.
      	(ISA_BASE_LA64V110): Define macro.
      	(N_ARCH_TYPES): Update value.
      	(N_TUNE_TYPES): Update value.
      	(CPU_LA664): New macro.
      	* config/loongarch/loongarch-opts.cc (isa_default_abi): Likewise.
      	(isa_base_compat_p): Likewise.
      	* config/loongarch/loongarch-opts.h (TARGET_64BIT): This parameter is enabled
      	when la_target.isa.base is equal to ISA_BASE_LA64V100 or ISA_BASE_LA64V110.
      	(TARGET_uARCH_LA664): Define macro.
      	* config/loongarch/loongarch-str.h (STR_CPU_LA664): Likewise.
      	* config/loongarch/loongarch.cc (loongarch_cpu_sched_reassociation_width):
      	Add LA664 support.
      	* config/loongarch/loongarch.opt: Regenerate.
      c68463ab
    • Lulu Cheng's avatar
      LoongArch: Add code generation support for call36 function calls. · 094cca42
      Lulu Cheng authored
      
      When compiling with '-mcmodel=medium', the function call is made through
      'pcaddu18i+jirl' if binutils supports call36, otherwise the
      native implementation 'pcalau12i+jirl' is used.
      
      gcc/ChangeLog:
      
      	* config.in: Regenerate.
      	* config/loongarch/loongarch-opts.h (HAVE_AS_SUPPORT_CALL36): Define macro.
      	* config/loongarch/loongarch.cc (loongarch_legitimize_call_address):
      	If binutils supports call36, the function call is not split over expand.
      	* config/loongarch/loongarch.md: Add call36 generation code.
      	* config/loongarch/predicates.md: Likewise.
      	* configure: Regenerate.
      	* configure.ac: Check whether binutils supports call36.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/loongarch/func-call-medium-5.c: If the assembler supports call36,
      	the test is abandoned.
      	* gcc.target/loongarch/func-call-medium-6.c: Likewise.
      	* gcc.target/loongarch/func-call-medium-7.c: Likewise.
      	* gcc.target/loongarch/func-call-medium-8.c: Likewise.
      	* lib/target-supports.exp: Added a function to see if the assembler supports
      	the call36 relocation.
      	* gcc.target/loongarch/func-call-medium-call36-1.c: New test.
      	* gcc.target/loongarch/func-call-medium-call36.c: New test.
      
      Co-authored-by: default avatarXi Ruoyao <xry111@xry111.site>
      094cca42
    • David Malcolm's avatar
      analyzer: new warning: -Wanalyzer-infinite-loop [PR106147] · 841008d3
      David Malcolm authored
      
      This patch implements a new analyzer warning: -Wanalyzer-infinite-loop.
      
      It works by examining the exploded graph once the latter has been
      fully built.  It attempts to detect cycles in the exploded graph in
      which:
      - no externally visible work occurs
      - no escape is possible from the cycle once it has been entered
      - the program state is "sufficiently concrete" at each step:
        - no unknown activity could be occurring
        - the worklist was fully drained for each enode in the cycle
          i.e. every enode in the cycle is processed
      
      For example, it correctly complains about this bogus "for" loop:
      
        int sum = 0;
        for (struct node *iter = n; iter; iter->next)
          sum += n->val;
        return sum;
      
      like this:
      
      infinite-loop-linked-list.c: In function ‘for_loop_noop_next’:
      infinite-loop-linked-list.c:110:31: warning: infinite loop [CWE-835] [-Wanalyzer-infinite-loop]
        110 |   for (struct node *iter = n; iter; iter->next)
            |                               ^~~~
        ‘for_loop_noop_next’: events 1-5
          |
          |  110 |   for (struct node *iter = n; iter; iter->next)
          |      |                               ^~~~
          |      |                               |
          |      |                               (1) infinite loop here
          |      |                               (2) when ‘iter’ is non-NULL: always following ‘true’ branch...
          |      |                               (5) ...to here
          |  111 |     sum += n->val;
          |      |     ~~~~~~~~~~~~~
          |      |         |   |
          |      |         |   (3) ...to here
          |      |         (4) looping back...
          |
      
      gcc/ChangeLog:
      	PR analyzer/106147
      	* Makefile.in (ANALYZER_OBJS): Add analyzer/infinite-loop.o.
      	* doc/invoke.texi: Add -fdump-analyzer-infinite-loop and
      	-Wanalyzer-infinite-loop.  Add missing CWE link for
      	-Wanalyzer-infinite-recursion.
      	* timevar.def (TV_ANALYZER_INFINITE_LOOPS): New.
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/106147
      	* analyzer.opt (Wanalyzer-infinite-loop): New option.
      	(fdump-analyzer-infinite-loop): New option.
      	* checker-event.h (start_cfg_edge_event::get_desc): Drop "final".
      	(start_cfg_edge_event::maybe_describe_condition): Convert from
      	private to protected.
      	* checker-path.h (checker_path::get_logger): New.
      	* diagnostic-manager.cc (process_worklist_item): Update for
      	new context param of maybe_update_for_edge.
      	* engine.cc
      	(impl_region_model_context::impl_region_model_context): Add
      	out_could_have_done_work param to both ctors and use it to
      	initialize mm_out_could_have_done_work.
      	(impl_region_model_context::maybe_did_work): New vfunc
      	implementation.
      	(exploded_node::on_stmt): Add out_could_have_done_work param and
      	pass to ctxt ctor.
      	(exploded_node::on_stmt_pre): Treat setjmp and longjmp as "doing
      	work".
      	(exploded_node::on_longjmp): Likewise.
      	(exploded_edge::exploded_edge): Add "could_do_work" param and use
      	it to initialize m_could_do_work_p.
      	(exploded_edge::dump_dot_label): Add result of could_do_work_p.
      	(exploded_graph::add_function_entry): Mark edge as doing no work.
      	(exploded_graph::add_edge): Add "could_do_work" param and pass to
      	exploded_edge ctor.
      	(add_tainted_args_callback): Treat as doing no work.
      	(exploded_graph::process_worklist): Likewise when merging nodes.
      	(maybe_process_run_of_before_supernode_enodes::item): Likewise.
      	(exploded_graph::maybe_create_dynamic_call): Likewise.
      	(exploded_graph::process_node): Likewise for phi nodes.
      	Pass in a "could_have_done_work" bool when handling stmts and use
      	when creating edges.  Assume work is done at bifurcation.
      	(exploded_path::feasible_p): Update for new context param of
      	maybe_update_for_edge.
      	(feasibility_state::feasibility_state): New ctor.
      	(feasibility_state::operator=): New.
      	(feasibility_state::maybe_update_for_edge): Add ctxt param and use
      	it.  Fix missing newline when logging state.
      	(impl_run_checkers): Call exploded_graph::detect_infinite_loops.
      	* exploded-graph.h
      	(impl_region_model_context::impl_region_model_context): Add
      	out_could_have_done_work param to both ctors.
      	(impl_region_model_context::maybe_did_work): New decl.
      	(impl_region_model_context::checking_for_infinite_loop_p): New.
      	(impl_region_model_context::on_unusable_in_infinite_loop): New.
      	(impl_region_model_context::m_out_could_have_done_work): New
      	field.
      	(exploded_node::on_stmt): Add "out_could_have_done_work" param.
      	(exploded_edge::exploded_edge): Add "could_do_work" param.
      	(exploded_edge::could_do_work_p): New accessor.
      	(exploded_edge::m_could_do_work_p): New field.
      	(exploded_graph::add_edge): Add "could_do_work" param.
      	(exploded_graph::detect_infinite_loops): New decl.
      	(feasibility_state::feasibility_state): New ctor.
      	(feasibility_state::operator=): New decl.
      	(feasibility_state::maybe_update_for_edge): Add ctxt param.
      	* infinite-loop.cc: New file.
      	* program-state.cc (program_state::on_edge): Log the rejected
      	constraint when region_model::maybe_update_for_edge fails.
      	* region-model.cc (region_model::on_assignment): Treat any writes
      	other than to the stack as "doing work".
      	(region_model::on_stmt_pre): Treat all asm stmts as "doing work".
      	(region_model::on_call_post): Likewise for all calls to functions
      	with unknown side effects.
      	(region_model::handle_phi): Add svals_changing_meaning param.
      	Mark widening svalue in phi nodes as changing meaning.
      	(unusable_in_infinite_loop_constraint_p): New.
      	(region_model::add_constraint): If we're checking for an infinite
      	loop, bail out on unusable svalues, or if we don't have a definite
      	true/false for the constraint.
      	(region_model::update_for_phis): Gather all svalues changing
      	meaning in phi nodes, and purge constraints involving them.
      	(region_model::replay_call_summary): Treat all call summaries as
      	doing work.
      	(region_model::can_merge_with_p): Purge constraints involving
      	svalues that change meaning.
      	(model_merger::on_widening_reuse): New.
      	(test_iteration_1): Likewise.
      	(selftest::test_iteration_1): Remove assertion that model6 "knows"
      	that i < 157.
      	* region-model.h (region_model::handle_phi): Add
      	svals_changing_meaning param
      	(region_model_context::maybe_did_work): New pure virtual func.
      	(region_model_context::checking_for_infinite_loop_p): Likewise.
      	(region_model_context::on_unusable_in_infinite_loop): Likewise.
      	(noop_region_model_context::maybe_did_work): Implement.
      	(noop_region_model_context::checking_for_infinite_loop_p):
      	Likewise.
      	(noop_region_model_context::on_unusable_in_infinite_loop):
      	Likewise.
      	(region_model_context_decorator::maybe_did_work): Implement.
      	(region_model_context_decorator::checking_for_infinite_loop_p):
      	Likewise.
      	(region_model_context_decorator::on_unusable_in_infinite_loop):
      	Likewise.
      	(model_merger::on_widening_reuse): New decl.
      	(model_merger::m_svals_changing_meaning): New field.
      	* sm-signal.cc (register_signal_handler::impl_transition): Assume
      	the edge "does work".
      	* supergraph.cc (supernode::get_start_location): Use CFG edge's
      	goto_locus if available.
      	(supernode::get_end_location): Likewise.
      	(cfg_superedge::dump_label_to_pp): Dump edges with a "goto_locus"
      	* supergraph.h (cfg_superedge::get_goto_locus): New.
      	* svalue.cc (svalue::can_merge_p): Call on_widening_reuse for
      	widening values.
      	(involvement_visitor::visit_widening_svalue): New.
      	(svalue::involves_p): Update assertion to allow widening svalues.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/106147
      	* c-c++-common/analyzer/gzio-2.c: Add dg-warning for infinite
      	loop, marked as xfail.
      	* c-c++-common/analyzer/infinite-loop-2.c: New test.
      	* c-c++-common/analyzer/infinite-loop-4.c: New test.
      	* c-c++-common/analyzer/infinite-loop-crc32c.c: New test.
      	* c-c++-common/analyzer/infinite-loop-doom-d_main-IdentifyVersion.c:
      	New test.
      	* c-c++-common/analyzer/infinite-loop-doom-v_video.c: New test.
      	* c-c++-common/analyzer/infinite-loop-g_error.c: New test.
      	* c-c++-common/analyzer/infinite-loop-linked-list.c: New test.
      	* c-c++-common/analyzer/infinite-recursion-inlining.c: Add
      	dg-warning directives for infinite loop.
      	* c-c++-common/analyzer/inlining-4-multiline.c: Update expected
      	paths for event 5 having a location.
      	* gcc.dg/analyzer/boxed-malloc-1.c: Add dg-warning for infinite
      	loop.
      	* gcc.dg/analyzer/data-model-20.c: Likewise.  Add comment about
      	suspect code, and create...
      	* gcc.dg/analyzer/data-model-20a.c: ...this new test by cleaning
      	it up.
      	* gcc.dg/analyzer/edges-1.c: Add a placeholder statement to avoid
      	the "...to here" from the if stmt occurring at the "while", and
      	thus being treated as a bogus event.
      	* gcc.dg/analyzer/explode-2a.c: Add dg-warning for infinite loop.
      	* gcc.dg/analyzer/infinite-loop-1.c: New test.
      	* gcc.dg/analyzer/malloc-1.c: Add dg-warning for infinite loop.
      	* gcc.dg/analyzer/out-of-bounds-coreutils.c: Add TODO.
      	* gcc.dg/analyzer/paths-4.c: Add dg-warning for infinite loop.
      	* gcc.dg/analyzer/pr103892.c: Likewise.
      	* gcc.dg/analyzer/pr93546.c: Likewise.
      
      Signed-off-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
      841008d3
    • GCC Administrator's avatar
      Daily bump. · c63a0bbc
      GCC Administrator authored
      c63a0bbc
  2. Nov 17, 2023
    • Robin Dapp's avatar
      vect: Pass truth type to vect_get_vec_defs. · 231bb992
      Robin Dapp authored
      For conditional operations the mask is loop invariant and cannot be
      stored explicitly.  By default, for reductions, we deduce the vectype
      from the statement or the loop but this does not work for conditional
      operations.  Therefore this patch passes the truth type of the reduction
      input vectype for the mask operand instead.  This will override the
      other choices and make sure we have the proper mask vectype.
      
      gcc/ChangeLog:
      
      	PR middle-end/112406
      	PR middle-end/112552
      
      	* tree-vect-loop.cc (vect_transform_reduction): Pass truth
      	vectype for mask operand.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/aarch64/pr112406.c: New test.
      	* gcc.target/riscv/rvv/autovec/pr112552.c: New test.
      231bb992
    • Jonathan Wakely's avatar
      libstdc++: Regenerate config.h.in · bc274b8d
      Jonathan Wakely authored
      libstdc++-v3/ChangeLog:
      
      	* config.h.in: Regenerate.
      bc274b8d
    • Jonathan Wakely's avatar
      libstdc++: Define C++26 saturation arithmetic functions (P0543R3) · 568eb2d2
      Jonathan Wakely authored
      This was approved for C++26 last week at the WG21 meeting in Kona.
      
      libstdc++-v3/ChangeLog:
      
      	* include/Makefile.am: Add new header.
      	* include/Makefile.in: Regenerate.
      	* include/bits/version.def (saturation_arithmetic): Define.
      	* include/bits/version.h: Regenerate.
      	* include/std/numeric: Include new header.
      	* include/bits/sat_arith.h: New file.
      	* testsuite/26_numerics/saturation/add.cc: New test.
      	* testsuite/26_numerics/saturation/cast.cc: New test.
      	* testsuite/26_numerics/saturation/div.cc: New test.
      	* testsuite/26_numerics/saturation/mul.cc: New test.
      	* testsuite/26_numerics/saturation/sub.cc: New test.
      	* testsuite/26_numerics/saturation/version.cc: New test.
      568eb2d2
    • Jakub Jelinek's avatar
      c++: Implement C++ DR 2406 - [[fallthrough]] attribute and iteration statements · 52eedfa0
      Jakub Jelinek authored
      The following patch implements
      CWG 2406 - [[fallthrough]] attribute and iteration statements
      The genericization of some loops leaves nothing at all or just a label
      after a body of a loop, so if the loop is later followed by
      case or default label in a switch, the fallthrough statement isn't
      diagnosed.
      
      The following patch implements it by marking the IFN_FALLTHROUGH call
      in such a case, such that during gimplification it can be pedantically
      diagnosed even if it is followed by case or default label or some normal
      labels followed by case/default labels.
      
      While looking into this, I've discovered other problems.
      expand_FALLTHROUGH_r is removing the IFN_FALLTHROUGH calls from the IL,
      but wasn't telling that to walk_gimple_stmt/walk_gimple_seq_mod, so
      the callers would then skip the next statement after it, and it would
      return non-NULL if the removed stmt was last in the sequence.  This could
      lead to wi->callback_result being set even if it didn't appear at the very
      end of switch sequence.
      The patch makes use of wi->removed_stmt such that the callers properly
      know what happened, and use different way to handle the end of switch
      sequence case.
      
      That change discovered a bug in the gimple-walk handling of
      wi->removed_stmt.  If that flag is set, the callback is telling the callers
      that the current statement has been removed and so the innermost
      walk_gimple_seq_mod shouldn't gsi_next.  The problem is that
      wi->removed_stmt is only reset at the start of a walk_gimple_stmt, but that
      can be too late for some cases.  If we have two nested gimple sequences,
      say GIMPLE_BIND as the last stmt of some gimple seq, we remove the last
      statement inside of that GIMPLE_BIND, set wi->removed_stmt there, don't
      do gsi_next correctly because already gsi_remove moved us to the next stmt,
      there is no next stmt, so we return back to the caller, but wi->removed_stmt
      is still set and so we don't do gsi_next even in the outer sequence, despite
      the GIMPLE_BIND (etc.) not being removed.  That means we walk the
      GIMPLE_BIND with its whole sequence again.
      The patch fixes that by resetting wi->removed_stmt after we've used that
      flag in walk_gimple_seq_mod.  Nothing really uses that flag after the
      outermost walk_gimple_seq_mod, it is just a private notification that
      the stmt callback has removed a stmt.
      
      2023-11-17  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c++/107571
      gcc/
      	* gimplify.cc (expand_FALLTHROUGH_r): Use wi->removed_stmt after
      	gsi_remove, change the way of passing fallthrough stmt at the end
      	of sequence to expand_FALLTHROUGH.  Diagnose IFN_FALLTHROUGH
      	with GF_CALL_NOTHROW flag.
      	(expand_FALLTHROUGH): Change loc into array of 2 location_t elts,
      	don't test wi.callback_result, instead check whether first
      	elt is not UNKNOWN_LOCATION and in that case pedwarn with the
      	second location.
      	* gimple-walk.cc (walk_gimple_seq_mod): Clear wi->removed_stmt
      	after the flag has been used.
      	* internal-fn.def (FALLTHROUGH): Mention in comment the special
      	meaning of the TREE_NOTHROW/GF_CALL_NOTHROW flag on the calls.
      gcc/c-family/
      	* c-gimplify.cc (genericize_c_loop): For C++ mark IFN_FALLTHROUGH
      	call at the end of loop body as TREE_NOTHROW.
      gcc/testsuite/
      	* g++.dg/DRs/dr2406.C: New test.
      52eedfa0
    • Jonathan Wakely's avatar
      libstdc++: Adjust std::in_range template parameter name · 97fc8851
      Jonathan Wakely authored
      This is more consistent with the specification in the standard.
      
      libstdc++-v3/ChangeLog:
      
      	* include/std/utility (in_range): Rename _Up parameter to _Res.
      97fc8851
    • Jonathan Wakely's avatar
      libstdc++: Add more Doxygen comments and another test for std::out_ptr · 66c15287
      Jonathan Wakely authored
      Improve Doxygen comments for std::out_ptr etc. and add a test for the
      feature test macro.  Also remove a redundant preprocessor condition.
      
      Ideally the docs for std::out_ptr and std::inout_ptr would show examples
      of how to use them and what they do, but that would take some effort.
      I'll aim to do that before GCC 14 is released.
      
      libstdc++-v3/ChangeLog:
      
      	* include/bits/out_ptr.h: Add Doxygen comments. Remove a
      	redundant preprocessor condition.
      	* testsuite/20_util/smartptr.adapt/version.cc: New test.
      66c15287
    • Jonathan Wakely's avatar
      libstdc++: Fix Doxygen markup · 9c950c0a
      Jonathan Wakely authored
      libstdc++-v3/ChangeLog:
      
      	* include/bits/chrono_io.h: Fix Doxygen markup.
      9c950c0a
    • Jakub Jelinek's avatar
      match.pd: Optimize ctz/popcount/parity/ffs on extended argument [PR112566] · 6dd4c703
      Jakub Jelinek authored
      ctz(ext(X)) is the same as ctz(X) in the UB on zero case (or could be also
      in the 2 argument case on large BITINT_TYPE by preserving the argument, not
      implemented in this patch),
      popcount(zext(X)) is the same as popcount(X),
      parity(zext(X)) is the same as parity(X),
      parity(sext(X)) is the same as parity(X) provided the bit difference between
      the extended and unextended types is even,
      ffs(ext(X)) is the same as ffs(X).
      
      The following patch optimizes those in match.pd if those are beneficial
      (always in the large BITINT_TYPE case, or if the narrower type has optab
      and the wider doesn't, or the wider is larger than word and narrower is
      one of the standard argument sizes (tested just int and long long, as
      long is on most targets same bitsize as one of those two).
      
      Joseph in the PR mentioned that ctz(narrow(X)) is the same as ctz(X)
      if UB on 0, but that can be handled incrementally (and would need different
      decisions when it is profitable).
      And clz(zext(X)) is clz(X) + bit_difference, but not sure we want to change
      that in match.pd at all, perhaps during insn selection?
      
      2023-11-17  Jakub Jelinek  <jakub@redhat.com>
      
      	PR tree-optimization/112566
      	PR tree-optimization/83171
      	* match.pd (ctz(ext(X)) -> ctz(X), popcount(zext(X)) -> popcount(X),
      	parity(ext(X)) -> parity(X), ffs(ext(X)) -> ffs(X)): New
      	simplifications.
      	( __builtin_ffs (X) == 0 -> X == 0): Use FFS rather than
      	BUILT_IN_FFS BUILT_IN_FFSL BUILT_IN_FFSLL BUILT_IN_FFSIMAX.
      
      	* gcc.dg/pr112566-1.c: New test.
      	* gcc.dg/pr112566-2.c: New test.
      	* gcc.target/i386/pr78057.c (foo): Pass another long long argument
      	and use it in __builtin_ia32_*zcnt_u64 instead of the int one.
      6dd4c703
    • Jakub Jelinek's avatar
      vect: Fix check_reduction_path [PR112374] · 172a72da
      Jakub Jelinek authored
      As mentioned in the PR, the intent of the r14-5076 changes was that
      it doesn't count one of the uses on the use_stmt, but what actually
      got implemented is that it does this processing on any op_use_stmt,
      even if it is not the use_stmt statement, which means that it
      can increase count even on debug stmts (-fcompare-debug failures),
      or if there would be some other use stmt with 2+ uses it could count
      that as a single use.  Though, because it fails whenever cnt != 1
      and I believe use_stmt must be one of the uses, it would probably
      fail in the latter case anyway.
      
      The following patch fixes that by doing this extra processing only when
      op_use_stmt is use_stmt, and using the normal processing otherwise
      (so ignore debug stmts, and increase on any uses on the stmt).
      
      2023-11-17  Jakub Jelinek  <jakub@redhat.com>
      
      	PR tree-optimization/112374
      	* tree-vect-loop.cc (check_reduction_path): Perform the cond_fn_p
      	special case only if op_use_stmt == use_stmt, use as_a rather than
      	dyn_cast in that case.
      
      	* gcc.dg/pr112374-1.c: New test.
      	* gcc.dg/pr112374-2.c: New test.
      	* g++.dg/opt/pr112374.C: New test.
      172a72da
    • Richard Biener's avatar
      tree-optimization/112585 - new testcase · 04abafe9
      Richard Biener authored
      The offending commit r14-5444-g5ea2965b499f9e was reverted.  The
      following adds a testcase.
      
      	PR tree-optimization/112585
      	* gcc.dg/torture/pr112585.c: New testcase.
      04abafe9
    • Richard Biener's avatar
    • Tobias Burnus's avatar
      Fortran: Accept -std=f2023, update line-length for Fortran 2023 · b9eba3ba
      Tobias Burnus authored
      This patch accepts -std=f2023, uses it by default and bumps for the
      free-source form the line length to 10,000 and the statement length
      alias number of continuation lines to unlimited.
      
      gcc/fortran/ChangeLog:
      
      	* gfortran.texi (_gfortran_set_options): Document GFC_STD_F2023.
      	* invoke.texi (std,pedantic,Wampersand,Wtabs): Add -std=2023.
      	* lang.opt (std=f2023): Add.
      	* libgfortran.h (GFC_STD_F2023, GFC_STD_OPT_F23): Add.
      	* options.cc (set_default_std_flags): Add GFC_STD_F2023.
      	(gfc_init_options): Set max_continue_free to 1,000,000.
      	(gfc_post_options): Set flag_free_line_length if unset.
      	(gfc_handle_option): Add OPT_std_f2023, set max_continue_free = 255
      	for -std=f2003, f2008 and f2018.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/goacc/warn_truncated.f90: Add -std=f2018 option.
      	* gfortran.dg/gomp/warn_truncated.f90: Likewise.
      	* gfortran.dg/line_length_10.f90: Likewise.
      	* gfortran.dg/line_length_11.f90: Likewise.
      	* gfortran.dg/line_length_2.f90: Likewise.
      	* gfortran.dg/line_length_5.f90: Likewise.
      	* gfortran.dg/line_length_6.f90: Likewise.
      	* gfortran.dg/line_length_7.f90: Likewise.
      	* gfortran.dg/line_length_8.f90: Likewise.
      	* gfortran.dg/line_length_9.f90: Likewise.
      	* gfortran.dg/continuation_17.f90: New test.
      	* gfortran.dg/continuation_18.f90: New test.
      	* gfortran.dg/continuation_19.f: New test.
      	* gfortran.dg/line_length_12.f90: New test.
      	* gfortran.dg/line_length_13.f90: New test.
      b9eba3ba
    • Georg-Johann Lay's avatar
      PR target/53372: Don't ignore section attribute with address-space. · 68221c54
      Georg-Johann Lay authored
      gcc/
      	PR target/53372
      	* config/avr/avr.cc (avr_asm_named_section) [AVR_SECTION_PROGMEM]:
      	Only return some .progmem*.data section if the user did not
      	specify a section attribute.
      	(avr_section_type_flags) [avr_progmem_p]: Unset SECTION_NOTYPE
      	in returned section flags.
      
      gcc/testsuite/
      	PR target/53372
      	* gcc.target/avr/pr53372-1.c: New test.
      	* gcc.target/avr/pr53372-2.c: New test.
      68221c54
    • Francois-Xavier Coudert's avatar
      Testsuite: silence some noise in output · ba3f5b84
      Francois-Xavier Coudert authored
      We introduced in commit a0673ec5
      some noisy messages, which clutter output with things like:
      
        dg set al ...
        revised FFLAGS ...
      
      and are not really useful information. Let's remove them.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/coarray/caf.exp: Remove some output.
      	* gfortran.dg/dg.exp: Remove some output.
      ba3f5b84
    • Xi Ruoyao's avatar
      LoongArch: Handle vectorized copysign (x, -1) expansion efficiently · bdf20fdf
      Xi Ruoyao authored
      With LSX or LASX, copysign (x[i], -1) (or any negative constant) can be
      vectorized using [x]vbitseti.{w/d} instructions to directly set the
      signbits.
      
      Inspired by Tamar Christina's "AArch64: Handle copysign (x, -1) expansion
      efficiently" (r14-5289).
      
      gcc/ChangeLog:
      
      	* config/loongarch/lsx.md (copysign<mode>3): Allow operand[2] to
      	be an reg_or_vector_same_val_operand.  If it's a const vector
      	with same negative elements, expand the copysign with a bitset
      	instruction.  Otherwise, force it into an register.
      	* config/loongarch/lasx.md (copysign<mode>3): Likewise.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.target/loongarch/vect-copysign-negconst.C: New test.
      	* g++.target/loongarch/vect-copysign-negconst-run.C: New test.
      bdf20fdf
    • Haochen Gui's avatar
      rs6000: Fix regression cases caused 16-byte by pieces move · 10615c8a
      Haochen Gui authored
      The previous patch enables 16-byte by pieces move. Originally 16-byte
      move is implemented via pattern.  expand_block_move does an optimization
      on P8 LE to leverage V2DI reversed load/store for memory to memory move.
      Now 16-byte move is implemented via by pieces move and finally split to
      two DI load/store.  This patch creates an insn_and_split pattern to
      retake the optimization.
      
      gcc/
      	PR target/111449
      	* config/rs6000/vsx.md (*vsx_le_mem_to_mem_mov_ti): New.
      
      gcc/testsuite/
      	PR target/111449
      	* gcc.target/powerpc/pr111449-2.c: New.
      10615c8a
    • Haochen Gui's avatar
      rs6000: Enable vector mode for by pieces equality compare · cd295a80
      Haochen Gui authored
      This patch adds a new expand pattern - cbranchv16qi4 to enable vector
      mode by pieces equality compare on rs6000.  The macro MOVE_MAX_PIECES
      (COMPARE_MAX_PIECES) is set to 16 bytes when EFFICIENT_UNALIGNED_VSX
      is enabled, otherwise keeps unchanged.  The macro STORE_MAX_PIECES is
      set to the same value as MOVE_MAX_PIECES by default, so now it's
      explicitly defined and keeps unchanged.
      
      gcc/
      	PR target/111449
      	* config/rs6000/altivec.md (cbranchv16qi4): New expand pattern.
      	* config/rs6000/rs6000.cc (rs6000_generate_compare): Generate
      	insn sequence for V16QImode equality compare.
      	* config/rs6000/rs6000.h (MOVE_MAX_PIECES): Define.
      	(STORE_MAX_PIECES): Define.
      
      gcc/testsuite/
      	PR target/111449
      	* gcc.target/powerpc/pr111449-1.c: New.
      	* gcc.dg/tree-ssa/sra-17.c: Add additional options for 32-bit powerpc.
      	* gcc.dg/tree-ssa/sra-18.c: Likewise.
      cd295a80
    • Li Wei's avatar
      LoongArch: Implement C[LT]Z_DEFINED_VALUE_AT_ZERO · 5c8cb429
      Li Wei authored
      The LoongArch has defined ctz and clz on the backend, but if we want GCC
      do CTZ transformation optimization in forwprop2 pass, GCC need to know
      the value of c[lt]z at zero, which may be beneficial for some test cases
      (like spec2017 deepsjeng_r).
      
      After implementing the macro, we test dynamic instruction count on
      deepsjeng_r:
      - before 1688423249186
      - after  1660311215745 (1.66% reduction)
      
      gcc/ChangeLog:
      
      	* config/loongarch/loongarch.h (CLZ_DEFINED_VALUE_AT_ZERO):
      	Implement.
      	(CTZ_DEFINED_VALUE_AT_ZERO): Same.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.dg/pr90838.c: add clz/ctz test support on LoongArch.
      5c8cb429
    • Richard Biener's avatar
      Assert we don't create recursive DW_AT_{abstract_origin,specification} · 1bcb7fe6
      Richard Biener authored
      We have a support case that shows GCC 7 sometimes creates
      DW_TAG_label refering to itself via a DW_AT_abstract_origin
      when using LTO.  This for example triggers the sanity check
      added below during LTO bootstrap.
      
      Making this check cover more than just DW_AT_abstract_origin
      breaks bootstrap on trunk for
      
            /* GNU extension: Record what type our vtable lives in.  */
            if (TYPE_VFIELD (type))
              {
                tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
      
                gen_type_die (vtype, context_die);
                add_AT_die_ref (type_die, DW_AT_containing_type,
                                lookup_type_die (vtype));
      
      so the check is for now restricted to DW_AT_abstract_origin
      and DW_AT_specification both of which we follow within get_AT.
      
      	* dwarf2out.cc (add_AT_die_ref): Assert we do not add
      	a self-ref DW_AT_abstract_origin or DW_AT_specification.
      1bcb7fe6
    • Jiahao Xu's avatar
      LoongArch: Increase cost of vector aligned store/load. · 37183018
      Jiahao Xu authored
      Based on SPEC2017 performance evaluation results, it's better to make them equal
      to the cost of unaligned store/load so as to avoid odd alignment peeling.
      
      gcc/ChangeLog:
      
      	* config/loongarch/loongarch.cc
      	(loongarch_builtin_vectorization_cost): Adjust.
      37183018
    • Jiahao Xu's avatar
      LoongArch: Fix scan-assembler-times of lasx/lsx test case. · fa5af4fc
      Jiahao Xu authored
      These tests fail when they are first added,this patch adjusts the scan-assembler-times
      to fix them.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/loongarch/vector/lasx/lasx-vcond-1.c: Adjust assembler times.
      	* gcc.target/loongarch/vector/lasx/lasx-vcond-2.c: Ditto.
      	* gcc.target/loongarch/vector/lsx/lsx-vcond-1.c: Ditto.
      	* gcc.target/loongarch/vector/lsx/lsx-vcond-2.c: Ditto.
      fa5af4fc
    • GCC Administrator's avatar
      Daily bump. · 5cb13173
      GCC Administrator authored
      5cb13173
  3. Nov 16, 2023
    • Andrew Pinski's avatar
      Only allow (copysign x, NEG_CONST) -> (fneg (fabs x)) simplification for... · 9e9279fa
      Andrew Pinski authored
      Only allow (copysign x, NEG_CONST) -> (fneg (fabs x)) simplification for constant folding [PR112483]
      
      On targets with native copysign instructions, (copysign x, -1) is
      usually more efficient than (fneg (fabs x)).  Since r14-5284, in the
      middle end we always optimize (fneg (fabs x)) to (copysign x, -1), not
      vice versa.  If the target does not support native fcopysign,
      expand_COPYSIGN will expand it as (fneg (fabs x)) anyway.
      
      gcc/ChangeLog:
      
      	PR rtl-optimization/112483
      	* simplify-rtx.cc (simplify_binary_operation_1) <case COPYSIGN>:
      	Call simplify_unary_operation for NEG instead of
      	simplify_gen_unary.
      9e9279fa
    • Eric Botcazou's avatar
      Fix warning on new Ada testcase · 1c1ee809
      Eric Botcazou authored
      gcc/testsuite/
      	* gnat.dg/varsize4.adb (Func): Initialize Byte_Read parameter.
      1c1ee809
    • Edwin Lu's avatar
      RISC-V: Change unaligned fast/slow/avoid macros to misaligned [PR111557] · a671095c
      Edwin Lu authored
      
      Fix __riscv_unaligned_fast/slow/avoid macro name to
      __riscv_misaligned_fast/slow/avoid to be consistent with the RISC-V API Spec
      
      	PR target/111557
      
      gcc/ChangeLog:
      
      	* config/riscv/riscv-c.cc (riscv_cpu_cpp_builtins): update macro name
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/riscv/attribute-1.c: update macro name
      	* gcc.target/riscv/attribute-4.c: ditto
      	* gcc.target/riscv/attribute-5.c: ditto
      	* gcc.target/riscv/predef-align-1.c: ditto
      	* gcc.target/riscv/predef-align-2.c: ditto
      	* gcc.target/riscv/predef-align-3.c: ditto
      	* gcc.target/riscv/predef-align-4.c: ditto
      	* gcc.target/riscv/predef-align-5.c: ditto
      	* gcc.target/riscv/predef-align-6.c: ditto
      
      Signed-off-by: default avatarEdwin Lu <ewlu@rivosinc.com>
      a671095c
    • Uros Bizjak's avatar
      i386: Optimize QImode insn with high input registers · 8ebc7e0b
      Uros Bizjak authored
      Sometimes the compiler emits the following code with <insn>qi_ext<mode>_0:
      
              shrl    $8, %eax
              addb    %bh, %al
      
      Patch introduces new low part QImode insn patterns with both of
      their input arguments extracted from high register.  This invalid
      insn is split after reload to a move from the high register
      and <insn>qi_ext<mode>_0 instruction.  The combine pass is able to
      convert shift to zero/sign-extract sub-RTX, which we split to the
      optimal:
      
              movzbl  %bh, %edx
              addb    %ah, %dl
      
      	PR target/78904
      
      gcc/ChangeLog:
      
      	* config/i386/i386.md (*addqi_ext2<mode>_0):
      	New define_insn_and_split pattern.
      	(*subqi_ext2<mode>_0): Ditto.
      	(*<code>qi_ext2<mode>_0): Ditto.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/i386/pr78904-10.c: New test.
      	* gcc.target/i386/pr78904-10a.c: New test.
      	* gcc.target/i386/pr78904-10b.c: New test.
      8ebc7e0b
    • John David Anglin's avatar
      hppa: Revise REG+D address support to allow long displacements before reload · d2934eb6
      John David Anglin authored
      In analyzing PR rtl-optimization/112415, I realized that restricting
      REG+D offsets to 5-bits before reload results in very poor code and
      complexities in optimizing these instructions after reload.  The
      general problem is long displacements are not allowed for floating
      point accesses when generating PA 1.1 code.  Even with PA 2.0, there
      is a ELF linker bug that prevents using long displacements for
      floating point loads and stores.
      
      In the past, enabling long displacements before reload caused issues
      in reload.  However, there have been fixes in the handling of reloads
      for floating-point accesses.  This change allows long displacements
      before reload and corrects a couple of issues in the constraint
      handling for integer and floating-point accesses.
      
      2023-11-16  John David Anglin  <danglin@gcc.gnu.org>
      
      gcc/ChangeLog:
      
      	PR rtl-optimization/112415
      	* config/pa/pa.cc (pa_legitimate_address_p): Allow 14-bit
      	displacements before reload.  Simplify logic flow.  Revise
      	comments.
      	* config/pa/pa.h (TARGET_ELF64): New define.
      	(INT14_OK_STRICT): Update define and comment.
      	* config/pa/pa64-linux.h (TARGET_ELF64): Define.
      	* config/pa/predicates.md (base14_operand): Don't check
      	alignment of short displacements.
      	(integer_store_memory_operand): Don't return true when
      	reload_in_progress is true.  Remove INT_5_BITS check.
      	(floating_point_store_memory_operand): Don't return true when
      	reload_in_progress is true.  Use INT14_OK_STRICT to check
      	whether long displacements are always okay.
      d2934eb6
    • Eric Botcazou's avatar
      Fix internal error on function returning dynamically-sized type · 4d8b41bb
      Eric Botcazou authored
      This is a tree sharing issue for the internal return type synthesized for
      a function returning a dynamically-sized type and taking an Out or In/Out
      parameter passed by copy.
      
      gcc/ada/
      	* gcc-interface/decl.cc (gnat_to_gnu_subprog_type): Also create a
      	TYPE_DECL for the return type built for the CI/CO mechanism.
      
      gcc/testsuite/
      	* gnat.dg/varsize4.ads, gnat.dg/varsize4.adb: New test.
      	* gnat.dg/varsize4_pkg.ads: New helper.
      4d8b41bb
    • Jonathan Wakely's avatar
      libstdc++: Fix aligned formatting of stacktrace_entry and thread::id [PR112564] · 23725aa5
      Jonathan Wakely authored
      The formatter for std::thread::id should default to right-align, and the
      formatter for std::stacktrace_entry should not just ignore the
      fill-and-align and width from the format-spec!
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/112564
      	* include/std/stacktrace (formatter::format): Format according
      	to format-spec.
      	* include/std/thread (formatter::format): Use _Align_right as
      	default.
      	* testsuite/19_diagnostics/stacktrace/output.cc: Check
      	fill-and-align handling. Change compile test to run.
      	* testsuite/30_threads/thread/id/output.cc: Check fill-and-align
      	handling.
      23725aa5
    • Michal Jires's avatar
      Add myself to write after approval · 8ed7120e
      Michal Jires authored
      ChangeLog:
      
      	* MAINTAINERS: Add myself.
      8ed7120e
Loading