On 13 December 2017 22:30:12 CET, David Malcolm <dmalc...@redhat.com> wrote:
 
>-/* Walk over all statements of all reachable BBs and call
>check_array_bounds
>-   on them.  */
>+/* A dom_walker subclass for use by vrp_prop::check_all_array_refs,
>+   to walk over all statements of all reachable BBs and call

Not all statements, see below.

>+   check_array_bounds on them.  */
> 
>-void
>-vrp_prop::check_all_array_refs ()
>+class check_array_bounds_dom_walker : public dom_walker
> {
>-  basic_block bb;
>-  gimple_stmt_iterator si;
>+ public:
>+  check_array_bounds_dom_walker (vrp_prop *prop)
>+    : dom_walker (CDI_DOMINATORS, true), m_prop (prop) {}
>+  ~check_array_bounds_dom_walker () {}
> 
>-  FOR_EACH_BB_FN (bb, cfun)
>-    {
>-      edge_iterator ei;
>-      edge e;
>-      bool executable = false;
>+  edge before_dom_children (basic_block) FINAL OVERRIDE;
> 
>-      /* Skip blocks that were found to be unreachable.  */
>-      FOR_EACH_EDGE (e, ei, bb->preds)
>-      executable |= !!(e->flags & EDGE_EXECUTABLE);
>-      if (!executable)
>-      continue;
>+ private:
>+  vrp_prop *m_prop;
>+};
> 
>-      for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
>-      {
>-        gimple *stmt = gsi_stmt (si);
>-        struct walk_stmt_info wi;
>-        if (!gimple_has_location (stmt)
>-            || is_gimple_debug (stmt))
>-          continue;
>+/* Implementation of dom_walker::before_dom_children.
> 
>-        memset (&wi, 0, sizeof (wi));
>+   Walk over all statements of BB and call check_array_bounds on them,

Not all but all non-debug statements of BB with location (which statements 
don't, here?)

>+   and determine if there's a unique successor edge.  */
> 
>-        wi.info = this;
>+edge
>+check_array_bounds_dom_walker::before_dom_children (basic_block bb)
>+{
>+  gimple_stmt_iterator si;
>+  for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))

for (si = gsi_start_nondebug_bb (bb); !gsi_end_p (si); gsi_next_nondebug (&si))

assuming you want to walk also phis(?).

>+    {
>+      gimple *stmt = gsi_stmt (si);
>+      struct walk_stmt_info wi;
>+      if (!gimple_has_location (stmt)

Hence:
- >+      || is_gimple_debug (stmt))
>+      continue;

thanks, 
> 
>-        walk_gimple_op (gsi_stmt (si),
>-                        check_array_bounds,
>-                        &wi);
>-      }
>+      memset (&wi, 0, sizeof (wi));
>+
>+      wi.info = m_prop;
>+
>+      walk_gimple_op (stmt, check_array_bounds, &wi);
>     }

Reply via email to