This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [RFC][IPA-VRP] ADDR_EXPR and nonnull
> Hi Richard,
>
>
> On 20/10/16 18:41, Richard Biener wrote:
> >On Thu, 20 Oct 2016, kugan wrote:
> >
> >>
> >>
> >>On 20/10/16 01:26, Jan Hubicka wrote:
> >>>>>Would excluding weak symbols (I believe I can check DECL_WEAK for this)
> >>>>>good
> >>>>>enough. Or looking for acceptable subset would work?
> >>>>
> >>>>I think we should add a symtab helper to tell if address_nonzero_p (if
> >>>>that doesn't aleady exist).
> >>>
> >>>We have node->nonzero_address()
> >>
> >>Thanks for the pointer. Here is an attempt. Does this look OK?
> >>
> >>+ if (TREE_CODE (arg) == ADDR_EXPR)
> >>+ {
> >>+ /* See if the AADR_EXPR is nonnull. */
> >>+ varpool_node *node = NULL;
> >>+ tree base = TREE_OPERAND (arg, 0);
> >>+ base = get_base_address (base);
> >>+
> >>+ if (decl_address_ip_invariant_p (base)
> >>+ || !is_global_var (base))
> >>+ {
> >>+ /* If the symbol address is local or
> >>+ constant. */
> >
> >"constant" doesn't matter. You want
> >
> > if (TREE_CODE (base) == CONST_DECL
> >|| TREE_CODE (base) == PARM_DECL
> >|| TREE_CODE (base) == RESULT_DECL)
> > addr_nonzero = true;
> > else if (VAR_P (base))
Better to check decl_in_symtab_p (decl)
> > addr_nonzero = ! is_global_var (base) || (varpool_node::get
> >(base)->nonzero_address ());
and symtab_node::get.
I wonder if we can't unify the logic with tree_expr_nonzero_warnv_p
and corresponding vrp code?
Otherwise the patch looks fine to me.
Honza