]> gcc.gnu.org Git - gcc.git/commitdiff
Misc range temporary fixes.
authorAldy Hernandez <aldyh@redhat.com>
Thu, 2 Jun 2022 17:52:41 +0000 (19:52 +0200)
committerAldy Hernandez <aldyh@redhat.com>
Fri, 3 Jun 2022 08:31:01 +0000 (10:31 +0200)
This fixes a couples places that were using int_range_max, but needed
a generic temporary.  Found while merging the frange work.

Also, copying between range temporaries is actually useful :).

Tested on x86-64 Linux.

gcc/ChangeLog:

* gimple-range-cache.cc (ranger_cache::range_from_dom): Use
Value_Range.
* gimple-range.cc (gimple_ranger::register_inferred_ranges): Same.
* value-range.h (Value_Range::Value_Range): Implement copy
constructor for Value_Range.

gcc/gimple-range-cache.cc
gcc/gimple-range.cc
gcc/value-range.h

index 85eed4421f4acff4ecf0122f1c53379b5040053f..f3494363a101670afe66374ecf2f2a3f58cc2f04 100644 (file)
@@ -1372,7 +1372,7 @@ ranger_cache::range_from_dom (vrange &r, tree name, basic_block start_bb,
              // each incoming edge now and accumulate the results.
              r.set_undefined ();
              edge_iterator ei;
-             int_range_max er;
+             Value_Range er (TREE_TYPE (name));
              FOR_EACH_EDGE (e, ei, prev_bb->preds)
                {
                  edge_range (er, e, name, RFD_READ_ONLY);
index 67dafb2a2c01416e70f5f78dae82f78e188aa880..f3a46555f91cb21ef79e721a9c97f5e9e18b9484 100644 (file)
@@ -461,17 +461,20 @@ gimple_ranger::register_inferred_ranges (gimple *s)
   tree lhs = gimple_get_lhs (s);
   if (lhs)
     {
-      int_range_max tmp;
+      Value_Range tmp (TREE_TYPE (lhs));
       if (range_of_stmt (tmp, s, lhs) && !tmp.varying_p ()
          && update_global_range (tmp, lhs) && dump_file)
        {
-         value_range vr = tmp;
+         // ?? This section should be adjusted when non-iranges can
+         // be exported.  For now, the only way update_global_range
+         // above can succeed is with an irange so this is safe.
+         value_range vr = as_a <irange> (tmp);
          fprintf (dump_file, "Global Exported: ");
          print_generic_expr (dump_file, lhs, TDF_SLIM);
          fprintf (dump_file, " = ");
          vr.dump (dump_file);
          int_range_max same = vr;
-         if (same != tmp)
+         if (same != as_a <irange> (tmp))
            {
              fprintf (dump_file, " ...  irange was : ");
              tmp.dump (dump_file);
index 26e41ed2982acc8fb4860fbcd49089520b6ba539..dc6f6b0f9359414f5fe9aeeb1587471a218c36d3 100644 (file)
@@ -314,6 +314,7 @@ public:
   Value_Range ();
   Value_Range (const vrange &r);
   Value_Range (tree type);
+  Value_Range (const Value_Range &);
   void set_type (tree type);
   vrange& operator= (const vrange &);
   bool operator== (const Value_Range &r) const;
@@ -344,7 +345,6 @@ private:
   unsupported_range m_unsupported;
   vrange *m_vrange;
   int_range_max m_irange;
-  DISABLE_COPY_AND_ASSIGN (Value_Range);
 };
 
 inline
@@ -370,6 +370,12 @@ Value_Range::Value_Range (tree type)
   init (type);
 }
 
+inline
+Value_Range::Value_Range (const Value_Range &r)
+{
+  m_vrange = r.m_vrange;
+}
+
 // Initialize object so it is possible to store temporaries of TYPE
 // into it.
 
This page took 0.074855 seconds and 5 git commands to generate.