https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114151

--- Comment #16 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Andrew Macleod from comment #12)
> 
> all VRP passes are the same now. so just schedule EVRP.   in theory, you
> could schedule the fast vrp pass I added, but its not heavily tested... but
> you could try it.  It doesnt do any back edges or switches (iirc), but does
> basic calculations in DOM order and exports/updates globals.
> 
> NEXT_PASS (pass_fast_vrp)

When I just want to update global ranges what do I do?  It looks like
VRP first and foremost calls range_of_stmt on each PHI and stmt in the
pre-fold hook.  Does that update global ranges?  It should at least
fill the cache so SCEV would pick up ranges, right?

So doing in the vectorizer sth like the following should get us the best
possible ranges?  Ah, probably only global ranges since the SCEV query
itself would still lack context sensitive info (but as said we don't have
a good context we can easily use).

Would doing sth like below gain anything in addition to your proposed
patch (for context-less queries like those done in SCEV)?

@@ -1240,6 +1241,37 @@ pass_vectorize::execute (function *fun)
   if (vect_loops_num <= 1)
     return 0;

+      scev_reset ();
+  auto ranger = enable_ranger (fun);
+
+    {
+      basic_block bb;
+      FOR_EACH_BB_FN (bb, fun)
+       {
+         for (auto gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next
(&gsi))
+           {
+             tree name = gimple_range_ssa_p (PHI_RESULT (*gsi));
+             if (name)
+               {
+                 Value_Range vr(TREE_TYPE (name));
+                 ranger->range_of_stmt (vr, *gsi, name);
+               }
+           }
+         for (auto gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+           {
+             gimple *s = *gsi;
+             if (is_gimple_debug (s))
+               continue;
+             tree type = gimple_range_type (s);
+             if (type)
+               {
+                 Value_Range vr(type);
+                 ranger->range_of_stmt (vr, s);
+               }
+           }
+       }
+    }
+

Reply via email to