> 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