On 26 Nov 13:46, Jakub Jelinek wrote:
> On Wed, Nov 26, 2014 at 03:41:46PM +0300, Ilya Enkovich wrote:
> > Hi,
> > 
> > This patch makes optimization for bounds lifetime reduction to ignore
> > debug stetments.  This fixes stage2 and stage3 comparision for
> > instrumented boostrap.  OK for trunk?
> 
> Please add a small testcase (with -fcompare-debug -fcheck-pointer-bounds (or 
> what
> other options you need to reproduce it) that fails without the patch and
> succeeds with it.
> 
> > 2014-11-26  Ilya Enkovich  <ilya.enkov...@intel.com>
> > 
> >     PR bootstrap/63995
> >     * tree-chkp-opt.c (chkp_reduce_bounds_lifetime): Ignore
> >     debug statement when searching for a new position for
> >     bounds load/creation statement.
> > 
> > 
> > diff --git a/gcc/tree-chkp-opt.c b/gcc/tree-chkp-opt.c
> > index ff390d7..92e0694 100644
> > --- a/gcc/tree-chkp-opt.c
> > +++ b/gcc/tree-chkp-opt.c
> > @@ -1175,6 +1175,9 @@ chkp_reduce_bounds_lifetime (void)
> >  
> >        FOR_EACH_IMM_USE_STMT (use_stmt, use_iter, op)
> >     {
> > +     if (is_gimple_debug (use_stmt))
> > +       continue;
> > +
> >       if (dom_bb &&
> >           dominated_by_p (CDI_DOMINATORS,
> >                           dom_bb, gimple_bb (use_stmt)))
> 
>       Jakub

Here is a version with a test added.

Thanks,
Ilya
--
gcc/

2014-11-26  Ilya Enkovich  <ilya.enkov...@intel.com>

        PR bootstrap/63995
        * tree-chkp-opt.c (chkp_reduce_bounds_lifetime): Ignore
        debug statement when searching for a new position for
        bounds load/creation statement.

gcc/testsuite/

2014-11-26  Ilya Enkovich  <ilya.enkov...@intel.com>

        PR bootstrap/63995
        * gcc.target/i386/pr63995-2.c: New.


diff --git a/gcc/testsuite/gcc.target/i386/pr63995-2.c 
b/gcc/testsuite/gcc.target/i386/pr63995-2.c
new file mode 100644
index 0000000..7c22e62
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr63995-2.c
@@ -0,0 +1,28 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target mpx } */
+/* { dg-options "-O2 -g -fcheck-pointer-bounds -mmpx -fcompare-debug" } */
+
+struct ts
+{
+  int field;
+};
+
+extern void test1 ();
+extern void test2 (struct ts *);
+
+static void
+init (struct ts *c)
+{
+  c->field = -1;
+}
+
+struct ts
+test3 (const struct ts *other)
+{
+  struct ts r;
+  if (other->field != 0)
+    test1 ();
+  init (&r);
+  test2 (&r);
+  return r;
+}
diff --git a/gcc/tree-chkp-opt.c b/gcc/tree-chkp-opt.c
index ff390d7..92e0694 100644
--- a/gcc/tree-chkp-opt.c
+++ b/gcc/tree-chkp-opt.c
@@ -1175,6 +1175,9 @@ chkp_reduce_bounds_lifetime (void)
 
       FOR_EACH_IMM_USE_STMT (use_stmt, use_iter, op)
        {
+         if (is_gimple_debug (use_stmt))
+           continue;
+
          if (dom_bb &&
              dominated_by_p (CDI_DOMINATORS,
                              dom_bb, gimple_bb (use_stmt)))

Reply via email to