On Tue, Oct 16, 2012 at 11:39 AM, Eric Botcazou <ebotca...@adacore.com> wrote:
>> As I'm not sure how to best do that I suggest we do a more proper RTL
>> DSE hack by adding a 'libcall-call-escape'-set which we can add to
>> instead of calling mark_addressable this late.  We need to add all
>> partitions of a decl here, of course, and we need to query it from
>> can_escape.
>
> That doesn't pertain only to libcalls though, mark_addressable can also be
> called for regular calls if arguments are callee-copied.  And mark_addressable
> has also been called from expand_asm_operands for ages.

Hm, I see ...

>> Well, it just means that the enhanced DSE is fragile :/
>
> Maybe, but the current implementation is the outcome of a discussion between
> Easwaran and you IIRC.  In any case, before attempting to rewrite everything,
> here is another approach that patches things up by extending the usage of the
> TREE_ADDRESSABLE bit from the vars in a partition to the artificial pointer to
> that partition, i.e. the bit is set on the artificial pointer if it is set on
> at least one variable in the partition.

Ok, I like that a lot more - can_escape now properly checks all partition vars
and the use of TREE_ADDRESSABLE on the SSA-NAME is a nice idea.

Less ideal is the mark_addressable change but I can't see any better
way to deal with late addressable markings ...

> Tested on x86_64-suse-linux.

... thus, ok!

Thanks,
Richard.

>
>         PR rtl-optimization/54870
>         * tree.h (TREE_ADDRESSABLE): Document special usage of SSA_NAME.
>         * cfgexpand.c (update_alias_info_with_stack_vars ): Set it on the
>         SSA_NAME pointer that points to a partition if there is at least
>         one variable with it set in the partition.
>         * dse.c (local_variable_can_escape): New predicate.
>         (can_escape): Call it.
>         * gimplify.c (mark_addressable): If this is a partitioned decl, mark
>         the SSA_NAME pointer that points to a partition as well.
>
>
> --
> Eric Botcazou

Reply via email to