re PR middle-end/81408 (Lots of new -Wunsafe-loop-optimizations warnings with 7 compa...
authorBin Cheng <bin.cheng@arm.com>
Tue, 18 Jul 2017 11:40:38 +0000 (11:40 +0000)
committerBin Cheng <amker@gcc.gnu.org>
Tue, 18 Jul 2017 11:40:38 +0000 (11:40 +0000)
PR target/81408
* tree-ssa-loop-niter.c (number_of_iterations_exit): Dump missed
optimization for loop niter analysis.

gcc/testsuite
* g++.dg/tree-ssa/pr81408.C: New.
* gcc.dg/tree-ssa/pr19210-1.c: Check dump message rather than warning.

From-SVN: r250304

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/tree-ssa/pr81408.C [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/pr19210-1.c
gcc/tree-ssa-loop-niter.c

index e2212364af4e3b94485a46f793011a62d316d356..3ff4036f2dca854c80873a781e12f92203c300c7 100644 (file)
@@ -1,3 +1,9 @@
+2017-07-18  Bin Cheng  <bin.cheng@arm.com>
+
+       PR target/81408
+       * tree-ssa-loop-niter.c (number_of_iterations_exit): Dump missed
+       optimization for loop niter analysis.
+
 2017-07-18  Georg-Johann Lay  <avr@gjlay.de>
 
        PR target/81473
index e80871890076a34e00502f44d4bdf5c228d385dd..91aa26c0cbce94352946c0f583f1a6557dbb0a4b 100644 (file)
@@ -1,3 +1,9 @@
+2017-07-18  Bin Cheng  <bin.cheng@arm.com>
+
+       PR target/81408
+       * g++.dg/tree-ssa/pr81408.C: New.
+       * gcc.dg/tree-ssa/pr19210-1.c: Check dump message rather than warning.
+
 2017-07-18  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/80620
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr81408.C b/gcc/testsuite/g++.dg/tree-ssa/pr81408.C
new file mode 100644 (file)
index 0000000..f94544b
--- /dev/null
@@ -0,0 +1,92 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -std=gnu++11 -fopt-info-loop-missed -Wunsafe-loop-optimizations" } */
+
+namespace a {
+void b () __attribute__ ((__noreturn__));
+template <typename> struct d;
+template <typename e> struct d<e *>
+{
+  typedef e f;
+};
+struct g
+{
+  template <typename h> using i = h *;
+};
+}
+using a::d;
+template <typename j, typename> class k
+{
+  j l;
+
+public:
+  typename d<j>::f operator* () {}
+  void operator++ () { ++l; }
+  j
+  aa ()
+  {
+    return l;
+  }
+};
+template <typename m, typename n, typename ab>
+bool
+operator!= (k<m, ab> o, k<n, ab> p2)
+{
+  return o.aa () != p2.aa ();
+}
+struct p;
+namespace a {
+struct F
+{
+  struct q
+  {
+    using ai = g::i<p>;
+  };
+  using r = q::ai;
+};
+class H
+{
+public:
+  k<F::r, int> begin ();
+  k<F::r, int> end ();
+};
+int s;
+class I
+{
+public:
+  void
+  aq (char)
+  {
+    if (s)
+      b ();
+  }
+};
+class u : public I
+{
+public:
+  void
+  operator<< (u o (u))
+  {
+    o (*this);
+  }
+  u operator<< (void *);
+};
+template <typename at, typename au>
+at
+av (au o)
+{
+  o.aq ('\n');
+}
+u ax;
+}
+struct p
+{
+  char *ay;
+};
+a::H t;
+void
+ShowHelpListCommands ()
+{
+  for (auto c : t) /* { dg-message "note: missed loop optimization: niters analysis .*" } */
+    a::ax << c.ay << a::av;
+}
+
index 3c8ee06016fe3678c263c5b582f6d7f5823d8e14..0fa5600177e3be7fcf8ce75d74b50a73ad29c59d 100644 (file)
@@ -1,15 +1,15 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -Wunsafe-loop-optimizations" } */
+/* { dg-options "-O2 -fopt-info-loop-missed -Wunsafe-loop-optimizations" } */
 extern void g(void);
 
 void
 f (unsigned n)
 {
   unsigned k;
-  for(k = 0;k <= n;k++) /* { dg-warning "missed loop optimization.*overflow" } */
+  for(k = 0;k <= n;k++) /* { dg-message "note: missed loop optimization: niters analysis .*" } */
     g();
 
-  for(k = 0;k <= n;k += 4) /* { dg-warning "missed loop optimization.*overflow" } */
+  for(k = 0;k <= n;k += 4) /* { dg-message "note: 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-warning "missed loop optimization.*overflow" } */
+  for(k = 4;k <= n;k += 5) /* { dg-message "note: missed loop optimization: niters analysis .*" } */
     g();
   
-  for(k = 15;k >= n;k--) /* { dg-warning "missed loop optimization.*overflow" } */
+  for(k = 15;k >= n;k--) /* { dg-message "note: missed loop optimization: niters analysis .*" } */
     g();
 }
index 5a7cab529bfbab1d27dc72af6ab5896a1c51961e..142100299bf82bcd612f8d1a4ce7de7b61a5dbb0 100644 (file)
@@ -2378,9 +2378,9 @@ number_of_iterations_exit (struct loop *loop, edge exit,
     return true;
 
   if (warn)
-    warning_at (gimple_location_safe (stmt),
-               OPT_Wunsafe_loop_optimizations,
-               "missed loop optimization, the loop counter may overflow");
+    dump_printf_loc (MSG_MISSED_OPTIMIZATION, gimple_location_safe (stmt),
+                    "missed loop optimization: niters analysis ends up "
+                    "with assumptions.\n");
 
   return false;
 }