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 GCC][6/6]Restrict predcom using register pressure information


On Tue, May 29, 2018 at 6:18 PM, David Malcolm <dmalcolm@redhat.com> wrote:
> On Tue, 2018-05-29 at 17:04 +0100, Bin.Cheng wrote:
>> On Fri, May 4, 2018 at 5:24 PM, Bin Cheng <Bin.Cheng@arm.com> wrote:
>> > Hi,
>> > This patch restricts predcom pass using register pressure
>> > information.
>> > In case of high register pressure, we now prune additional chains
>> > as well
>> > as disable unrolling in predcom.  In generally, I think this patch
>> > set is
>> > useful.
>> >
>> > Bootstrap and test on x86_64 ongoing.  Any comments?
>>
>> Simple update in line with changes in previous patch.
>>
>> Thanks,
>> bin
>> >
>> > Thanks,
>> > bin
>> > 2018-04-27  Bin Cheng  <bin.cheng@arm.com>
>> >
>> >         * tree-predcom.c (stor-layout.h, tree-ssa-live.h): Include.
>> >         (REG_RELAX_RATIO, prune_chains): New.
>> >         (tree_predictive_commoning_loop): Compute reg pressure
>> > using class
>> >         region.  Prune chains based on reg pressure.  Force to not
>> > unroll
>> >         if reg pressure is high.
>
> [...snip...]
>
>> @@ -3239,6 +3301,11 @@ tree_predictive_commoning_loop (struct loop *loop)
>>    /* Try to combine the chains that are always worked with together.  */
>>    try_combine_chains (loop, &chains);
>>
>> +  region = new lr_region (loop, max_pressure, NULL, NULL, NULL);
>> +  high_pressure_p = region->calculate_pressure ();
>> +  delete region;
>> +  prune_chains (&chains, max_pressure);
>> +
>
> Possibly a silly question, but why the new/delete of "region" here?
> Couldn't this just be an on-stack object, with something like:
Yes, right.  It contained dynamically allocated memory before, so made
early deleting.  Now a local object will do.

Thanks,
bin
>
>   lr_region region (loop, max_pressure, NULL, NULL, NULL);
>   high_pressure_p = region.calculate_pressure ();
>   prune_chains (&chains, max_pressure);
>
> or:
>
>   {
>     lr_region region (loop, max_pressure, NULL, NULL, NULL);
>     high_pressure_p = region.calculate_pressure ();
>   }
>   prune_chains (&chains, max_pressure);
>
> if it's important to do the cleanup before prune_chains?
>
> Dave


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