public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Biener <richard.guenther@gmail.com>
To: "Kewen.Lin" <linkw@linux.ibm.com>
Cc: GCC Patches <gcc-patches@gcc.gnu.org>,
	Jakub Jelinek <jakub@redhat.com>,
	 Jonathan Wakely <jwakely.gcc@gmail.com>,
	Segher Boessenkool <segher@kernel.crashing.org>,
	 Richard Sandiford <richard.sandiford@arm.com>,
	Trevor Saunders <tbsaunde@tbsaunde.org>,
	 Martin Sebor <msebor@gmail.com>,
	Bill Schmidt <wschmidt@linux.ibm.com>
Subject: Re: [PATCH v2] Use range-based for loops for traversing loops
Date: Thu, 22 Jul 2021 14:56:05 +0200	[thread overview]
Message-ID: <CAFiYyc2fqJZxM0OL9oDmOyAoBFexWpSrfN+PNW3Sd68fVyCt=Q@mail.gmail.com> (raw)
In-Reply-To: <d5299ed8-c943-9382-f36a-2dd220de8e73@linux.ibm.com>

On Tue, Jul 20, 2021 at 4:37
PM Kewen.Lin <linkw@linux.ibm.com> wrote:
>
> Hi,
>
> This v2 has addressed some review comments/suggestions:
>
>   - Use "!=" instead of "<" in function operator!= (const Iter &rhs)
>   - Add new CTOR loops_list (struct loops *loops, unsigned flags)
>     to support loop hierarchy tree rather than just a function,
>     and adjust to use loops* accordingly.

I actually meant struct loop *, not struct loops * ;)  At the point
we pondered to make loop invariant motion work on single
loop nests we gave up not only but also because it iterates
over the loop nest but all the iterators only ever can process
all loops, not say, all loops inside a specific 'loop' (and
including that 'loop' if LI_INCLUDE_ROOT).  So the
CTOR would take the 'root' of the loop tree as argument.

I see that doesn't trivially fit how loops_list works, at least
not for LI_ONLY_INNERMOST.  But I guess FROM_INNERMOST
could be adjusted to do ONLY_INNERMOST as well?

