dumpfile.c: use prefixes other than 'note: ' for MSG_{OPTIMIZED_LOCATIONS|MISSED_OPTI...
authorDavid Malcolm <dmalcolm@redhat.com>
Fri, 28 Sep 2018 17:40:04 +0000 (17:40 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Fri, 28 Sep 2018 17:40:04 +0000 (17:40 +0000)
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".

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.

From-SVN: r264697

20 files changed:
gcc/ChangeLog
gcc/coverage.c
gcc/dumpfile.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/unroll-1.c
gcc/testsuite/c-c++-common/unroll-2.c
gcc/testsuite/c-c++-common/unroll-3.c
gcc/testsuite/g++.dg/tree-ssa/dom-invalid.C
gcc/testsuite/g++.dg/tree-ssa/pr81408.C
gcc/testsuite/g++.dg/vect/slp-pr56812.cc
gcc/testsuite/gcc.dg/pr26570.c
gcc/testsuite/gcc.dg/pr32773.c
gcc/testsuite/gcc.dg/tree-ssa/pr19210-1.c
gcc/testsuite/gcc.dg/unroll-2.c
gcc/testsuite/gcc.dg/vect/nodump-vect-opt-info-1.c
gcc/testsuite/gfortran.dg/directive_unroll_1.f90
gcc/testsuite/gfortran.dg/directive_unroll_2.f90
gcc/testsuite/gfortran.dg/directive_unroll_3.f90
gcc/testsuite/gnat.dg/unroll4.adb
gcc/testsuite/lib/gcc-dg.exp

index 6a68c189fb747b90877ef8a8131c217d879ed52e..856a72eae10c380e81541fe549d0276ab74c5490 100644 (file)
@@ -1,3 +1,12 @@
+2018-09-28  David Malcolm  <dmalcolm@redhat.com>
+
+       * 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.
+
 2018-09-28  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.h (SSE_REGNO): Fix check for FIRST_REX_SSE_REG.
index 6b45ce9085b566af09913417905e3b0919aaf937..701460cf929fabe47283b817f0e02de535af02e1 100644 (file)
@@ -313,7 +313,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,
                               "file %s not found, %s\n", da_file_name,
                               (flag_guess_branch_prob
                                ? "execution counts estimated"
@@ -359,7 +359,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");
@@ -367,14 +367,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");
            }
        }
index b4faeaa45ff301aaee7bb18ceb7973945ae0c19b..d430ea3ff9c28647fdcb244e6f0ef3cc3a4b1a9e 100644 (file)
@@ -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");
   }
 }
 
index ff242d833ff2547ccc92b3e21a9c0f0f53f831db..2a81011d61a862ac561dff76e7570f608bc83dfc 100644 (file)
@@ -1,3 +1,34 @@
+2018-09-28  David Malcolm  <dmalcolm@redhat.com>
+
+       * 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.
+
 2018-09-28  Joseph Myers  <joseph@codesourcery.com>
 
        PR c/87390
index 105a82c62003510e1c67e010054764c6eb83477c..fe7f4f31912cb3aea94f4b41d3cfc05158ee0d71 100644 (file)
@@ -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" } } */
 }
index a67a1d75bc8f678ecddf40e6abc6adbb86ffaf26..0bb4bbb1aed840c1528b7a3cbf862dac3f78ead2 100644 (file)
@@ -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" } } */
 }
index 6cefa7583baaf337dc2c017f934c563daec49e2b..541accb7e9317fdb6e4e53124692791ed1b622f4 100644 (file)
@@ -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" } } */
 }
index 3c01383f809b215492e3b341a43b2a3826ba2b0f..9aed74a4eb65f6bb3ad1df5a402f0cb32bd494a1 100644 (file)
@@ -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 -Wno-missing-profile" }
+// { dg-options "-Wall -fno-exceptions -O2 -fprofile-use -fopt-info-missed-ipa -fno-rtti -Wno-missing-profile" }
 
 struct C
 {
@@ -49,4 +49,4 @@ main ()
 {
  E e;
  e.bar ();
-} // { dg-message  "note: file" }
+} // { dg-missed "file .* not found" }
index 89d6e550206d641b22c24573b5542196ca6d382a..39e32fd4bc982d8e6ea338d8d1acbdfb266225cb 100644 (file)
@@ -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;
 }
 
index 08b09817799d9f0d0cfe53e484ec96de31393edc..3e7a495aadd41bc6f6c436b9098553ff7acd1d94 100644 (file)
@@ -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;
 }
index 007076f9659cc118b8eff4da2cb3d98c9bea8e55..87b644a1d8fd3be2b88a4cfb7caf1a839c713656 100644 (file)
@@ -1,8 +1,8 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fprofile-generate -fprofile-use -fopt-info -Wno-missing-profile" } */
+/* { dg-options "-O2 -fprofile-generate -fprofile-use -fopt-info-missed-ipa -Wno-missing-profile" } */
 /* { 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" } */
index fe046d9fe47ea5f7967e67b5755fb06a0c8eee79..55b6b1c4962058dc7cb226b596f0a9e5ee6b4d73 100644 (file)
@@ -1,9 +1,9 @@
 /* { dg-do compile } */
-/* { dg-options "-O -fprofile-use -fopt-info -Wno-missing-profile" } */
-/* { dg-options "-O -m4 -fprofile-use -fopt-info -Wno-missing-profile" { target sh-*-* } } */
+/* { dg-options "-O -fprofile-use -fopt-info-missed-ipa -Wno-missing-profile" } */
+/* { dg-options "-O -m4 -fprofile-use -fopt-info-missed-ipa -Wno-missing-profile" { target sh-*-* } } */
 
 void foo (int *p)
 {
   if (p)
     *p = 0;
-} /* { dg-message "note: \[^\n\]*execution counts estimated" } */
+} /* { dg-missed "\[^\n\]*execution counts estimated" } */
index 9162d1569e6e290e6de427fdf797b7cc9d7f544d..50d86a004854b9059119a7dd0dfa7ba3c46c45f0 100644 (file)
@@ -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();
 }
index 46126c303562e9640ce44ec0d8262e4bcf5be922..8baceaac1699dac131ae45b044fad9e7f61ed136 100644 (file)
@@ -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;
   }
index 0b14b8eac13608e56fc2757a598a0c37e673cb4a..258e37850380d8eb9b1c6e3be0fd32663e6097fd 100644 (file)
@@ -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];
 }
index 85b3671c90937f76d117deea5bbec9bc8b6e6aec..d758ad74395b89e0a9a3e9a12d992998d8ac88e8 100644 (file)
@@ -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
index 6dff8faf3e0ee2e504edaa7c0324f0951be79230..c72622709ae3366b4187d0eda4fad573b9aadee3 100644 (file)
@@ -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
index 4e3ec09547a876fe9fd76a34b9c90b8bebfc536a..59a8e02c9ebb83eba114289058abe0f9233c8e60 100644 (file)
@@ -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
index d9b763ae4015823a1a1387f063992106b18891f6..0cea4e89e63d4ea06586218017d2b19f6964f049 100644 (file)
@@ -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" } }
index 24d0b00d25d21c070d6c8aee0fecac5edafcb720..c33a50c0b13302277cc0363d8f10082e3af83b73 100644 (file)
@@ -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.
 #