On 10/08/14 13:19, Ilya Enkovich wrote:
Hi,

This patch adds removal of unnecessary intersections into checker optimizations.

Thanks,
Ilya
--
2014-10-08  Ilya Enkovich  <ilya.enkov...@intel.com>

        * tree-chkp.c (chkp_release_check_info): New.
        (chkp_init_check_info): New.
        (chkp_gather_checks_info): New.
        (chkp_get_check_result): New.
        (chkp_use_outer_bounds_if_possible): New.
        (chkp_remove_excess_intersections): New.
        (chkp_opt_execute): Run intersections removal
        algorithm.
Usual comment about basic tests and pulling the optimization work into its own file.


 +
+/* Find all checks in current function and store info about them
+   in check_infos.  */
+void
+chkp_gather_checks_info (void)
+{
+  basic_block bb;
+  gimple_stmt_iterator i;
+
+  if (dump_file && (dump_flags & TDF_DETAILS))
+    fprintf (dump_file, "Gathering information about checks...\n");
+
+  chkp_init_check_info ();
+
+  FOR_EACH_BB_FN (bb, cfun)
+    {
+      struct bb_checks *bbc = &check_infos[bb->index];
+
+      if (dump_file && (dump_flags & TDF_DETAILS))
+       fprintf (dump_file, "Searching checks in BB%d...\n", bb->index);
+
+      for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i))
+        {
+         gimple stmt = gsi_stmt (i);
+
+         if (gimple_code (stmt) != GIMPLE_CALL)
+           continue;
+
+         if (gimple_call_fndecl (stmt) == chkp_checkl_fndecl
+             || gimple_call_fndecl (stmt) == chkp_checku_fndecl)
+           {
+             struct check_info ci;
+
+             chkp_fill_check_info (stmt, &ci);
+             bbc->checks.safe_push (ci);
+
+             if (dump_file && (dump_flags & TDF_DETAILS))
+               {
+                 fprintf (dump_file, "Adding check information:\n");
+                 fprintf (dump_file, "  bounds: ");
+                 print_generic_expr (dump_file, ci.bounds, 0);
+                 fprintf (dump_file, "\n  address: ");
+                 chkp_print_addr (ci.addr);
+                 fprintf (dump_file, "\n  check: ");
+                 print_gimple_stmt (dump_file, stmt, 0, 0);
+               }
+           }
+       }
+    }
+}
So  I wonder if it makes sense to structure your optimization passes as:

gather_info
  opt1
  opt2
  opt3
  ...
release


The reason being it looks like you do a number of walks over the blocks and statements in the block to gather information. ISTM you could do it once for all these optimizations and save youself some walking time.

This patch looks fine.

jeff

Reply via email to