rtl-optimization: Modify loop live data with livein of loop header

Message ID 033c8799-cbdf-4d57-8d96-af33841d1a4f@linux.ibm.com
State Accepted
Headers
Series rtl-optimization: Modify loop live data with livein of loop header |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Ajit Agarwal Nov. 21, 2023, 8:30 a.m. UTC
  Hello All:

This patch marked LOOP_DATA->live as the livein at the loop header basic
block. This is because Livein at each basic block is live in at the loop header.

Bootstrapped and regtested on powerpc64-linux-gnu.

SPEC CPU 2017 benchmarks score is better than trunk wit this
change for INT and FP benchmarks.

THanks & Regards
Ajit


rtl-optimization: Modify loop live data with livein of loop header

Livein at each basic block is live in at the loop header.
Marked LOOP_DATA->live as the livein at the loop header basic
block.

2023-11-21  Ajit Kumar Agarwal  <aagarwa1@linux.ibm.com>

gcc/ChangeLog:

        * loop-invariant.cc (calculate_loop_reg_pressure): Mark
	LOOP_DATA->live as the livein at the loop header basic block.
---
 gcc/loop-invariant.cc | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
  

Comments

Ajit Agarwal Nov. 21, 2023, 9:45 a.m. UTC | #1
On 21/11/23 3:02 pm, Richard Biener wrote:
> On Tue, Nov 21, 2023 at 9:30 AM Ajit Agarwal <aagarwa1@linux.ibm.com> wrote:
>>
>> Hello All:
>>
>> This patch marked LOOP_DATA->live as the livein at the loop header basic
>> block. This is because Livein at each basic block is live in at the loop header.
> 
> The current code does the same, you now have fewer regs live.  In fact
> your patch removes all of the settings since when
> loop->aux == NULL there's no LOOP_DATA (loop), so you never do anything.
> 

Sorry for the inconvenience caused. I forgot to remove the check loop-aux == NULL
in the patch that I sent.

My mistake. Sorry for that.

