re PR middle-end/81889 (bogus warnings with -Wmaybe-uninitialized -O3)
authorRichard Biener <rguenther@suse.de>
Tue, 12 Dec 2017 08:50:31 +0000 (08:50 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 12 Dec 2017 08:50:31 +0000 (08:50 +0000)
2017-12-12  Richard Biener  <rguenther@suse.de>

PR tree-optimization/81889
* tree-ssa-loop-niter.c (infer_loop_bounds_from_signedness): Use
range info from the non-wrapping IV instead of just the range
of the type.

* gfortran.dg/pr81889.f90: New testcase.
* gcc.dg/tree-ssa/pr64183.c: Adjust.

From-SVN: r255573

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/pr64183.c
gcc/testsuite/gfortran.dg/pr81889.f90 [new file with mode: 0644]
gcc/tree-ssa-loop-niter.c

index 9ec6f5f..6ab0e47 100644 (file)
@@ -1,3 +1,10 @@
+2017-12-12  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/81889
+       * tree-ssa-loop-niter.c (infer_loop_bounds_from_signedness): Use
+       range info from the non-wrapping IV instead of just the range
+       of the type.
+
 2017-12-12  Julia Koval  <julia.koval@intel.com>
 
        * config.gcc: Add vaesintrin.h.
index cacb3f4..dfc5ed8 100644 (file)
@@ -1,3 +1,9 @@
+2017-12-12  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/81889
+       * gfortran.dg/pr81889.f90: New testcase.
+       * gcc.dg/tree-ssa/pr64183.c: Adjust.
+
 2017-12-12  Julia Koval  <julia.koval@intel.com>
 
        * gcc.target/i386/avx512-check.h: Handle bit_VAES.
index 8a3fadc..7a854fc 100644 (file)
@@ -17,4 +17,4 @@ test ()
    bits += 8;
 }
 
-/* { dg-final { scan-tree-dump "Loop 2 iterates at most 4 times" "cunroll"} } */
+/* { dg-final { scan-tree-dump "Loop 2 iterates at most 3 times" "cunroll"} } */
diff --git a/gcc/testsuite/gfortran.dg/pr81889.f90 b/gcc/testsuite/gfortran.dg/pr81889.f90
new file mode 100644 (file)
index 0000000..0516922
--- /dev/null
@@ -0,0 +1,29 @@
+! { dg-do compile }
+! { dg-options "-O3 -Wall" }
+
+module m
+
+   type t
+      integer, dimension(:), pointer :: list
+   end type
+
+contains
+
+   subroutine s(n, p, Y)
+      integer, intent(in) :: n
+      type(t) :: p
+      real, dimension(:) :: Y
+
+      real, dimension(1:16) :: xx
+
+      if (n > 3) then
+         xx(1:n) = 0.
+         print *, xx(1:n)
+      else
+         xx(1:n) = Y(p%list(1:n)) ! { dg-bogus "uninitialized" }
+         print *, sum(xx(1:n))
+      end if
+
+   end subroutine
+
+end module
index b97f1db..b067a0d 100644 (file)
@@ -3510,6 +3510,12 @@ infer_loop_bounds_from_signedness (struct loop *loop, gimple *stmt)
 
   low = lower_bound_in_type (type, type);
   high = upper_bound_in_type (type, type);
+  wide_int minv, maxv;
+  if (get_range_info (def, &minv, &maxv) == VR_RANGE)
+    {
+      low = wide_int_to_tree (type, minv);
+      high = wide_int_to_tree (type, maxv);
+    }
 
   record_nonwrapping_iv (loop, base, step, stmt, low, high, false, true);
 }