On Fri, Sep 13, 2013 at 9:15 PM, Andrew MacLeod <amacl...@redhat.com> wrote:
> On 09/13/2013 11:11 AM, Andrew MacLeod wrote:
>>
>> On 09/13/2013 03:54 AM, Richard Biener wrote:
>>>
>>> On Thu, Sep 12, 2013 at 11:09 PM, Andrew MacLeod <amacl...@redhat.com>
>>> wrote:
>>>>
>>>> There are 2 parts of tre-ssa-ter.c to address.
>>>>
>>>> is_replaceable_p() is also used in expr.c, It has a flag to indicate
>>>> where
>>>> its being called from, and we do different checks for each one.  There
>>>> is a
>>>> wrapper function stmt_is_replaceable_p() in tree-ssa-ter.c which hides
>>>> the
>>>> setting of the flag to expr.c. Most of the function is common, so I
>>>> extracted out the common part, and put it in tree-ssa.c.
>>>> I then moved stmt_is_replaceable() to expr.c, has it call the common
>>>> routine
>>>> and then added the extra bit it needs there.  Similarly tree-ssa-ter.c
>>>> gets
>>>> ter_is_replaceable_p() which calls the common part, and then does its
>>>> own
>>>> special checking.   This removes that general export and messiness from
>>>> tree-ssa-ter.c
>>>>
>>>> I think I got the logic of the function right, but you might want to
>>>> double
>>>> check...  It was giving me a headache when I split it :-)
>>>>
>>>> Unfortunately,  tree-ssa-ter.c also has 2 functions
>>>> (find_replaceable_exprs() and  dump_replaceable_exprs()) which are
>>>> exported
>>>> and utilized by tree-outof-ssa.c  (the file is a part of the out-of-ssa
>>>> module).  So I moved the prototypes from tree-ssa-live.h into a newly
>>>> created tree-ssa-ter.h file,  and included it directly from
>>>> tree-outof-ssa.c, the only consumer.
>>>>
>>>> I also could have just left the is_replaceable_p() function as is, put
>>>> the
>>>> prototype and the 'stmt_is_replaceable_p()' wrapper function in
>>>> tree-ssa-ter.h, and then included that from expr.c...  but it just seems
>>>> like an odd thing to include directly there....  but that is an
>>>> option...
>>>>
>>>> eventually we mighty want to look at splitting expr.c.. it seems a bit
>>>> multi-personality with some pure RTL, some tree/rtl and some ssa...
>>>> even
>>>> though they all serve the same ultimate function, it is 11,000+ lines
>>>> long
>>>> now :-) .  A task for another day.
>>>
>>> is_replaceable_p and friends is purely specific to the area of RTL
>>> expansion,
>>> so putting it in tree-ssa.[ch] is definitely wrong.  It doesn't make
>>> sense to
>>> use it anywhere else.
>>>
>>> The main driver of the RTL expansion process is in cfgexpand.c (the
>>> expand
>>> pass itself) in gimple_expand_cfg.  We have one header file related to
>>> the RTL expansion process and is_replaceable_p would simply fit in
>>> ssaexpand.h (which doesn't have a .c file, so leaving the stuff in the .c
>>> files
>>> where they are now is ok).
>>>
>>> So - I fear you have to re-do this patch (in a much simpler way).
>>>
>> I actually figured as much :-)  I had actually done that split before I
>> remembered there were other exports, and considered undoing that part, but
>> figured since I had done it I'd get opinion :-)
>>
>> Or are you suggesting we also bail on tree-ssa-ter.h and put those
>> prototypes in ssaexpand.h?
>>
>> If we want to make this fully consistent (.h's match .c exports) , I could
>> put is_replaceable_p() into a new ssaexpand.c, move the 3 tree-outof-ssa
>> prototypes in ssaexpand.h into tree-outof-ssa.h, and have ssaexpand.h
>> include tree-ssa-ter.h and tree-outof-ssa.h.   That would then be clean. and
>> consistent.
>>
>> actually, we could just make is_replaceable_p() static inline in
>> ssaexpand.h...  thats not unreasonable either, but we'll probably find
>> functions which belong in ssaexpand.c sooner or later.
>>
>> No worries, I figured these first few patches would be slower and more
>> painful until a reasonable formula was determined :-)
>>
>>
>> Andrew
>>
> OK, a slightly different take..
> I realized that I should be adding tree-outof-ssa.h to handle the 3 exports
> from tree-outof-ssa.c that are in ssaexpand.h...  In fact, by far the most
> sensible thing to do is to simply rename tree-outof-ssa.c to ssaexpand.c.
> This actually resolves a number of warts... And is_replaceable_p() very
> naturally fits in ssaexpand.c now...
>
> what do you think of this option? :-)  and svn rename preserves all the
> tree-outof-ssa.c history...

I don't like the new name for tree-outof-ssa.c, it matches less to its contents.

I'd say either keep ssaexpand.h and tree-outof-ssa.c as-is or rename
ssaexpand.h to tree-outof-ssa.h.  I prefer the latter.

The rest of the changes look ok to me, but watch out for odd whitespace
changes:

+static inline bool
+ter_is_replaceable_p (gimple stmt)
+{
+
+  if (ssa_is_replaceable_p (stmt))

spurious vertical space.

Thanks,
Richard.



> Andrew
>
>
>
>

Reply via email to