This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, PR 10474] Split live-ranges of function arguments to help shrink-wrapping


On 10/25/2013 11:19 AM, Martin Jambor wrote:
> Hi,
>
> On Thu, Oct 24, 2013 at 01:02:51AM +0200, Steven Bosscher wrote:
>> On Wed, Oct 23, 2013 at 6:46 PM, Martin Jambor wrote:
>>
>>>  /* Perform the second half of the transformation started in
>>> @@ -4522,7 +4704,15 @@ ira (FILE *f)
>>>       allocation because of -O0 usage or because the function is too
>>>       big.  */
>>>    if (ira_conflicts_p)
>>> -    find_moveable_pseudos ();
>>> +    {
>>> +      df_analyze ();
>>> +      calculate_dominance_info (CDI_DOMINATORS);
>>> +
>>> +      find_moveable_pseudos ();
>>> +      split_live_ranges_for_shrink_wrap ();
>>> +
>>> +      free_dominance_info (CDI_DOMINATORS);
>>> +    }
>>>
>> You probably want to add another df_analyze if
>> split_live_ranges_for_shrink_wrap makes code transformations. AFAIU
>> find_moveable_pseudos doesn't change global liveness but your
>> transformation might. IRA/LRA need up-to-date DF_LR results to compute
>> allocno live ranges.
>>
> OK, I have changed the patch to fo that (it is below, still bootstraps
> and passes tests on x86_64 fine).  However, I have noticed that the
> corresponding part in function ira now looks like:
>
>   /* ... */
>   if (delete_trivially_dead_insns (get_insns (), max_reg_num ()))
>     df_analyze ();
>
>   /* It is not worth to do such improvement when we use a simple
>      allocation because of -O0 usage or because the function is too
>      big.  */
>   if (ira_conflicts_p)
>     {
>       df_analyze ();
>       calculate_dominance_info (CDI_DOMINATORS);
>
>       find_moveable_pseudos ();
>       if (split_live_ranges_for_shrink_wrap ())
> 	df_analyze ();
>
>       free_dominance_info (CDI_DOMINATORS);
>     }
>   /* ... */
>
> So, that left me wondering whether the first call to df_analyze is
> actually necessary, or whether perhaps the data are actually already
> up to date.  What do you think?
I guess it needs some investigation.  delete_trivially_dead_insns code
was taken from the old RA.  First of all, I don't know how many insns
are really trivially dead before RA in optimization and non-optimization
mode.  May be the code can be removed at all.  I'll put it on my todo list.
The patch is ok to commit.  Thanks for working on this, Martin.
>
> 2013-10-23  Martin Jambor  <mjambor@suse.cz>
>
> 	PR rtl-optimization/10474
> 	* ira.c (find_moveable_pseudos): Do not calculate dominance info
> 	nor df analysis.
> 	(interesting_dest_for_shprep): New function.
> 	(split_live_ranges_for_shrink_wrap): Likewise.
> 	(ira): Calculate dominance info and df analysis. Call
> 	split_live_ranges_for_shrink_wrap.
>
> testsuite/
> 	* gcc.dg/pr10474.c: New testcase.
> 	* gcc.dg/ira-shrinkwrap-prep-1.c: Likewise.
> 	* gcc.dg/ira-shrinkwrap-prep-2.c: Likewise.
>
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]