[patch] Cleanup tree-ssa-ter.c exports

Andrew MacLeod amacleod@redhat.com
Fri Sep 13 20:45:00 GMT 2013


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 
>> <amacleod@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...

Andrew




-------------- next part --------------
A non-text attachment was scrubbed...
Name: f1.diff
Type: text/x-patch
Size: 46326 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20130913/f336d1a0/attachment.bin>


More information about the Gcc-patches mailing list