public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Vladimir Makarov <vmakarov@redhat.com>
To: Max Filippov <jcmvbkbc@gmail.com>, gcc-patches@gcc.gnu.org
Subject: Re: [RFA] gcc: fix PR rtl-optimization/107482
Date: Mon, 7 Nov 2022 15:52:35 -0500	[thread overview]
Message-ID: <c786714d-9efb-f246-d408-ddd32ed3c745@redhat.com> (raw)
In-Reply-To: <20221107094645.3718427-1-jcmvbkbc@gmail.com>


On 2022-11-07 04:46, Max Filippov wrote:
> gcc/
> 	* ira-color.cc (update_costs_from_allocno): Check that allocno
> 	is in the consideration_allocno_bitmap before dereferencing
> 	ALLOCNO_COLOR_DATA (allocno).
> ---
> This fixes the invalid memory access, but I'm not sure if that's
> sufficient and there's no remaining higher level logical issue.

Thank you for reporting and working on this issue.

I believe your approach is sufficient.  Although the patch could be 
improved by three ways:

The simplest one is to move consideration allocno check out of loop by 
using the following patch

diff --git a/gcc/ira-color.cc b/gcc/ira-color.cc
index 4a1a325e8e3..a8e52b6b265 100644
--- a/gcc/ira-color.cc
+++ b/gcc/ira-color.cc
@@ -1413,7 +1413,9 @@ update_costs_from_allocno (ira_allocno_t allocno, 
int hard_regno,
    ira_copy_t cp, next_cp;

    rclass = REGNO_REG_CLASS (hard_regno);
-  do
+  if (!bitmap_bit_p (consideration_allocno_bitmap, ALLOCNO_NUM (allocno)))
+    return;
+  do
      {
        mode = ALLOCNO_MODE (allocno);
        ira_init_register_move_cost_if_necessary (mode);


or by even better patch:

diff --git a/gcc/ira-color.cc b/gcc/ira-color.cc
index 4a1a325e8e3..ffe73b61c45 100644
--- a/gcc/ira-color.cc
+++ b/gcc/ira-color.cc
@@ -2209,8 +2209,8 @@ assign_hard_reg (ira_allocno_t a, bool retry_p)
      restore_costs_from_copies (a);
    ALLOCNO_HARD_REGNO (a) = best_hard_regno;
    ALLOCNO_ASSIGNED_P (a) = true;
-  if (best_hard_regno >= 0)
-    update_costs_from_copies (a, true, ! retry_p);
+  if (best_hard_regno >= 0 && !retry_p)
+    update_costs_from_copies (a, true, true);
    ira_assert (ALLOCNO_CLASS (a) == aclass);
    /* We don't need updated costs anymore.  */
    ira_free_allocno_updated_costs (a);

Probably the best way would be to allocate and set up data for new 
allocnos of pseudos created on the borders of the allocation regions.  
But it is too complicated and I am not sure it will give some visible 
performance improvement.

So I'd prefer the second patch with change in assign_hard_reg.

Please, check that my proposed patch works and commit it in the case of 
success.

Thank you.

> Regtested for target=xtensa-linux-uclibc, no new regressions.
>
>   gcc/ira-color.cc | 2 ++
>   1 file changed, 2 insertions(+)
>
> diff --git a/gcc/ira-color.cc b/gcc/ira-color.cc
> index 4a1a325e8e31..4527eab39bb7 100644
> --- a/gcc/ira-color.cc
> +++ b/gcc/ira-color.cc
> @@ -1434,6 +1434,8 @@ update_costs_from_allocno (ira_allocno_t allocno, int hard_regno,
>   
>   	  if (another_allocno == from
>   	      || (ALLOCNO_COLOR_DATA (another_allocno) != NULL
> +		  && bitmap_bit_p (consideration_allocno_bitmap,
> +				   ALLOCNO_NUM (allocno))
>   		  && (ALLOCNO_COLOR_DATA (allocno)->first_thread_allocno
>   		      != ALLOCNO_COLOR_DATA (another_allocno)->first_thread_allocno)))
>   	    continue;


  reply	other threads:[~2022-11-07 20:52 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-07  9:46 Max Filippov
2022-11-07 20:52 ` Vladimir Makarov [this message]
2022-11-08 10:05   ` Max Filippov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c786714d-9efb-f246-d408-ddd32ed3c745@redhat.com \
    --to=vmakarov@redhat.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jcmvbkbc@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).