This makes set_and_canonicalize_value_range more consistent.  To be
used in further patches.

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.

Richard.

2012-06-15  Richard Guenther  <rguent...@suse.de>

        * tree-vrp.c (set_and_canonicalize_value_range): Use canonical
        predicates to set VR_UNDEFINED and VR_VARYING.  Drop a case
        we assert for in set_value_range to VR_VARYING.

Index: gcc/tree-vrp.c
===================================================================
*** gcc/tree-vrp.c.orig 2012-06-15 13:50:01.929912328 +0200
--- gcc/tree-vrp.c      2012-06-15 13:50:30.354911342 +0200
*************** nonnull_arg_p (const_tree arg)
*** 386,391 ****
--- 386,403 ----
  }
  
  
+ /* Set value range VR to VR_UNDEFINED.  */
+ 
+ static inline void
+ set_value_range_to_undefined (value_range_t *vr)
+ {
+   vr->type = VR_UNDEFINED;
+   vr->min = vr->max = NULL_TREE;
+   if (vr->equiv)
+     bitmap_clear (vr->equiv);
+ }
+ 
+ 
  /* Set value range VR to VR_VARYING.  */
  
  static inline void
*************** static void
*** 463,472 ****
  set_and_canonicalize_value_range (value_range_t *vr, enum value_range_type t,
                                  tree min, tree max, bitmap equiv)
  {
!   /* Nothing to canonicalize for symbolic or unknown or varying ranges.  */
!   if ((t != VR_RANGE
!        && t != VR_ANTI_RANGE)
!       || TREE_CODE (min) != INTEGER_CST
        || TREE_CODE (max) != INTEGER_CST)
      {
        set_value_range (vr, t, min, max, equiv);
--- 475,494 ----
  set_and_canonicalize_value_range (value_range_t *vr, enum value_range_type t,
                                  tree min, tree max, bitmap equiv)
  {
!   /* Use the canonical setters for VR_UNDEFINED and VR_VARYING.  */
!   if (t == VR_UNDEFINED)
!     {
!       set_value_range_to_undefined (vr);
!       return;
!     }
!   else if (t == VR_VARYING)
!     {
!       set_value_range_to_varying (vr);
!       return;
!     }
! 
!   /* Nothing to canonicalize for symbolic ranges.  */
!   if (TREE_CODE (min) != INTEGER_CST
        || TREE_CODE (max) != INTEGER_CST)
      {
        set_value_range (vr, t, min, max, equiv);
*************** set_and_canonicalize_value_range (value_
*** 502,508 ****
  
        if (is_min && is_max)
        {
!         /* We cannot deal with empty ranges, drop to varying.  */
          set_value_range_to_varying (vr);
          return;
        }
--- 524,531 ----
  
        if (is_min && is_max)
        {
!         /* We cannot deal with empty ranges, drop to varying.
!            ???  This could be VR_UNDEFINED instead.  */
          set_value_range_to_varying (vr);
          return;
        }
*************** set_and_canonicalize_value_range (value_
*** 525,530 ****
--- 548,562 ----
          }
      }
  
+   /* Drop [-INF(OVF), +INF(OVF)] to varying.  */
+   if (needs_overflow_infinity (TREE_TYPE (min))
+       && is_overflow_infinity (min)
+       && is_overflow_infinity (max))
+     {
+       set_value_range_to_varying (vr);
+       return;
+     }
+ 
    set_value_range (vr, t, min, max, equiv);
  }
  
*************** set_value_range_to_truthvalue (value_ran
*** 608,625 ****
  }
  
  
- /* Set value range VR to VR_UNDEFINED.  */
- 
- static inline void
- set_value_range_to_undefined (value_range_t *vr)
- {
-   vr->type = VR_UNDEFINED;
-   vr->min = vr->max = NULL_TREE;
-   if (vr->equiv)
-     bitmap_clear (vr->equiv);
- }
- 
- 
  /* If abs (min) < abs (max), set VR to [-max, max], if
     abs (min) >= abs (max), set VR to [-min, min].  */
  
--- 640,645 ----

Reply via email to