>   - Make implicit 'cfun' become explicit.
>   - Get rid of macros ALL_LOOPS*, use loops_list instance.
>   - Add const_iterator type begin()/end().
>   - Use class loop* instead of loop_p in range-based for.
>
> Bootstrapped and regtested again on powerpc64le-linux-gnu P9,
> x86_64-redhat-linux and aarch64-linux-gnu, also
> bootstrapped again on ppc64le P9 with bootstrap-O3 config.
>
> Does it look better?  Is it ok for trunk?
>
> BR,
> Kewen
> -----
> gcc/ChangeLog:
>
>         * cfgloop.h (as_const): New function.
>         (class loop_iterator): Rename to ...
>         (class loops_list): ... this.
>         (loop_iterator::next): Rename to ...
>         (loops_list::Iter::fill_curr_loop): ... this and adjust.
>         (loop_iterator::loop_iterator): Rename to ...
>         (loops_list::loops_list): ... this and adjust.
>         (loops_list::Iter): New class.
>         (loops_list::iterator): New type.
>         (loops_list::const_iterator): New type.
>         (loops_list::begin): New function.
>         (loops_list::end): Likewise.
>         (loops_list::begin const): Likewise.
>         (loops_list::end const): Likewise.
>         (FOR_EACH_LOOP): Remove.
>         (FOR_EACH_LOOP_FN): Remove.
>         * cfgloop.c (flow_loops_dump): Adjust FOR_EACH_LOOP* with range-based
>         for loop with loops_list instance.
>         (sort_sibling_loops): Likewise.
>         (disambiguate_loops_with_multiple_latches): Likewise.
>         (verify_loop_structure): Likewise.
>         * cfgloopmanip.c (create_preheaders): Likewise.
>         (force_single_succ_latches): Likewise.
>         * config/aarch64/falkor-tag-collision-avoidance.c
>         (execute_tag_collision_avoidance): Likewise.
>         * config/mn10300/mn10300.c (mn10300_scan_for_setlb_lcc): Likewise.
>         * config/s390/s390.c (s390_adjust_loops): Likewise.
>         * doc/loop.texi: Likewise.
>         * gimple-loop-interchange.cc (pass_linterchange::execute): Likewise.
>         * gimple-loop-jam.c (tree_loop_unroll_and_jam): Likewise.
>         * gimple-loop-versioning.cc (loop_versioning::analyze_blocks): Likewise.
>         (loop_versioning::make_versioning_decisions): Likewise.
>         * gimple-ssa-split-paths.c (split_paths): Likewise.
>         * graphite-isl-ast-to-gimple.c (graphite_regenerate_ast_isl): Likewise.
>         * graphite.c (canonicalize_loop_form): Likewise.
>         (graphite_transform_loops): Likewise.
>         * ipa-fnsummary.c (analyze_function_body): Likewise.
>         * ipa-pure-const.c (analyze_function): Likewise.
>         * loop-doloop.c (doloop_optimize_loops): Likewise.
>         * loop-init.c (loop_optimizer_finalize): Likewise.
>         (fix_loop_structure): Likewise.
>         * loop-invariant.c (calculate_loop_reg_pressure): Likewise.
>         (move_loop_invariants): Likewise.
>         * loop-unroll.c (decide_unrolling): Likewise.
>         (unroll_loops): Likewise.
>         * modulo-sched.c (sms_schedule): Likewise.
>         * predict.c (predict_loops): Likewise.
>         (pass_profile::execute): Likewise.
>         * profile.c (branch_prob): Likewise.
>         * sel-sched-ir.c (sel_finish_pipelining): Likewise.
>         (sel_find_rgns): Likewise.
>         * tree-cfg.c (replace_loop_annotate): Likewise.
>         (replace_uses_by): Likewise.
>         (move_sese_region_to_fn): Likewise.
>         * tree-if-conv.c (pass_if_conversion::execute): Likewise.
>         * tree-loop-distribution.c (loop_distribution::execute): Likewise.
>         * tree-parloops.c (parallelize_loops): Likewise.
>         * tree-predcom.c (tree_predictive_commoning): Likewise.
>         * tree-scalar-evolution.c (scev_initialize): Likewise.
>         (scev_reset): Likewise.
>         * tree-ssa-dce.c (find_obviously_necessary_stmts): Likewise.
>         * tree-ssa-live.c (remove_unused_locals): Likewise.
>         * tree-ssa-loop-ch.c (ch_base::copy_headers): Likewise.
>         * tree-ssa-loop-im.c (analyze_memory_references): Likewise.
>         (tree_ssa_lim_initialize): Likewise.
>         * tree-ssa-loop-ivcanon.c (canonicalize_induction_variables): Likewise.
>         * tree-ssa-loop-ivopts.c (tree_ssa_iv_optimize): Likewise.
>         * tree-ssa-loop-manip.c (get_loops_exits): Likewise.
>         * tree-ssa-loop-niter.c (estimate_numbers_of_iterations): Likewise.
>         (free_numbers_of_iterations_estimates): Likewise.
>         * tree-ssa-loop-prefetch.c (tree_ssa_prefetch_arrays): Likewise.
>         * tree-ssa-loop-split.c (tree_ssa_split_loops): Likewise.
>         * tree-ssa-loop-unswitch.c (tree_ssa_unswitch_loops): Likewise.
>         * tree-ssa-loop.c (gate_oacc_kernels): Likewise.
>         (pass_scev_cprop::execute): Likewise.
>         * tree-ssa-propagate.c (clean_up_loop_closed_phi): Likewise.
>         * tree-ssa-sccvn.c (do_rpo_vn): Likewise.
>         * tree-ssa-threadupdate.c
>         (jump_thread_path_registry::thread_through_all_blocks): Likewise.
>         * tree-vectorizer.c (vectorize_loops): Likewise.
>         * tree-vrp.c (vrp_asserts::find_assert_locations): Likewise.

  reply	other threads:[~2021-07-22 12:56 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-19  6:20 [RFC/PATCH] " Kewen.Lin
2021-07-19  6:26 ` Andrew Pinski
2021-07-20  8:56   ` Kewen.Lin
2021-07-19 14:08 ` Jonathan Wakely
2021-07-20  8:56   ` Kewen.Lin
2021-07-19 14:34 ` Richard Biener
2021-07-20  8:57   ` Kewen.Lin
2021-07-19 15:59 ` Martin Sebor
2021-07-20  8:58   ` Kewen.Lin
2021-07-20  9:49     ` Jonathan Wakely
2021-07-20  9:50       ` Jonathan Wakely
2021-07-20 14:42       ` Kewen.Lin
2021-07-20 14:36 ` [PATCH v2] " Kewen.Lin
2021-07-22 12:56   ` Richard Biener [this message]
2021-07-22 12:56     ` Richard Biener
2021-07-23  8:41     ` [PATCH] Make loops_list support an optional loop_p root Kewen.Lin
2021-07-23 16:26       ` Martin Sebor
2021-07-27  2:25         ` Kewen.Lin
2021-07-29  8:01       ` Richard Biener
2021-07-30  5:20         ` [PATCH v2] " Kewen.Lin
2021-08-03 12:08           ` Richard Biener
2021-08-04  2:36             ` [PATCH v3] " Kewen.Lin
2021-08-04 10:01               ` Richard Biener
2021-08-04 10:47                 ` Kewen.Lin
2021-08-04 12:04                   ` Richard Biener
2021-08-05  8:50                     ` Kewen.Lin
2021-07-23  8:35   ` [PATCH v3] Use range-based for loops for traversing loops Kewen.Lin
2021-07-23 16:10     ` Martin Sebor
2021-07-27  2:10       ` [PATCH v4] " Kewen.Lin
2021-07-29  7:48         ` Richard Biener
2021-07-30  7:18         ` Thomas Schwinge
2021-07-30  7:58           ` Kewen.Lin
2021-11-24 14:24             ` Reduce scope of a few 'class loop *loop' variables (was: [PATCH v4] Use range-based for loops for traversing loops) Thomas Schwinge
2021-11-24 16:58               ` Martin Jambor
2021-11-24 19:44               ` Jeff Law

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAFiYyc2fqJZxM0OL9oDmOyAoBFexWpSrfN+PNW3Sd68fVyCt=Q@mail.gmail.com' \
    --to=richard.guenther@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jakub@redhat.com \
    --cc=jwakely.gcc@gmail.com \
    --cc=linkw@linux.ibm.com \
    --cc=msebor@gmail.com \
    --cc=richard.sandiford@arm.com \
    --cc=segher@kernel.crashing.org \
    --cc=tbsaunde@tbsaunde.org \
    --cc=wschmidt@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).