[PR middle-end/60832] Do not convert widest_int to tree just for printing it.
authorManuel López-Ibáñez <manu@gcc.gnu.org>
Mon, 21 Sep 2015 10:11:24 +0000 (10:11 +0000)
committerManuel López-Ibáñez <manu@gcc.gnu.org>
Mon, 21 Sep 2015 10:11:24 +0000 (10:11 +0000)
In do_warn_aggressive_loop_optimizations, we convert to a tree just to print a
widest_int. Apart from overly complicated, this results in printing '3u'
instead of just '3'.

Unfortunately, adding a printf-like conversion specifier would require making
pretty-print.c link with wide-int.cc, which will include a lot of new
dependencies into several other programs (gcov-tool for example). It would be
possible to add the conversion specifier to every FE pretty-printer, but this
still would require updating c-format.c, which is far from trivial. A simpler
approach is to convert to a string rather than to a tree.

In addition, "iteration 3 invokes undefined behavior within this loop" seems to
me clearer than "iteration 3 invokes undefined behavior; containing loop".

gcc/testsuite/ChangeLog:

2015-09-21  Manuel López-Ibáñez  <manu@gcc.gnu.org>

PR middle-end/60832
* gcc.dg/pr53265.c: Update.

gcc/ChangeLog:

2015-09-21  Manuel López-Ibáñez  <manu@gcc.gnu.org>

PR middle-end/60832
* tree-ssa-loop-niter.c (do_warn_aggressive_loop_optimizations):
Print i_bound without converting it to a tree.

From-SVN: r227964

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr53265.c
gcc/tree-ssa-loop-niter.c

index 93df84b82f164eaf89648bab0e37c22ec4d22b08..970ebae979fd1645dd2ae34b79ca6c96977a53ab 100644 (file)
@@ -1,3 +1,9 @@
+2015-09-21  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       PR middle-end/60832
+       * tree-ssa-loop-niter.c (do_warn_aggressive_loop_optimizations):
+       Print i_bound without converting it to a tree.
+
 2015-09-21  Bilyan Borisov  <bilyan.borisov@arm.com>
 
        * config/arm/arm.c (thumb_output_move_mem_multiple): Replaced
index 6aaffbb5e36561ef4ec5bab54c20e0341afd369e..82d67739ec402c6ca3fa858b209ba5e4564c2b26 100644 (file)
@@ -1,3 +1,8 @@
+2015-09-21  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       PR middle-end/60832
+       * gcc.dg/pr53265.c: Update.
+
 2015-09-21  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc.target/arm/stack-checking.c: Skip for Thumb1.
index e1ca6f521e763eecf27e8a493a994250f2240f00..d3ab6aa60317312fefb94296e2b8f67ab7905eb6 100644 (file)
@@ -12,8 +12,8 @@ fn1 (void)
   unsigned int a[128];
   int i;
 
-  for (i = 0; i < 128; ++i)    /* { dg-message "note: containing loop" } */
-    a[i] = i * 0x02000001;     /* { dg-warning "invokes undefined behavior" } */
+  for (i = 0; i < 128; ++i)    /* { dg-message "note: within this loop" } */
+    a[i] = i * 0x02000001;     /* { dg-warning "64 invokes undefined behavior" } */
   bar (a);
 }
 
@@ -23,8 +23,8 @@ fn2 (void)
   unsigned long long a[128];
   int i;
 
-  for (i = 0; i < 128; i++)                    /* { dg-message "note: containing loop" } */
-    a[i] = (i + 1LL) * 0x0123456789ABCDEFLL;   /* { dg-warning "invokes undefined behavior" } */
+  for (i = 0; i < 128; i++)                    /* { dg-message "note: within this loop" } */
+    a[i] = (i + 1LL) * 0x0123456789ABCDEFLL;   /* { dg-warning "112 invokes undefined behavior" } */
   bar (a);
 }
 
@@ -35,9 +35,9 @@ fn3 (void)
   int i;
 
   bar (b);
