]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Return TRUE only when a global value is updated.
authorAndrew MacLeod <amacleod@redhat.com>
Wed, 27 Sep 2023 16:34:16 +0000 (12:34 -0400)
committerAndrew MacLeod <amacleod@redhat.com>
Tue, 3 Oct 2023 14:25:51 +0000 (10:25 -0400)
set_range_info should return TRUE only when it sets a new value.  VRP no
longer overwrites global ranges DOM has set.  Check for ranges in the
final listing.

gcc/
* tree-ssanames.cc (set_range_info): Return true only if the
current value changes.

gcc/testsuite/
* gcc.dg/pr93917.c: Check for ranges in final optimized listing.
* gcc.dg/tree-ssa/vrp-unreachable.c: Ditto.

gcc/testsuite/gcc.dg/pr93917.c
gcc/testsuite/gcc.dg/tree-ssa/vrp-unreachable.c
gcc/tree-ssanames.cc

index f09e1c41ae8683f2b9871479bdddafde9203faa6..f636b77f45da5b1a1367f921ac26e414f92342b7 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-vrp2" } */
+/* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-vrp2 -fdump-tree-optimized-alias" } */
 
 void f3(int n);
 
@@ -19,5 +19,5 @@ void f2(int*n)
 
 /* { dg-final { scan-tree-dump-times "Global Export.*0, \\+INF" 1 "vrp1" } } */
 /* { dg-final { scan-tree-dump-times "__builtin_unreachable" 1 "vrp1" } } */
-/* { dg-final { scan-tree-dump-times "Global Export.*0, \\+INF" 1 "vrp2" } } */
 /* { dg-final { scan-tree-dump-times "__builtin_unreachable" 0 "vrp2" } } */
+/* { dg-final { scan-tree-dump-times "0, \\+INF" 2 "optimized" } } */
index 5835dfc8dbc2873ff4296c1b9b62d1c0ea7173be..4aad7f1be5d2ea3983e44b34059eb4cbd77d8439 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-vrp1-alias -fdump-tree-vrp2-alias" } */
+/* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-vrp2 -fdump-tree-optimized-alias" } */
 
 void dead (unsigned n);
 void alive (unsigned n);
@@ -39,4 +39,4 @@ void func (unsigned n, unsigned m)
 /* { dg-final { scan-tree-dump-not "dead" "vrp1" } } */
 /* { dg-final { scan-tree-dump-times "builtin_unreachable" 1 "vrp1" } } */
 /* { dg-final { scan-tree-dump-not "builtin_unreachable" "vrp2" } } */
-/* { dg-final { scan-tree-dump-times "fff8 VALUE 0x0" 4 "vrp2" } } */
+/* { dg-final { scan-tree-dump-times "fff8 VALUE 0x0" 2 "optimized" } } */
index 23387b90fe36477b2c69fb2eccb3c1dc5abb6ec7..1eae411ac1c083e6d4f86475504ceac6f01b14f7 100644 (file)
@@ -418,10 +418,17 @@ set_range_info (tree name, const vrange &r)
   if (r.undefined_p () || r.varying_p ())
     return false;
 
+  // Pick up the current range, or VARYING if none.
   tree type = TREE_TYPE (name);
+  Value_Range tmp (type);
+  if (range_info_p (name))
+    range_info_get_range (name, tmp);
+  else
+    tmp.set_varying (type);
+
   if (POINTER_TYPE_P (type))
     {
-      if (r.nonzero_p ())
+      if (r.nonzero_p () && !tmp.nonzero_p ())
        {
          set_ptr_nonnull (name);
          return true;
@@ -429,18 +436,11 @@ set_range_info (tree name, const vrange &r)
       return false;
     }
 
-  /* If a global range already exists, incorporate it.  */
-  if (range_info_p (name))
-    {
-      Value_Range tmp (type);
-      range_info_get_range (name, tmp);
-      tmp.intersect (r);
-      if (tmp.undefined_p ())
-       return false;
+  // If the result doesn't change, or is undefined, return false.
+  if (!tmp.intersect (r) || tmp.undefined_p ())
+    return false;
 
-      return range_info_set_range (name, tmp);
-    }
-  return range_info_set_range (name, r);
+  return range_info_set_range (name, tmp);
 }
 
 /* Set nonnull attribute to pointer NAME.  */