> On Thu, Dec 11, 2014 at 06:06:55PM +0100, Jan Hubicka wrote:
> > Hi,
> > in firefox .optimized dumps one can see few places where 
> > __builtin_unreachable
> > is called (as a result of devirtualization code proving the code path to be
> > undefined).  There is usually some argument setup for the parameters of
> > __builtin_unreachable that are dead.  This patch makes it somewhat better 
> > so now we get:
> >   <bb 30>:                                                                  
> >     
> >   # prephitmp_222 = PHI <_52(27), pretmp_245(29)>                           
> >     
> >   _57 = prephitmp_222 + 2;                                                  
> >     
> >   pool_40(D)->ptr = _57;                                                    
> >     
> >   __builtin_unreachable ();                                                 
> >     
> > 
> > Why DSE does not eliminate the stores prior noreturn const function?
> > 
> > Bootstrapped/regtested x86_64-linux, OK?
> > 
> > Honza
> >     * tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Remove dead 
> > parameters
> >     of BUILT_IN_UNREACHABLE
> 
> Shouldn't this be done when you actually change the call to
> __builtin_unreachable ()?  I mean, __builtin_unreachable () has no
> arguments, so leaving any arguments there is broken IL, even if you clean it
> up during the next DCE.

Hmm, I tought there was some reason to not do so becuase of inplace folding and 
memory-SSA.
I can give a try to update all the places we can put builtin_unreachable into 
IL.
(I wonder if that also include standard constant propagation)

Honza
> 
> > --- tree-ssa-dce.c  (revision 218610)
> > +++ tree-ssa-dce.c  (working copy)
> > @@ -250,6 +250,15 @@ mark_stmt_if_obviously_necessary (gimple
> >         case BUILT_IN_ALLOCA:
> >         case BUILT_IN_ALLOCA_WITH_ALIGN:
> >           return;
> > +       case BUILT_IN_UNREACHABLE:
> > +         /* All parameters of BUILT_IN_UNREACHABLE are dead.  Remove them
> > +            from the stmt, so we can remove their definitions.  */
> > +         if (gimple_call_num_args (stmt))
> > +           {
> > +             gimple_set_num_ops (stmt, 3);
> > +             update_stmt (stmt);
> > +           }
> > +         break;
> >  
> >         default:;
> >         }
> 
>       Jakub

Reply via email to