-  for (i = 0; i < (int) (sizeof (a) / sizeof (a[0])); i++)     /* { dg-message "note: containing loop" } */
+  for (i = 0; i < (int) (sizeof (a) / sizeof (a[0])); i++)     /* { dg-message "note: within this loop" } */
     {
-      c[i + 8] = b[i]; /* { dg-warning "invokes undefined behavior" } */
+      c[i + 8] = b[i]; /* { dg-warning "invokes undefined behavior" } */
       a[i + 8] = b[i + 8];
     }
   bar (a);
@@ -50,9 +50,9 @@ fn4 (void)
   unsigned int *a[32], *o, i;
 
   bar (a);
-  for (i = 0; i <= sizeof (a) / sizeof (a[0]); i++)    /* { dg-message "note: containing loop" "" } */
+  for (i = 0; i <= sizeof (a) / sizeof (a[0]); i++)    /* { dg-message "note: within this loop" "" } */
     {
-      o = a[i];        /* { dg-warning "invokes undefined behavior" "" } */
+      o = a[i];        /* { dg-warning "32 invokes undefined behavior" "" } */
       bar (o);
     }
 }
@@ -65,8 +65,8 @@ fn5 (void)
   int j;
 
   bar (b);
-  for (j = 0; j < 1140; j++)   /* { dg-message "note: containing loop" } */
-    a[23940 + j - 950] = b[j]; /* { dg-warning "invokes undefined behavior" } */
+  for (j = 0; j < 1140; j++)   /* { dg-message "note: within this loop" } */
+    a[23940 + j - 950] = b[j]; /* { dg-warning "950 invokes undefined behavior" } */
   bar (a);
 }
 
@@ -76,8 +76,8 @@ fn6 (void)
   double a[4][3], b[12];
   int i;
   bar (b);
-  for (i = 0; i < 12; i++)     /* { dg-message "note: containing loop" } */
-    a[0][i] = b[i] / 10000.0;  /* { dg-warning "invokes undefined behavior" } */
+  for (i = 0; i < 12; i++)     /* { dg-message "note: within this loop" } */
+    a[0][i] = b[i] / 10000.0;  /* { dg-warning "invokes undefined behavior" } */
   bar (a);
 }
 
@@ -86,11 +86,11 @@ fn7 (void)
 {
   int a[16], b, c;
   bar (a);
-  for (b = a[c = 0]; c < 16; b = a[++c])       /* { dg-warning "invokes undefined behavior" "" } */
+  for (b = a[c = 0]; c < 16; b = a[++c])       /* { dg-warning "15 invokes undefined behavior" "" } */
     baz (b);
 }
 
-/* { dg-message "note: containing loop" "" { target *-*-* } 89 } */
+/* { dg-message "note: within this loop" "" { target *-*-* } 89 } */
 
 const void *va, *vb, *vc, *vd, *ve;
 const void *vf[4];
@@ -134,8 +134,8 @@ void
 fn10 (void)
 {
   int i;
-  for (i = 16; i < 32; i++)    /* { dg-message "note: containing loop" } */
-    xa[i] = 26;                        /* { dg-warning "invokes undefined behavior" } */
+  for (i = 16; i < 32; i++)    /* { dg-message "note: within this loop" } */
+    xa[i] = 26;                        /* { dg-warning "invokes undefined behavior" } */
 }
 
 __attribute__((noinline)) static void
index 70bdb841245e43839eaff2d03ed10b67e0ba4719..5125af4d7bdaa8b36d8902c6b9f61aca51e57f81 100644 (file)
@@ -2911,11 +2911,12 @@ do_warn_aggressive_loop_optimizations (struct loop *loop,
     return;
 
   gimple *estmt = last_stmt (e->src);
+  char buf[WIDE_INT_PRINT_BUFFER_SIZE];
+  print_dec (i_bound, buf, TYPE_UNSIGNED (TREE_TYPE (loop->nb_iterations))
+            ? UNSIGNED : SIGNED);
   if (warning_at (gimple_location (stmt), OPT_Waggressive_loop_optimizations,
-                 "iteration %E invokes undefined behavior",
-                 wide_int_to_tree (TREE_TYPE (loop->nb_iterations),
-                                   i_bound)))
-    inform (gimple_location (estmt), "containing loop");
+                 "iteration %s invokes undefined behavior", buf))
+    inform (gimple_location (estmt), "within this loop");
   loop->warned_aggressive_loop_optimizations = true;
 }