From: Jan Hubicka <hubicka@ucw.cz>
To: gcc-patches@gcc.gnu.org
Subject: Improve loop dumping
Date: Fri, 21 Jul 2023 09:55:39 +0200 [thread overview]
Message-ID: <ZLo5+wTc5gkQIIP/@kam.mff.cuni.cz> (raw)
Hi,
we have flow_loop_dump and print_loop. While print_loop was extended to dump
stuff from loop structure we added over years (loop info), flow_loop_dump was not.
-fdump-tree-all files contains flow_loop_dump which makes it hard to see what
metadata we have attached to loop.
This patch unifies dumping of these fields from both functions. For example for:
int a[100];
main()
{
for (int i = 0; i < 10; i++)
a[i]=i;
}
we now print:
;; Loop 0
;; header 0, latch 1
;; depth 0, outer -1
;; nodes: 0 1 2 3 4 5
;;
;; Loop 1
;; header 4, latch 3
;; depth 1, outer 0, finite_p
;; upper_bound 10
;; likely_upper_bound 10
;; estimate 10
;; iterations by profile: 10.001101 (unreliable)
finite_p, upper_bound, likely_upper_bound estimate and iterations by profile is new.
Bootstrap/regtest on x86_64 in progress. OK if it passes?
Honza
gcc/ChangeLog:
* cfgloop.cc (flow_loop_dump): Use print_loop_info.
* cfgloop.h (print_loop_info): Declare.
* tree-cfg.cc (print_loop_info): Break out from ...; add
printing of missing fields and profile
(print_loop): ... here.
diff --git a/gcc/cfgloop.cc b/gcc/cfgloop.cc
index 020e5734d95..9ca85e648a7 100644
--- a/gcc/cfgloop.cc
+++ b/gcc/cfgloop.cc
@@ -135,17 +135,12 @@ flow_loop_dump (const class loop *loop, FILE *file,
fprintf (file, "\n");
}
- fprintf (file, ";; depth %d, outer %ld\n",
+ fprintf (file, ";; depth %d, outer %ld",
loop_depth (loop), (long) (loop_outer (loop)
? loop_outer (loop)->num : -1));
+ print_loop_info (file, loop, ";; ");
- bool reliable;
- sreal iterations;
- if (loop->num && expected_loop_iterations_by_profile (loop, &iterations, &reliable))
- fprintf (file, ";; profile-based iteration count: %f %s\n",
- iterations.to_double (), reliable ? "(reliable)" : "(unreliable)");
-
- fprintf (file, ";; nodes:");
+ fprintf (file, "\n;; nodes:");
bbs = get_loop_body (loop);
for (i = 0; i < loop->num_nodes; i++)
fprintf (file, " %d", bbs[i]->index);
diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h
index 4d2fd4b6af5..269694c7962 100644
--- a/gcc/cfgloop.h
+++ b/gcc/cfgloop.h
@@ -411,6 +411,7 @@ extern unsigned expected_loop_iterations (class loop *);
extern rtx doloop_condition_get (rtx_insn *);
void mark_loop_for_removal (loop_p);
+void print_loop_info (FILE *file, const class loop *loop, const char *);
/* Induction variable analysis. */
diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc
index 7ccc2a5a5a7..a6c97a04662 100644
--- a/gcc/tree-cfg.cc
+++ b/gcc/tree-cfg.cc
@@ -8479,6 +8479,55 @@ print_loops_bb (FILE *file, basic_block bb, int indent, int verbosity)
}
}
+/* Print loop information. */
+
+void
+print_loop_info (FILE *file, const class loop *loop, const char *prefix)
+{
+ if (loop->can_be_parallel)
+ fprintf (file, ", can_be_parallel");
+ if (loop->warned_aggressive_loop_optimizations)
+ fprintf (file, ", warned_aggressive_loop_optimizations");
+ if (loop->dont_vectorize)
+ fprintf (file, ", dont_vectorize");
+ if (loop->force_vectorize)
+ fprintf (file, ", force_vectorize");
+ if (loop->in_oacc_kernels_region)
+ fprintf (file, ", in_oacc_kernels_region");
+ if (loop->finite_p)
+ fprintf (file, ", finite_p");
+ if (loop->unroll)
+ fprintf (file, "\n%sunroll %d", prefix, loop->unroll);
+ if (loop->nb_iterations)
+ {
+ fprintf (file, "\n%sniter ", prefix);
+ print_generic_expr (file, loop->nb_iterations);
+ }
+
+ if (loop->any_upper_bound)
+ {
+ fprintf (file, "\n%supper_bound ", prefix);
+ print_decu (loop->nb_iterations_upper_bound, file);
+ }
+ if (loop->any_likely_upper_bound)
+ {
+ fprintf (file, "\n%slikely_upper_bound ", prefix);
+ print_decu (loop->nb_iterations_likely_upper_bound, file);
+ }
+
+ if (loop->any_estimate)
+ {
+ fprintf (file, "\n%sestimate ", prefix);
+ print_decu (loop->nb_iterations_estimate, file);
+ }
+ bool reliable;
+ sreal iterations;
+ if (loop->num && expected_loop_iterations_by_profile (loop, &iterations, &reliable))
+ fprintf (file, "\n%siterations by profile: %f %s", prefix,
+ iterations.to_double (), reliable ? "(reliable)" : "(unreliable)");
+
+}
+
static void print_loop_and_siblings (FILE *, class loop *, int, int);
/* Pretty print LOOP on FILE, indented INDENT spaces. Following
@@ -8511,27 +8560,7 @@ print_loop (FILE *file, class loop *loop, int indent, int verbosity)
fprintf (file, ", latch = %d", loop->latch->index);
else
fprintf (file, ", multiple latches");
- fprintf (file, ", niter = ");
- print_generic_expr (file, loop->nb_iterations);
-
- if (loop->any_upper_bound)
- {
- fprintf (file, ", upper_bound = ");
- print_decu (loop->nb_iterations_upper_bound, file);
- }
- if (loop->any_likely_upper_bound)
- {
- fprintf (file, ", likely_upper_bound = ");
- print_decu (loop->nb_iterations_likely_upper_bound, file);
- }
-
- if (loop->any_estimate)
- {
- fprintf (file, ", estimate = ");
- print_decu (loop->nb_iterations_estimate, file);
- }
- if (loop->unroll)
- fprintf (file, ", unroll = %d", loop->unroll);
+ print_loop_info (file, loop, s_indent);
fprintf (file, ")\n");
/* Print loop's body. */
next reply other threads:[~2023-07-21 7:55 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-21 7:55 Jan Hubicka [this message]
2023-07-21 8:35 ` Richard Biener
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=ZLo5+wTc5gkQIIP/@kam.mff.cuni.cz \
--to=hubicka@ucw.cz \
--cc=gcc-patches@gcc.gnu.org \
/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).