From: Richard Biener <richard.guenther@gmail.com>
To: David Malcolm <dmalcolm@redhat.com>
Cc: GCC Patches <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH] dumpfile.c: use prefixes other that 'note: ' for MSG_{OPTIMIZED_LOCATIONS|MISSED_OPTIMIZATION}
Date: Fri, 28 Sep 2018 09:44:00 -0000 [thread overview]
Message-ID: <CAFiYyc3-1Gvyw2Y0rPVYVWNXOmkV2aFO7psBveLfq=c6pWeoOg@mail.gmail.com> (raw)
In-Reply-To: <1537905614-44303-1-git-send-email-dmalcolm@redhat.com>
On Tue, Sep 25, 2018 at 9:12 PM David Malcolm <dmalcolm@redhat.com> wrote:
>
> As noted at Cauldron, dumpfile.c currently emits "note: " for all kinds
> of dump message, so that (after filtering) there's no distinction between
> MSG_OPTIMIZED_LOCATIONS vs MSG_NOTE vs MSG_MISSED_OPTIMIZATION in the
> textual output.
>
> This patch changes dumpfile.c so that the "note: " varies to show
> which MSG_* was used, with the string prefix matching that used for
> filtering in -fopt-info, hence e.g.
> directive_unroll_3.f90:24:0: optimized: loop unrolled 7 times
> and:
> pr19210-1.c:24:3: missed: missed loop optimization: niters analysis ends up with assumptions.
>
> The patch adds "dg-optimized" and "dg-missed" directives for use
> in the testsuite for matching these (with -fopt-info on stderr; they
> don't help for dumpfile output).
>
> The patch also converts the various problem-reporting dump messages
> in coverage.c:get_coverage_counts to use MSG_MISSED_OPTIMIZATION
> rather than MSG_OPTIMIZED_LOCATIONS, as the docs call out "optimized"
> as
> "information when an optimization is successfully applied",
> whereas "missed" is for
> "information about missed optimizations",
> and problems with profile data seem to me to fall much more into the
> latter category than the former. Doing so requires converting a few
> tests from using "-fopt-info" (which is implicitly
> "-fopt-info-optimized-optall") to getting the "missed" optimizations.
> Changing them to "-fopt-info-missed" added lots of noise from the
> vectorizer, so I changed these tests to use "-fopt-info-missed-ipa".
>
> Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.
>
> OK for trunk?
OK.
Richard.
> gcc/ChangeLog:
> * coverage.c (get_coverage_counts): Convert problem-reporting dump
> messages from MSG_OPTIMIZED_LOCATIONS to MSG_MISSED_OPTIMIZATION.
> * dumpfile.c (kind_as_string): New function.
> (dump_loc): Rather than a hardcoded prefix of "note: ", use
> kind_as_string to vary the prefix based on dump_kind.
> (selftest::test_capture_of_dump_calls): Update for above.
>
> gcc/testsuite/ChangeLog:
> * c-c++-common/unroll-1.c: Update expected output from "note" to
> "optimized".
> * c-c++-common/unroll-2.c: Likewise.
> * c-c++-common/unroll-3.c: Likewise.
> * g++.dg/tree-ssa/dom-invalid.C: Update expected output from
> dg-message to dg-missed. Convert param from -fopt-info to
> -fopt-info-missed-ipa.
> * g++.dg/tree-ssa/pr81408.C: Update expected output from
> dg-message to dg-missed.
> * g++.dg/vect/slp-pr56812.cc: Update expected output from
> dg-message to dg-optimized.
> * gcc.dg/pr26570.c: Update expected output from dg-message to
> dg-missed. Convert param from -fopt-info to
> -fopt-info-missed-ipa.
> * gcc.dg/pr32773.c: Likewise.
> * gcc.dg/tree-ssa/pr19210-1.c: Update expected output from
> dg-message to dg-missed.
> * gcc.dg/unroll-2.c: Update expected output from dg-message to
> dg-optimized.
> * gcc.dg/vect/nodump-vect-opt-info-1.c: Likewise. Convert param
> from -fopt-info to -fopt-info-vec.
> * gfortran.dg/directive_unroll_1.f90: Update expected output from
> "note" to "optimized".
> * gfortran.dg/directive_unroll_2.f90: Likewise.
> * gfortran.dg/directive_unroll_3.f90: Likewise.
> * gnat.dg/unroll4.adb: Likewise.
> * lib/gcc-dg.exp (dg-optimized): New procedure.
> (dg-missed): New procedure.
> ---
> gcc/coverage.c | 10 +++----
> gcc/dumpfile.c | 33 ++++++++++++++++++----
> gcc/testsuite/c-c++-common/unroll-1.c | 8 +++---
> gcc/testsuite/c-c++-common/unroll-2.c | 8 +++---
> gcc/testsuite/c-c++-common/unroll-3.c | 12 ++++----
> gcc/testsuite/g++.dg/tree-ssa/dom-invalid.C | 4 +--
> gcc/testsuite/g++.dg/tree-ssa/pr81408.C | 2 +-
> gcc/testsuite/g++.dg/vect/slp-pr56812.cc | 2 +-
> gcc/testsuite/gcc.dg/pr26570.c | 4 +--
> gcc/testsuite/gcc.dg/pr32773.c | 6 ++--
> gcc/testsuite/gcc.dg/tree-ssa/pr19210-1.c | 8 +++---
> gcc/testsuite/gcc.dg/unroll-2.c | 4 +--
> gcc/testsuite/gcc.dg/vect/nodump-vect-opt-info-1.c | 6 ++--
> gcc/testsuite/gfortran.dg/directive_unroll_1.f90 | 6 ++--
> gcc/testsuite/gfortran.dg/directive_unroll_2.f90 | 6 ++--
> gcc/testsuite/gfortran.dg/directive_unroll_3.f90 | 8 +++---
> gcc/testsuite/gnat.dg/unroll4.adb | 2 +-
> gcc/testsuite/lib/gcc-dg.exp | 20 +++++++++++++
> 18 files changed, 96 insertions(+), 53 deletions(-)
>
> diff --git a/gcc/coverage.c b/gcc/coverage.c
> index 8f12778..2475495 100644
> --- a/gcc/coverage.c
> +++ b/gcc/coverage.c
> @@ -308,7 +308,7 @@ get_coverage_counts (unsigned counter, unsigned cfg_checksum,
> {
> dump_user_location_t loc
> = dump_user_location_t::from_location_t (input_location);
> - dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
> + dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc,
> (flag_guess_branch_prob
> ? "file %s not found, execution counts estimated\n"
> : "file %s not found, execution counts assumed to "
> @@ -347,7 +347,7 @@ get_coverage_counts (unsigned counter, unsigned cfg_checksum,
> {
> dump_user_location_t loc
> = dump_user_location_t::from_location_t (input_location);
> - dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
> + dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc,
> "use -Wno-error=coverage-mismatch to tolerate "
> "the mismatch but performance may drop if the "
> "function is hot\n");
> @@ -355,14 +355,14 @@ get_coverage_counts (unsigned counter, unsigned cfg_checksum,
> if (!seen_error ()
> && !warned++)
> {
> - dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
> + dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc,
> "coverage mismatch ignored\n");
> - dump_printf (MSG_OPTIMIZED_LOCATIONS,
> + dump_printf (MSG_MISSED_OPTIMIZATION,
> flag_guess_branch_prob
> ? G_("execution counts estimated\n")
> : G_("execution counts assumed to be zero\n"));
> if (!flag_guess_branch_prob)
> - dump_printf (MSG_OPTIMIZED_LOCATIONS,
> + dump_printf (MSG_MISSED_OPTIMIZATION,
> "this can result in poorly optimized code\n");
> }
> }
> diff --git a/gcc/dumpfile.c b/gcc/dumpfile.c
> index 5655e46..db260a5 100644
> --- a/gcc/dumpfile.c
> +++ b/gcc/dumpfile.c
> @@ -437,6 +437,27 @@ dump_user_location_t::from_function_decl (tree fndecl)
> DECL_SOURCE_LOCATION (fndecl));
> }
>
> +/* Extract the MSG_* component from DUMP_KIND and return a string for use
> + as a prefix to dump messages.
> + These match the strings in optinfo_verbosity_options and thus the
> + "OPTIONS" within "-fopt-info-OPTIONS". */
> +
> +static const char *
> +kind_as_string (dump_flags_t dump_kind)
> +{
> + switch (dump_kind & MSG_ALL)
> + {
> + default:
> + gcc_unreachable ();
> + case MSG_OPTIMIZED_LOCATIONS:
> + return "optimized";
> + case MSG_MISSED_OPTIMIZATION:
> + return "missed";
> + case MSG_NOTE:
> + return "note";
> + }
> +}
> +
> /* Print source location on DFILE if enabled. */
>
> static void
> @@ -445,13 +466,14 @@ dump_loc (dump_flags_t dump_kind, FILE *dfile, source_location loc)
> if (dump_kind)
> {
> if (LOCATION_LOCUS (loc) > BUILTINS_LOCATION)
> - fprintf (dfile, "%s:%d:%d: note: ", LOCATION_FILE (loc),
> + fprintf (dfile, "%s:%d:%d: ", LOCATION_FILE (loc),
> LOCATION_LINE (loc), LOCATION_COLUMN (loc));
> else if (current_function_decl)
> - fprintf (dfile, "%s:%d:%d: note: ",
> + fprintf (dfile, "%s:%d:%d: ",
> DECL_SOURCE_FILE (current_function_decl),
> DECL_SOURCE_LINE (current_function_decl),
> DECL_SOURCE_COLUMN (current_function_decl));
> + fprintf (dfile, "%s: ", kind_as_string (dump_kind));
> /* Indentation based on scope depth. */
> fprintf (dfile, "%*s", get_dump_scope_depth (), "");
> }
> @@ -465,13 +487,14 @@ dump_loc (dump_flags_t dump_kind, pretty_printer *pp, source_location loc)
> if (dump_kind)
> {
> if (LOCATION_LOCUS (loc) > BUILTINS_LOCATION)
> - pp_printf (pp, "%s:%d:%d: note: ", LOCATION_FILE (loc),
> + pp_printf (pp, "%s:%d:%d: ", LOCATION_FILE (loc),
> LOCATION_LINE (loc), LOCATION_COLUMN (loc));
> else if (current_function_decl)
> - pp_printf (pp, "%s:%d:%d: note: ",
> + pp_printf (pp, "%s:%d:%d: ",
> DECL_SOURCE_FILE (current_function_decl),
> DECL_SOURCE_LINE (current_function_decl),
> DECL_SOURCE_COLUMN (current_function_decl));
> + pp_printf (pp, "%s: ", kind_as_string (dump_kind));
> /* Indentation based on scope depth. */
> for (unsigned i = 0; i < get_dump_scope_depth (); i++)
> pp_character (pp, ' ');
> @@ -2325,7 +2348,7 @@ test_capture_of_dump_calls (const line_table_case &case_)
> }
> dump_printf_loc (MSG_NOTE, stmt, "msg 7\n");
>
> - ASSERT_DUMPED_TEXT_EQ (tmp, "test.txt:5:10: note: msg 4\n");
> + ASSERT_DUMPED_TEXT_EQ (tmp, "test.txt:5:10: optimized: msg 4\n");
> }
> }
>
> diff --git a/gcc/testsuite/c-c++-common/unroll-1.c b/gcc/testsuite/c-c++-common/unroll-1.c
> index 105a82c..fe7f4f3 100644
> --- a/gcc/testsuite/c-c++-common/unroll-1.c
> +++ b/gcc/testsuite/c-c++-common/unroll-1.c
> @@ -20,22 +20,22 @@ void test (void)
> #pragma GCC unroll 8
> for (unsigned long i = 1; i <= 15; ++i)
> bar(i);
> - /* { dg-final { scan-rtl-dump "21:.*: note: loop unrolled 7 times" "loop2_unroll" } } */
> + /* { dg-final { scan-rtl-dump "21:.*: optimized: loop unrolled 7 times" "loop2_unroll" } } */
>
> #pragma GCC unroll 8
> for (unsigned long i = 1; i <= j; ++i)
> bar(i);
> - /* { dg-final { scan-rtl-dump "26:.*: note: loop unrolled 7 times" "loop2_unroll" } } */
> + /* { dg-final { scan-rtl-dump "26:.*: optimized: loop unrolled 7 times" "loop2_unroll" } } */
>
> #pragma GCC unroll 7
> for (unsigned long i = 1; i <= j; ++i)
> bar(i);
> - /* { dg-final { scan-rtl-dump "31:.*: note: loop unrolled 3 times" "loop2_unroll" } } */
> + /* { dg-final { scan-rtl-dump "31:.*: optimized: loop unrolled 3 times" "loop2_unroll" } } */
>
> unsigned long i = 0;
> #pragma GCC unroll 3
> do {
> bar(i);
> } while (++i < 9);
> - /* { dg-final { scan-rtl-dump "3\[79\]:.*: note: loop unrolled 2 times" "loop2_unroll" } } */
> + /* { dg-final { scan-rtl-dump "3\[79\]:.*: optimized: loop unrolled 2 times" "loop2_unroll" } } */
> }
> diff --git a/gcc/testsuite/c-c++-common/unroll-2.c b/gcc/testsuite/c-c++-common/unroll-2.c
> index a67a1d7..0bb4bbb 100644
> --- a/gcc/testsuite/c-c++-common/unroll-2.c
> +++ b/gcc/testsuite/c-c++-common/unroll-2.c
> @@ -20,22 +20,22 @@ void test (void)
> #pragma GCC unroll 8
> for (unsigned long i = 1; i <= 15; ++i)
> bar(i);
> - /* { dg-final { scan-rtl-dump "21:.*: note: loop unrolled 7 times" "loop2_unroll" } } */
> + /* { dg-final { scan-rtl-dump "21:.*: optimized: loop unrolled 7 times" "loop2_unroll" } } */
>
> #pragma GCC unroll 8
> for (unsigned long i = 1; i <= j; ++i)
> bar(i);
> - /* { dg-final { scan-rtl-dump "26:.*: note: loop unrolled 7 times" "loop2_unroll" } } */
> + /* { dg-final { scan-rtl-dump "26:.*: optimized: loop unrolled 7 times" "loop2_unroll" } } */
>
> #pragma GCC unroll 7
> for (unsigned long i = 1; i <= j; ++i)
> bar(i);
> - /* { dg-final { scan-rtl-dump "31:.*: note: loop unrolled 3 times" "loop2_unroll" } } */
> + /* { dg-final { scan-rtl-dump "31:.*: optimized: loop unrolled 3 times" "loop2_unroll" } } */
>
> unsigned long i = 0;
> #pragma GCC unroll 3
> do {
> bar(i);
> } while (++i < 9);
> - /* { dg-final { scan-rtl-dump "3\[79\]:.*: note: loop unrolled 2 times" "loop2_unroll" } } */
> + /* { dg-final { scan-rtl-dump "3\[79\]:.*: optimized: loop unrolled 2 times" "loop2_unroll" } } */
> }
> diff --git a/gcc/testsuite/c-c++-common/unroll-3.c b/gcc/testsuite/c-c++-common/unroll-3.c
> index 6cefa75..541accb 100644
> --- a/gcc/testsuite/c-c++-common/unroll-3.c
> +++ b/gcc/testsuite/c-c++-common/unroll-3.c
> @@ -10,32 +10,32 @@ void test (void)
> #pragma GCC unroll 8
> for (unsigned long i = 1; i <= 8; ++i)
> bar(i);
> - /* { dg-final { scan-rtl-dump-not "11:.*: note: loop unrolled" "loop2_unroll" } } */
> + /* { dg-final { scan-rtl-dump-not "11:.*: optimized: loop unrolled" "loop2_unroll" } } */
>
> #pragma GCC unroll 8
> for (unsigned long i = 1; i <= 7; ++i)
> bar(i);
> - /* { dg-final { scan-rtl-dump-not "16:.*: note: loop unrolled" "loop2_unroll" } } */
> + /* { dg-final { scan-rtl-dump-not "16:.*: optimized: loop unrolled" "loop2_unroll" } } */
>
> #pragma GCC unroll 8
> for (unsigned long i = 1; i <= 15; ++i)
> bar(i);
> - /* { dg-final { scan-rtl-dump "21:.*: note: loop unrolled 7 times" "loop2_unroll" } } */
> + /* { dg-final { scan-rtl-dump "21:.*: optimized: loop unrolled 7 times" "loop2_unroll" } } */
>
> #pragma GCC unroll 8
> for (unsigned long i = 1; i <= j; ++i)
> bar(i);
> - /* { dg-final { scan-rtl-dump "26:.*: note: loop unrolled 7 times" "loop2_unroll" } } */
> + /* { dg-final { scan-rtl-dump "26:.*: optimized: loop unrolled 7 times" "loop2_unroll" } } */
>
> #pragma GCC unroll 7
> for (unsigned long i = 1; i <= j; ++i)
> bar(i);
> - /* { dg-final { scan-rtl-dump "31:.*: note: loop unrolled 3 times" "loop2_unroll" } } */
> + /* { dg-final { scan-rtl-dump "31:.*: optimized: loop unrolled 3 times" "loop2_unroll" } } */
>
> unsigned long i = 0;
> #pragma GCC unroll 3
> do {
> bar(i);
> } while (++i < 9);
> - /* { dg-final { scan-rtl-dump "3\[79\]:.*: note: loop unrolled 2 times" "loop2_unroll" } } */
> + /* { dg-final { scan-rtl-dump "3\[79\]:.*: optimized: loop unrolled 2 times" "loop2_unroll" } } */
> }
> diff --git a/gcc/testsuite/g++.dg/tree-ssa/dom-invalid.C b/gcc/testsuite/g++.dg/tree-ssa/dom-invalid.C
> index 41343ee..056d6ed 100644
> --- a/gcc/testsuite/g++.dg/tree-ssa/dom-invalid.C
> +++ b/gcc/testsuite/g++.dg/tree-ssa/dom-invalid.C
> @@ -1,7 +1,7 @@
> // PR tree-optimization/39557
> // invalid post-dom info leads to infinite loop
> // { dg-do run }
> -// { dg-options "-Wall -fno-exceptions -O2 -fprofile-use -fopt-info -fno-rtti" }
> +// { dg-options "-Wall -fno-exceptions -O2 -fprofile-use -fopt-info-missed-ipa -fno-rtti" }
>
> struct C
> {
> @@ -49,4 +49,4 @@ main ()
> {
> E e;
> e.bar ();
> -} // { dg-message "note: file" }
> +} // { dg-missed "file .* not found" }
> diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr81408.C b/gcc/testsuite/g++.dg/tree-ssa/pr81408.C
> index 89d6e55..39e32fd 100644
> --- a/gcc/testsuite/g++.dg/tree-ssa/pr81408.C
> +++ b/gcc/testsuite/g++.dg/tree-ssa/pr81408.C
> @@ -86,7 +86,7 @@ a::H t;
> void
> ShowHelpListCommands ()
> {
> - for (auto c : t) /* { dg-message "note: missed loop optimization: niters analysis .*" } */
> + for (auto c : t) /* { dg-missed "missed loop optimization: niters analysis .*" } */
> a::ax << c.ay << a::av;
> }
>
> diff --git a/gcc/testsuite/g++.dg/vect/slp-pr56812.cc b/gcc/testsuite/g++.dg/vect/slp-pr56812.cc
> index 08b0981..3e7a495 100644
> --- a/gcc/testsuite/g++.dg/vect/slp-pr56812.cc
> +++ b/gcc/testsuite/g++.dg/vect/slp-pr56812.cc
> @@ -14,6 +14,6 @@ public:
> void mydata::Set (float x)
> {
> /* We want to vectorize this either as loop or basic-block. */
> - for (int i=0; i<upper(); i++) /* { dg-message "note: \[^\n\]* vectorized" } */
> + for (int i=0; i<upper(); i++) /* { dg-optimized "\[^\n\]* vectorized" } */
> data[i] = x;
> }
> diff --git a/gcc/testsuite/gcc.dg/pr26570.c b/gcc/testsuite/gcc.dg/pr26570.c
> index 8ce8a44..e267055 100644
> --- a/gcc/testsuite/gcc.dg/pr26570.c
> +++ b/gcc/testsuite/gcc.dg/pr26570.c
> @@ -1,8 +1,8 @@
> /* { dg-do compile } */
> -/* { dg-options "-O2 -fprofile-generate -fprofile-use -fopt-info" } */
> +/* { dg-options "-O2 -fprofile-generate -fprofile-use -fopt-info-missed-ipa" } */
> /* { dg-require-profiling "-fprofile-generate" } */
>
> unsigned test (unsigned a, unsigned b)
> {
> return a / b;
> -} /* { dg-message "note: \[^\n\]*execution counts estimated" } */
> +} /* { dg-missed "\[^\n\]*execution counts estimated" } */
> diff --git a/gcc/testsuite/gcc.dg/pr32773.c b/gcc/testsuite/gcc.dg/pr32773.c
> index 19a9019..edfcb3a 100644
> --- a/gcc/testsuite/gcc.dg/pr32773.c
> +++ b/gcc/testsuite/gcc.dg/pr32773.c
> @@ -1,9 +1,9 @@
> /* { dg-do compile } */
> -/* { dg-options "-O -fprofile-use -fopt-info" } */
> -/* { dg-options "-O -m4 -fprofile-use -fopt-info" { target sh-*-* } } */
> +/* { dg-options "-O -fprofile-use -fopt-info-missed-ipa" } */
> +/* { dg-options "-O -m4 -fprofile-use -fopt-info-missed-ipa" { target sh-*-* } } */
>
> void foo (int *p)
> {
> if (p)
> *p = 0;
> -} /* { dg-message "note: \[^\n\]*execution counts estimated" } */
> +} /* { dg-missed "\[^\n\]*execution counts estimated" } */
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr19210-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr19210-1.c
> index 9162d15..50d86a0 100644
> --- a/gcc/testsuite/gcc.dg/tree-ssa/pr19210-1.c
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr19210-1.c
> @@ -6,10 +6,10 @@ void
> f (unsigned n)
> {
> unsigned k;
> - for(k = 0;k <= n;k++) /* { dg-message "note: missed loop optimization: niters analysis .*" } */
> + for(k = 0;k <= n;k++) /* { dg-missed "missed loop optimization: niters analysis .*" } */
> g();
>
> - for(k = 0;k <= n;k += 4) /* { dg-message "note: missed loop optimization: niters analysis .*" } */
> + for(k = 0;k <= n;k += 4) /* { dg-missed "missed loop optimization: niters analysis .*" } */
> g();
>
> /* We used to get warning for this loop. However, since then # of iterations
> @@ -21,9 +21,9 @@ f (unsigned n)
> g();
>
> /* So we need the following loop, instead. */
> - for(k = 4;k <= n;k += 5) /* { dg-message "note: missed loop optimization: niters analysis .*" } */
> + for(k = 4;k <= n;k += 5) /* { dg-missed "missed loop optimization: niters analysis .*" } */
> g();
>
> - for(k = 15;k >= n;k--) /* { dg-message "note: missed loop optimization: niters analysis .*" } */
> + for(k = 15;k >= n;k--) /* { dg-missed "missed loop optimization: niters analysis .*" } */
> g();
> }
> diff --git a/gcc/testsuite/gcc.dg/unroll-2.c b/gcc/testsuite/gcc.dg/unroll-2.c
> index 46126c3..8baceaa 100644
> --- a/gcc/testsuite/gcc.dg/unroll-2.c
> +++ b/gcc/testsuite/gcc.dg/unroll-2.c
> @@ -15,7 +15,7 @@ int foo(void)
> {
> int i;
> bar();
> - for (i = 0; i < 2; i++) /* { dg-message "note: loop with 2 iterations completely unrolled" } */
> + for (i = 0; i < 2; i++) /* { dg-optimized "loop with 2 iterations completely unrolled" } */
> {
> a[i]= b[i] + 1;
> }
> @@ -25,7 +25,7 @@ int foo(void)
> int foo2(void)
> {
> int i;
> - for (i = 0; i < 2; i++) /* { dg-message "note: loop with 2 iterations completely unrolled" } */
> + for (i = 0; i < 2; i++) /* { dg-optimized "loop with 2 iterations completely unrolled" } */
> {
> a[i]= b[i] + 1;
> }
> diff --git a/gcc/testsuite/gcc.dg/vect/nodump-vect-opt-info-1.c b/gcc/testsuite/gcc.dg/vect/nodump-vect-opt-info-1.c
> index 0b14b8e..258e378 100644
> --- a/gcc/testsuite/gcc.dg/vect/nodump-vect-opt-info-1.c
> +++ b/gcc/testsuite/gcc.dg/vect/nodump-vect-opt-info-1.c
> @@ -1,11 +1,11 @@
> /* { dg-do compile { target vect_int } } */
> -/* { dg-additional-options "-std=c99 -fopt-info -O3" } */
> +/* { dg-additional-options "-std=c99 -fopt-info-vec -O3" } */
>
> void
> vadd (int *dst, int *op1, int *op2, int count)
> {
> -/* { dg-message "loop vectorized" "" { target *-*-* } .+2 } */
> -/* { dg-message "loop versioned for vectorization because of possible aliasing" "" { target *-*-* } .+1 } */
> +/* { dg-optimized "loop vectorized" "" { target *-*-* } .+2 } */
> +/* { dg-optimized "loop versioned for vectorization because of possible aliasing" "" { target *-*-* } .+1 } */
> for (int i = 0; i < count; ++i)
> dst[i] = op1[i] + op2[i];
> }
> diff --git a/gcc/testsuite/gfortran.dg/directive_unroll_1.f90 b/gcc/testsuite/gfortran.dg/directive_unroll_1.f90
> index 85b3671..d758ad7 100644
> --- a/gcc/testsuite/gfortran.dg/directive_unroll_1.f90
> +++ b/gcc/testsuite/gfortran.dg/directive_unroll_1.f90
> @@ -24,7 +24,7 @@ subroutine test2(a, n)
> DO i=1, n, 1
> call dummy(a(i))
> ENDDO
> -! { dg-final { scan-rtl-dump "24:.: note: loop unrolled 7 times" "loop2_unroll" } }
> +! { dg-final { scan-rtl-dump "24:.: optimized: loop unrolled 7 times" "loop2_unroll" } }
> end subroutine test2
>
> subroutine test3(a, n)
> @@ -36,7 +36,7 @@ subroutine test3(a, n)
> DO i=n, 1, -1
> call dummy(a(i))
> ENDDO
> -! { dg-final { scan-rtl-dump "36:.: note: loop unrolled 7 times" "loop2_unroll" } }
> +! { dg-final { scan-rtl-dump "36:.: optimized: loop unrolled 7 times" "loop2_unroll" } }
> end subroutine test3
>
> subroutine test4(a, n)
> @@ -48,5 +48,5 @@ subroutine test4(a, n)
> DO i=1, n, 2
> call dummy(a(i))
> ENDDO
> -! { dg-final { scan-rtl-dump "48:.: note: loop unrolled 7 times" "loop2_unroll" } }
> +! { dg-final { scan-rtl-dump "48:.: optimized: loop unrolled 7 times" "loop2_unroll" } }
> end subroutine test4
> diff --git a/gcc/testsuite/gfortran.dg/directive_unroll_2.f90 b/gcc/testsuite/gfortran.dg/directive_unroll_2.f90
> index 6dff8fa..c726227 100644
> --- a/gcc/testsuite/gfortran.dg/directive_unroll_2.f90
> +++ b/gcc/testsuite/gfortran.dg/directive_unroll_2.f90
> @@ -24,7 +24,7 @@ subroutine test2(a, n)
> DO i=1, n, 1
> call dummy(a(i))
> ENDDO
> -! { dg-final { scan-rtl-dump "24:.: note: loop unrolled 7 times" "loop2_unroll" } }
> +! { dg-final { scan-rtl-dump "24:.: optimized: loop unrolled 7 times" "loop2_unroll" } }
> end subroutine test2
>
> subroutine test3(a, n)
> @@ -36,7 +36,7 @@ subroutine test3(a, n)
> DO i=n, 1, -1
> call dummy(a(i))
> ENDDO
> -! { dg-final { scan-rtl-dump "36:.: note: loop unrolled 7 times" "loop2_unroll" } }
> +! { dg-final { scan-rtl-dump "36:.: optimized: loop unrolled 7 times" "loop2_unroll" } }
> end subroutine test3
>
> subroutine test4(a, n)
> @@ -48,5 +48,5 @@ subroutine test4(a, n)
> DO i=1, n, 2
> call dummy(a(i))
> ENDDO
> -! { dg-final { scan-rtl-dump "48:.: note: loop unrolled 7 times" "loop2_unroll" } }
> +! { dg-final { scan-rtl-dump "48:.: optimized: loop unrolled 7 times" "loop2_unroll" } }
> end subroutine test4
> diff --git a/gcc/testsuite/gfortran.dg/directive_unroll_3.f90 b/gcc/testsuite/gfortran.dg/directive_unroll_3.f90
> index 4e3ec09..59a8e02 100644
> --- a/gcc/testsuite/gfortran.dg/directive_unroll_3.f90
> +++ b/gcc/testsuite/gfortran.dg/directive_unroll_3.f90
> @@ -12,7 +12,7 @@ subroutine test1(a)
> DO i=1, 8, 1
> call dummy(a(i))
> ENDDO
> -! { dg-final { scan-rtl-dump-not "12:.: note: loop unrolled" "loop2_unroll" } }
> +! { dg-final { scan-rtl-dump-not "12:.: optimized: loop unrolled" "loop2_unroll" } }
> end subroutine test1
>
> subroutine test2(a, n)
> @@ -24,7 +24,7 @@ subroutine test2(a, n)
> DO i=1, n, 1
> call dummy(a(i))
> ENDDO
> -! { dg-final { scan-rtl-dump "24:.: note: loop unrolled 7 times" "loop2_unroll" } }
> +! { dg-final { scan-rtl-dump "24:.: optimized: loop unrolled 7 times" "loop2_unroll" } }
> end subroutine test2
>
> subroutine test3(a, n)
> @@ -36,7 +36,7 @@ subroutine test3(a, n)
> DO i=n, 1, -1
> call dummy(a(i))
> ENDDO
> -! { dg-final { scan-rtl-dump "36:.: note: loop unrolled 7 times" "loop2_unroll" } }
> +! { dg-final { scan-rtl-dump "36:.: optimized: loop unrolled 7 times" "loop2_unroll" } }
> end subroutine test3
>
> subroutine test4(a, n)
> @@ -48,5 +48,5 @@ subroutine test4(a, n)
> DO i=1, n, 2
> call dummy(a(i))
> ENDDO
> -! { dg-final { scan-rtl-dump "48:.: note: loop unrolled 7 times" "loop2_unroll" } }
> +! { dg-final { scan-rtl-dump "48:.: optimized: loop unrolled 7 times" "loop2_unroll" } }
> end subroutine test4
> diff --git a/gcc/testsuite/gnat.dg/unroll4.adb b/gcc/testsuite/gnat.dg/unroll4.adb
> index d9b763a..0cea4e8 100644
> --- a/gcc/testsuite/gnat.dg/unroll4.adb
> +++ b/gcc/testsuite/gnat.dg/unroll4.adb
> @@ -23,4 +23,4 @@ package body Unroll4 is
>
> end Unroll4;
>
> --- { dg-final { scan-rtl-dump-times "note: loop unrolled 7 times" 2 "loop2_unroll" } }
> +-- { dg-final { scan-rtl-dump-times "optimized: loop unrolled 7 times" 2 "loop2_unroll" } }
> diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp
> index 24d0b00..c33a50c 100644
> --- a/gcc/testsuite/lib/gcc-dg.exp
> +++ b/gcc/testsuite/lib/gcc-dg.exp
> @@ -1194,6 +1194,26 @@ proc dg-locus { args } {
> verbose "process-message:\n${dg-messages}" 2
> }
>
> +# Handle output from -fopt-info for MSG_OPTIMIZED_LOCATIONS:
> +# a successful optimization.
> +
> +proc dg-optimized { args } {
> + # Make this variable available here and to the saved proc.
> + upvar dg-messages dg-messages
> +
> + process-message saved-dg-error "optimized: " "$args"
> +}
> +
> +# Handle output from -fopt-info for MSG_MISSED_OPTIMIZATION:
> +# a missed optimization.
> +
> +proc dg-missed { args } {
> + # Make this variable available here and to the saved proc.
> + upvar dg-messages dg-messages
> +
> + process-message saved-dg-error "missed: " "$args"
> +}
> +
> # Check the existence of a gdb in the path, and return true if there
> # is one.
> #
> --
> 1.8.5.3
>
next prev parent reply other threads:[~2018-09-28 9:11 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-25 21:55 David Malcolm
2018-09-28 9:44 ` Richard Biener [this message]
2018-09-29 23:06 ` Andreas Schwab
2018-10-01 14:20 ` David Malcolm
2018-10-01 14:29 ` Andreas Schwab
2018-10-04 11:34 ` Rainer Orth
2018-12-05 13:57 ` Rainer Orth
2020-11-06 8:38 ` Thomas Schwinge
2020-11-13 22:06 ` Jeff Law
2020-11-24 9:46 ` Thomas Schwinge
2020-11-06 8:50 ` Thomas Schwinge
2020-11-13 22:06 ` Jeff Law
2020-11-24 9:51 ` Thomas Schwinge
2020-11-06 9:26 ` Add 'dg-note' next to 'dg-optimized', 'dg-missed' (was: [PATCH] dumpfile.c: use prefixes other that 'note: ' for MSG_{OPTIMIZED_LOCATIONS|MISSED_OPTIMIZATION}) Thomas Schwinge
2020-11-24 9:53 ` Thomas Schwinge
2020-11-30 19:28 ` Jeff Law
2021-05-18 10:46 ` Add 'dg-note', 'dg-lto-note' (was: Add 'dg-note' next to 'dg-optimized', 'dg-missed') Thomas Schwinge
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='CAFiYyc3-1Gvyw2Y0rPVYVWNXOmkV2aFO7psBveLfq=c6pWeoOg@mail.gmail.com' \
--to=richard.guenther@gmail.com \
--cc=dmalcolm@redhat.com \
--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).