Thanks & Regards
Ajit
> It appears that you do not fully grasp the changes done by your
> patches - you need to improve
> in this regard and either provide better explanations or stop sending these kind
> of patches.
> 
> I will stop looking at your patches now, it appears to be a waste of
> my precious time.
> 
> Peter - please work with Ajit here.
> 
> Thanks,
> Richard.
> 
> 
>> Bootstrapped and regtested on powerpc64-linux-gnu.
>>
>> SPEC CPU 2017 benchmarks score is better than trunk wit this
>> change for INT and FP benchmarks.
>>
>> THanks & Regards
>> Ajit
>>
>>
>> rtl-optimization: Modify loop live data with livein of loop header
>>
>> Livein at each basic block is live in at the loop header.
>> Marked LOOP_DATA->live as the livein at the loop header basic
>> block.
>>
>> 2023-11-21  Ajit Kumar Agarwal  <aagarwa1@linux.ibm.com>
>>
>> gcc/ChangeLog:
>>
>>         * loop-invariant.cc (calculate_loop_reg_pressure): Mark
>>         LOOP_DATA->live as the livein at the loop header basic block.
>> ---
>>  gcc/loop-invariant.cc | 11 ++++++-----
>>  1 file changed, 6 insertions(+), 5 deletions(-)
>>
>> diff --git a/gcc/loop-invariant.cc b/gcc/loop-invariant.cc
>> index a9b156682bc..c15e6168d5d 100644
>> --- a/gcc/loop-invariant.cc
>> +++ b/gcc/loop-invariant.cc
>> @@ -2169,17 +2169,18 @@ calculate_loop_reg_pressure (void)
>>        }
>>    ira_setup_eliminable_regset ();
>>    bitmap_initialize (&curr_regs_live, &reg_obstack);
>> +
>> +  /* Livein (loop_hdr) is live at each of the loop basic blocks.  */
>> +  for (auto loop : loops_list (cfun, 0))
>> +    if (loop->aux == NULL)
>> +      bitmap_ior_into (&LOOP_DATA (loop)->regs_live, DF_LR_IN (loop->header));
>> +
>>    FOR_EACH_BB_FN (bb, cfun)
>>      {
>>        curr_loop = bb->loop_father;
>>        if (curr_loop == current_loops->tree_root)
>>         continue;
>>
>> -      for (class loop *loop = curr_loop;
>> -          loop != current_loops->tree_root;
>> -          loop = loop_outer (loop))
>> -       bitmap_ior_into (&LOOP_DATA (loop)->regs_live, DF_LR_IN (bb));
>> -
>>        bitmap_copy (&curr_regs_live, DF_LR_IN (bb));
>>        for (i = 0; i < ira_pressure_classes_num; i++)
>>         curr_reg_pressure[ira_pressure_classes[i]] = 0;
>> --
>> 2.39.3
>>
  
Ajit Agarwal Nov. 21, 2023, 9:52 a.m. UTC | #2
On 21/11/23 3:15 pm, Ajit Agarwal wrote:
> 
> 
> On 21/11/23 3:02 pm, Richard Biener wrote:
>> On Tue, Nov 21, 2023 at 9:30 AM Ajit Agarwal <aagarwa1@linux.ibm.com> wrote:
>>>
>>> Hello All:
>>>
>>> This patch marked LOOP_DATA->live as the livein at the loop header basic
>>> block. This is because Livein at each basic block is live in at the loop header.
>>
>> The current code does the same, you now have fewer regs live.  In fact
>> your patch removes all of the settings since when
>> loop->aux == NULL there's no LOOP_DATA (loop), so you never do anything.
>>
> 
> Sorry for the inconvenience caused. I forgot to remove the check loop-aux == NULL
> in the patch that I sent.
> 
> My mistake. Sorry for that.
> 
> Thanks & Regards
> Ajit

I did copy from one directory to another and forgot to remove loop->aux == NULL check
in the patch that I sent.

My mistake. But anyhow I have tested without that check.

Sorry for inconvenience caused. I will make sure this wont happen again in the future
patches.

Thanks & Regards
Ajit
>> It appears that you do not fully grasp the changes done by your
>> patches - you need to improve
>> in this regard and either provide better explanations or stop sending these kind
>> of patches.
>>
>> I will stop looking at your patches now, it appears to be a waste of
>> my precious time.
>>
>> Peter - please work with Ajit here.
>>
>> Thanks,
>> Richard.
>>
>>
>>> Bootstrapped and regtested on powerpc64-linux-gnu.
>>>
>>> SPEC CPU 2017 benchmarks score is better than trunk wit this
>>> change for INT and FP benchmarks.
>>>
>>> THanks & Regards
>>> Ajit
>>>
>>>
>>> rtl-optimization: Modify loop live data with livein of loop header
>>>
>>> Livein at each basic block is live in at the loop header.
>>> Marked LOOP_DATA->live as the livein at the loop header basic
>>> block.
>>>
>>> 2023-11-21  Ajit Kumar Agarwal  <aagarwa1@linux.ibm.com>
>>>
>>> gcc/ChangeLog:
>>>
>>>         * loop-invariant.cc (calculate_loop_reg_pressure): Mark
>>>         LOOP_DATA->live as the livein at the loop header basic block.
>>> ---
>>>  gcc/loop-invariant.cc | 11 ++++++-----
>>>  1 file changed, 6 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/gcc/loop-invariant.cc b/gcc/loop-invariant.cc
>>> index a9b156682bc..c15e6168d5d 100644
>>> --- a/gcc/loop-invariant.cc
>>> +++ b/gcc/loop-invariant.cc
>>> @@ -2169,17 +2169,18 @@ calculate_loop_reg_pressure (void)
>>>        }
>>>    ira_setup_eliminable_regset ();
>>>    bitmap_initialize (&curr_regs_live, &reg_obstack);
>>> +
>>> +  /* Livein (loop_hdr) is live at each of the loop basic blocks.  */
>>> +  for (auto loop : loops_list (cfun, 0))
>>> +    if (loop->aux == NULL)
>>> +      bitmap_ior_into (&LOOP_DATA (loop)->regs_live, DF_LR_IN (loop->header));
>>> +
>>>    FOR_EACH_BB_FN (bb, cfun)
>>>      {
>>>        curr_loop = bb->loop_father;
>>>        if (curr_loop == current_loops->tree_root)
>>>         continue;
>>>
>>> -      for (class loop *loop = curr_loop;
>>> -          loop != current_loops->tree_root;
>>> -          loop = loop_outer (loop))
>>> -       bitmap_ior_into (&LOOP_DATA (loop)->regs_live, DF_LR_IN (bb));
>>> -
>>>        bitmap_copy (&curr_regs_live, DF_LR_IN (bb));
>>>        for (i = 0; i < ira_pressure_classes_num; i++)
>>>         curr_reg_pressure[ira_pressure_classes[i]] = 0;
>>> --
>>> 2.39.3
>>>
  

Patch

diff --git a/gcc/loop-invariant.cc b/gcc/loop-invariant.cc
index a9b156682bc..c15e6168d5d 100644
--- a/gcc/loop-invariant.cc
+++ b/gcc/loop-invariant.cc
@@ -2169,17 +2169,18 @@  calculate_loop_reg_pressure (void)
       }
   ira_setup_eliminable_regset ();
   bitmap_initialize (&curr_regs_live, &reg_obstack);
+
+  /* Livein (loop_hdr) is live at each of the loop basic blocks.  */
+  for (auto loop : loops_list (cfun, 0))
+    if (loop->aux == NULL)
+      bitmap_ior_into (&LOOP_DATA (loop)->regs_live, DF_LR_IN (loop->header));
+
   FOR_EACH_BB_FN (bb, cfun)
     {
       curr_loop = bb->loop_father;
       if (curr_loop == current_loops->tree_root)
 	continue;
 
-      for (class loop *loop = curr_loop;
-	   loop != current_loops->tree_root;
-	   loop = loop_outer (loop))
-	bitmap_ior_into (&LOOP_DATA (loop)->regs_live, DF_LR_IN (bb));
-
       bitmap_copy (&curr_regs_live, DF_LR_IN (bb));
       for (i = 0; i < ira_pressure_classes_num; i++)
 	curr_reg_pressure[ira_pressure_classes[i]] = 0;