public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
From: Przemyslaw Wirkus <wirkus@gcc.gnu.org>
To: gcc-cvs@gcc.gnu.org
Subject: [gcc r10-9882] [PR98777] LRA: Use preliminary created pseudo for in LRA elimination subpass
Date: Wed,  2 Jun 2021 22:26:52 +0000 (GMT)	[thread overview]
Message-ID: <20210602222652.F19C039730FA@sourceware.org> (raw)

https://gcc.gnu.org/g:05f6971ac40912ef062915f88b3ea0bf27278285

commit r10-9882-g05f6971ac40912ef062915f88b3ea0bf27278285
Author: Vladimir N. Makarov <vmakarov@redhat.com>
Date:   Thu Jan 21 17:27:01 2021 -0500

    [PR98777] LRA: Use preliminary created pseudo for in LRA elimination subpass
    
    LRA did not extend ira_reg_equiv after generation of a pseudo in
    eliminate_regs_in_insn which might results in LRA crash.  It is better not
    to extend ira_reg_equiv but to use preliminary generated pseudo.  The
    patch implements it.
    
    gcc/ChangeLog:
    
            PR rtl-optimization/98777
            * lra-int.h (lra_pmode_pseudo): New extern.
            * lra.c (lra_pmode_pseudo): New global.
            (lra): Set it up.
            * lra-eliminations.c (eliminate_regs_in_insn): Use it.
    
    gcc/testsuite/ChangeLog:
    
            PR rtl-optimization/98777
            * gcc.target/riscv/pr98777.c: New.
    
    (cherry picked from commit 68ba1039c7daf0485b167fe199ed7e8031158091)

Diff:
---
 gcc/lra-eliminations.c                   |  2 +-
 gcc/lra-int.h                            |  1 +
 gcc/lra.c                                |  4 ++++
 gcc/testsuite/gcc.target/riscv/pr98777.c | 31 +++++++++++++++++++++++++++++++
 4 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/gcc/lra-eliminations.c b/gcc/lra-eliminations.c
index d9e78d44312..7c70cc00f1f 100644
--- a/gcc/lra-eliminations.c
+++ b/gcc/lra-eliminations.c
@@ -1059,7 +1059,7 @@ eliminate_regs_in_insn (rtx_insn *insn, bool replace_p, bool first_p,
 	  && REGNO (reg1) < FIRST_PSEUDO_REGISTER
 	  && REGNO (reg2) >= FIRST_PSEUDO_REGISTER
 	  && GET_MODE (reg1) == Pmode
-	  && !have_addptr3_insn (gen_reg_rtx (Pmode), reg1,
+	  && !have_addptr3_insn (lra_pmode_pseudo, reg1,
 				 XEXP (XEXP (SET_SRC (set), 0), 1)))
 	{
 	  XEXP (XEXP (SET_SRC (set), 0), 0) = op2;
diff --git a/gcc/lra-int.h b/gcc/lra-int.h
index 01fcbfa2664..c24a98fc244 100644
--- a/gcc/lra-int.h
+++ b/gcc/lra-int.h
@@ -326,6 +326,7 @@ extern void lra_register_new_scratch_op (rtx_insn *, int, int);
 extern int lra_new_regno_start;
 extern int lra_constraint_new_regno_start;
 extern int lra_bad_spill_regno_start;
+extern rtx lra_pmode_pseudo;
 extern bitmap_head lra_inheritance_pseudos;
 extern bitmap_head lra_split_regs;
 extern bitmap_head lra_subreg_reload_pseudos;
diff --git a/gcc/lra.c b/gcc/lra.c
index 3543ce3993c..2d40471a4a1 100644
--- a/gcc/lra.c
+++ b/gcc/lra.c
@@ -2306,6 +2306,9 @@ int lra_constraint_new_regno_start;
    it is possible.  */
 int lra_bad_spill_regno_start;
 
+/* A pseudo of Pmode.  */
+rtx lra_pmode_pseudo;
+
 /* Inheritance pseudo regnos before the new spill pass.	 */
 bitmap_head lra_inheritance_pseudos;
 
@@ -2366,6 +2369,7 @@ lra (FILE *f)
 
   lra_dump_file = f;
   lra_asm_error_p = false;
+  lra_pmode_pseudo = gen_reg_rtx (Pmode);
   
   timevar_push (TV_LRA);
 
diff --git a/gcc/testsuite/gcc.target/riscv/pr98777.c b/gcc/testsuite/gcc.target/riscv/pr98777.c
new file mode 100644
index 00000000000..ea2c2f9ca64
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/pr98777.c
@@ -0,0 +1,31 @@
+/* { dg-do compile } */
+/* { dg-options "-fstrict-aliasing -O" } */
+
+typedef struct {
+  _Complex e;
+  _Complex f;
+  _Complex g;
+  _Complex h;
+  _Complex i;
+  _Complex j;
+  _Complex k;
+  _Complex l;
+  _Complex m;
+  _Complex n;
+  _Complex o;
+  _Complex p;
+} Scl16;
+
+Scl16 g1sScl16, g2sScl16, g3sScl16, g4sScl16, g5sScl16, g6sScl16, g7sScl16,
+    g8sScl16, g9sScl16, g10sScl16, g11sScl16, g12sScl16, g13sScl16, g14sScl16,
+    g15sScl16, g16sScl16;
+
+void testvaScl16();
+
+void
+testitScl16() {
+  testvaScl16(g10sScl16, g11sScl16, g12sScl16, g13sScl16, g14sScl16, g1sScl16,
+              g2sScl16, g3sScl16, g4sScl16, g5sScl16, g6sScl16, g7sScl16,
+              g8sScl16, g9sScl16, g10sScl16, g11sScl16, g12sScl16, g13sScl16,
+              g14sScl16, g15sScl16, g16sScl16);
+}


                 reply	other threads:[~2021-06-02 22:26 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20210602222652.F19C039730FA@sourceware.org \
    --to=wirkus@gcc.gnu.org \
    --cc=gcc-cvs@gcc.gnu.org \
    /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).