public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r11-9306] PR middle-end/103059: reload: Also accept ASHIFT with indexed addressing
@ 2021-11-24 13:37 Maciej W. Rozycki
  0 siblings, 0 replies; only message in thread
From: Maciej W. Rozycki @ 2021-11-24 13:37 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:78421afafde5156d6d4c6c7073653e4b92f88e3d

commit r11-9306-g78421afafde5156d6d4c6c7073653e4b92f88e3d
Author: Maciej W. Rozycki <macro@embecosm.com>
Date:   Wed Nov 24 13:15:06 2021 +0000

    PR middle-end/103059: reload: Also accept ASHIFT with indexed addressing
    
    Correct a `vax-netbsdelf' target regression ultimately caused by commit
    c605a8bf9270 ("VAX: Accept ASHIFT in address expressions") (needed for
    LRA) and as of commit 4a960d548b7d ("Avoid invalid loop transformations
    in jump threading registry.") causing a build error in libgcc:
    
    .../libgcc/libgcov-driver.c: In function 'gcov_do_dump':
    .../libgcc/libgcov-driver.c:686:1: error: insn does not satisfy its constraints:
      686 | }
          | ^
    (insn 2051 2050 2052 185 (set (reg/f:SI 0 %r0 [555])
            (plus:SI (ashift:SI (mem/c:SI (plus:SI (reg/f:SI 13 %fp)
                            (const_int -28 [0xffffffffffffffe4])) [40 %sfp+-28 S4 A32])
                    (const_int 3 [0x3]))
                (plus:SI (reg/v/f:SI 9 %r9 [orig:176 fn_buffer ] [176])
                    (const_int 24 [0x18])))) ".../libgcc/libgcov-driver.c":172:40 614 {movaddrdi}
         (nil))
    during RTL pass: postreload
    .../libgcc/libgcov-driver.c:686:1: internal compiler error: in extract_constrain_insn, at recog.c:2670
    0x1122a5ff _fatal_insn(char const*, rtx_def const*, char const*, int, char const*)
            .../gcc/rtl-error.c:108
    0x1122a697 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
            .../gcc/rtl-error.c:118
    0x111b5f2f extract_constrain_insn(rtx_insn*)
            .../gcc/recog.c:2670
    0x11143eef reload_cse_simplify_operands
            .../gcc/postreload.c:407
    0x11142fdb reload_cse_simplify
            .../gcc/postreload.c:132
    0x11143533 reload_cse_regs_1
            .../gcc/postreload.c:238
    0x11142ce7 reload_cse_regs
            .../gcc/postreload.c:66
    0x1114af33 execute
            .../gcc/postreload.c:2355
    Please submit a full bug report,
    with preprocessed source if appropriate.
    Please include the complete backtrace with any bug report.
    See <https://gcc.gnu.org/bugs/> for instructions.
    
    This is because reload does not recognize the ASHIFT form of scaled
    indexed addressing that the offending commit enabled the backend to
    produce, and as seen in the RTL above lets the pseudo holding the
    index part become the original memory reference rather than reloading it
    into a hard register.
    
    Fix it then by adding said form to reload, removing the build failure
    and numerous similar regressions throughout `vax-netbsdelf' test suites
    run with the source as at right before the build regression.
    
    Cf. <https://gcc.gnu.org/pipermail/gcc-patches/2021-March/567256.html>,
    and commit 6b3034eaba83 ("lra: Canonicalize mult to shift in address
    reloads").
    
            gcc/
            PR middle-end/103059
            * reload.c (find_reloads_address_1): Also accept the ASHIFT form
            of indexed addressing.
            (find_reloads): Adjust accordingly.
    
    (cherry picked from commit 29e1cbdc0c6e7d3de10478ef2b881900545c2a55)

Diff:
---
 gcc/reload.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/gcc/reload.c b/gcc/reload.c
index e18e27c2405..2223d9cdbbc 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -2874,10 +2874,11 @@ find_reloads (rtx_insn *insn, int replace, int ind_levels, int live_known,
 				    i, operand_type[i], ind_levels, insn);
 
 	  /* If we now have a simple operand where we used to have a
-	     PLUS or MULT, re-recognize and try again.  */
+	     PLUS or MULT or ASHIFT, re-recognize and try again.  */
 	  if ((OBJECT_P (*recog_data.operand_loc[i])
 	       || GET_CODE (*recog_data.operand_loc[i]) == SUBREG)
 	      && (GET_CODE (recog_data.operand[i]) == MULT
+		  || GET_CODE (recog_data.operand[i]) == ASHIFT
 		  || GET_CODE (recog_data.operand[i]) == PLUS))
 	    {
 	      INSN_CODE (insn) = -1;
@@ -5600,7 +5601,8 @@ find_reloads_address_1 (machine_mode mode, addr_space_t as,
 	    return 1;
 	  }
 
-	if (code0 == MULT || code0 == SIGN_EXTEND || code0 == TRUNCATE
+	if (code0 == MULT || code0 == ASHIFT
+	    || code0 == SIGN_EXTEND || code0 == TRUNCATE
 	    || code0 == ZERO_EXTEND || code1 == MEM)
 	  {
 	    find_reloads_address_1 (mode, as, orig_op0, 1, PLUS, SCRATCH,
@@ -5611,7 +5613,8 @@ find_reloads_address_1 (machine_mode mode, addr_space_t as,
 				    insn);
 	  }
 
-	else if (code1 == MULT || code1 == SIGN_EXTEND || code1 == TRUNCATE
+	else if (code1 == MULT || code1 == ASHIFT
+		 || code1 == SIGN_EXTEND || code1 == TRUNCATE
 		 || code1 == ZERO_EXTEND || code0 == MEM)
 	  {
 	    find_reloads_address_1 (mode, as, orig_op0, 0, PLUS, code1,


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-11-24 13:37 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-24 13:37 [gcc r11-9306] PR middle-end/103059: reload: Also accept ASHIFT with indexed addressing Maciej W. Rozycki

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).