On Tue, 24 Mar 2020, Jakub Jelinek wrote: > Hi! > > The following testcase shows -fcompare-debug bugs in ifcvt_local_dce, > where the decisions what statements are needed is based also on debug stmt > operands, which is wrong. > So, this patch makes sure to never add debug stmt to the worklist, or never > add an assign to worklist just because it is used in a debug stmt in another > bb. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
OK. > 2020-03-24 Jakub Jelinek <ja...@redhat.com> > > PR debug/94283 > * tree-if-conv.c (ifcvt_local_dce): For gimple debug stmts, just set > GF_PLF_2, but don't add them to worklist. Don't add an assigment to > worklist or set GF_PLF_2 just because it is used in a debug stmt in > another bb. Formatting improvements. > > * gcc.target/i386/pr94283.c: New test. > > --- gcc/tree-if-conv.c.jj 2020-01-12 11:54:38.495381997 +0100 > +++ gcc/tree-if-conv.c 2020-03-23 17:13:13.823724294 +0100 > @@ -2917,9 +2917,12 @@ ifcvt_local_dce (class loop *loop) > for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) > { > stmt = gsi_stmt (gsi); > - if (gimple_store_p (stmt) > - || gimple_assign_load_p (stmt) > - || is_gimple_debug (stmt)) > + if (is_gimple_debug (stmt)) > + { > + gimple_set_plf (stmt, GF_PLF_2, true); > + continue; > + } > + if (gimple_store_p (stmt) || gimple_assign_load_p (stmt)) > { > gimple_set_plf (stmt, GF_PLF_2, true); > worklist.safe_push (stmt); > @@ -2940,7 +2943,7 @@ ifcvt_local_dce (class loop *loop) > FOR_EACH_IMM_USE_FAST (use_p, imm_iter, lhs) > { > stmt1 = USE_STMT (use_p); > - if (gimple_bb (stmt1) != bb) > + if (!is_gimple_debug (stmt1) && gimple_bb (stmt1) != bb) > { > gimple_set_plf (stmt, GF_PLF_2, true); > worklist.safe_push (stmt); > @@ -2963,8 +2966,7 @@ ifcvt_local_dce (class loop *loop) > if (TREE_CODE (use) != SSA_NAME) > continue; > stmt1 = SSA_NAME_DEF_STMT (use); > - if (gimple_bb (stmt1) != bb > - || gimple_plf (stmt1, GF_PLF_2)) > + if (gimple_bb (stmt1) != bb || gimple_plf (stmt1, GF_PLF_2)) > continue; > gimple_set_plf (stmt1, GF_PLF_2, true); > worklist.safe_push (stmt1); > --- gcc/testsuite/gcc.target/i386/pr94283.c.jj 2020-03-23 > 17:16:50.324494226 +0100 > +++ gcc/testsuite/gcc.target/i386/pr94283.c 2020-03-23 17:16:42.238614863 > +0100 > @@ -0,0 +1,5 @@ > +/* PR debug/94283 */ > +/* { dg-do compile } */ > +/* { dg-options "-O3 -fcompare-debug -mavx2" } */ > + > +#include "../../gcc.dg/fold-bopcond-1.c" > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)