Hi,

This patch adds removal of user calls to chkp builtins which become useless 
after instrumentation.

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

        * tree-chkp.c (chkp_remove_useless_builtins): New.
        (chkp_execute): Remove useless calls to Pointer Bounds
        Checker builtins.


diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c
index 5443950..b424af8 100644
--- a/gcc/tree-chkp.c
+++ b/gcc/tree-chkp.c
@@ -3805,6 +3805,49 @@ chkp_instrument_function (void)
        }
 }
 
+/* Find init/null/copy_ptr_bounds calls and replace them
+   with assignments.  It should allow better code
+   optimization.  */
+
+static void
+chkp_remove_useless_builtins ()
+{
+  basic_block bb, next;
+  gimple_stmt_iterator gsi;
+
+  bb = ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb;
+  do
+    {
+      next = bb->next_bb;
+      for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+        {
+          gimple stmt = gsi_stmt (gsi);
+         tree fndecl;
+         enum built_in_function fcode;
+
+         /* Find builtins returning first arg and replace
+            them with assignments.  */
+         if (gimple_code (stmt) == GIMPLE_CALL
+             && (fndecl = gimple_call_fndecl (stmt))
+             && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
+             && (fcode = DECL_FUNCTION_CODE (fndecl))
+             && (fcode == BUILT_IN_CHKP_INIT_PTR_BOUNDS
+                 || fcode == BUILT_IN_CHKP_NULL_PTR_BOUNDS
+                 || fcode == BUILT_IN_CHKP_COPY_PTR_BOUNDS
+                 || fcode == BUILT_IN_CHKP_SET_PTR_BOUNDS))
+           {
+             tree res = gimple_call_arg (stmt, 0);
+             if (!update_call_from_tree (&gsi, res))
+               gimplify_and_update_call_from_tree (&gsi, res);
+             stmt = gsi_stmt (gsi);
+             update_stmt (stmt);
+           }
+        }
+      bb = next;
+    }
+  while (bb);
+}
+
 /* Initialize pass.  */
 static void
 chkp_init (void)
@@ -3872,6 +3915,8 @@ chkp_execute (void)
 
   chkp_instrument_function ();
 
+  chkp_remove_useless_builtins ();
+
   chkp_function_mark_instrumented (cfun->decl);
 
   chkp_fix_cfg ();

Reply via email to