public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jakub Jelinek <jakub@redhat.com>
To: Segher Boessenkool <segher@kernel.crashing.org>,
	Richard Biener <rguenther@suse.de>,
	Jeff Law <jeffreyalaw@gmail.com>,
	Richard Sandiford <richard.sandiford@arm.com>
Cc: gcc-patches@gcc.gnu.org
Subject: [PATCH] combine: Special case set_noop_p in two spots
Date: Fri, 28 Mar 2025 12:20:18 +0100	[thread overview]
Message-ID: <Z+aF8pEePd6K5xKf@tucnak> (raw)

Hi!

Here is the incremental patch I was talking about.
For noop sets, we don't need to test much, they can go to i2
unless that would violate i3 JUMP condition.

With this the try_combine on the pr119291.c testcase doesn't fail,
but succeeds and we get
(insn 22 21 23 4 (set (pc)
        (pc)) "pr119291.c":27:15 2147483647 {NOOP_MOVE}
     (nil))
(insn 23 22 24 4 (set (reg/v:SI 117 [ e ])
        (reg/v:SI 116 [ e ])) 96 {*movsi_internal}
     (expr_list:REG_DEAD (reg/v:SI 116 [ e ])
        (nil)))
(note 24 23 25 4 NOTE_INSN_DELETED)
(insn 25 24 26 4 (set (reg/v:SI 116 [ e ])
        (const_int 0 [0])) "pr119291.c":28:13 96 {*movsi_internal}
     (nil))
(note 26 25 27 4 NOTE_INSN_DELETED)
(insn 27 26 28 4 (set (reg:DI 128 [ _9 ])
        (const_int 0 [0])) "pr119291.c":28:13 95 {*movdi_internal}
     (nil))
after it.

Ok for trunk if this passes bootstrap/regtest?

2025-03-28  Jakub Jelinek  <jakub@redhat.com>

	* combine.cc (try_combine): Sets which satisfy set_noop_p can go
	to i2 unless i3 is a jump and the other set is not.

--- gcc/combine.cc.jj	2025-03-28 11:44:15.491458700 +0100
+++ gcc/combine.cc	2025-03-28 12:11:49.505835983 +0100
@@ -4017,13 +4017,14 @@ try_combine (rtx_insn *i3, rtx_insn *i2,
 	 in i3, so we need to make sure that we won't wrongly hoist a SET
 	 to i2 that would conflict with a death note present in there, or
 	 would have its dest modified or used between i2 and i3.  */
-      if (!modified_between_p (SET_SRC (set1), i2, i3)
-	  && !(REG_P (SET_DEST (set1))
-	       && find_reg_note (i2, REG_DEAD, SET_DEST (set1)))
-	  && !(GET_CODE (SET_DEST (set1)) == SUBREG
-	       && find_reg_note (i2, REG_DEAD,
-				 SUBREG_REG (SET_DEST (set1))))
-	  && !reg_used_between_p (SET_DEST (set1), i2, i3)
+      if ((set_noop_p (set1)
+	   || (!modified_between_p (SET_SRC (set1), i2, i3)
+	       && !(REG_P (SET_DEST (set1))
+		    && find_reg_note (i2, REG_DEAD, SET_DEST (set1)))
+	       && !(GET_CODE (SET_DEST (set1)) == SUBREG
+		    && find_reg_note (i2, REG_DEAD,
+				      SUBREG_REG (SET_DEST (set1))))
+	       && !reg_used_between_p (SET_DEST (set1), i2, i3)))
 	  /* If I3 is a jump, ensure that set0 is a jump so that
 	     we do not create invalid RTL.  */
 	  && (!JUMP_P (i3) || SET_DEST (set0) == pc_rtx)
@@ -4032,13 +4033,14 @@ try_combine (rtx_insn *i3, rtx_insn *i2,
 	  newi2pat = set1;
 	  newpat = set0;
 	}
-      else if (!modified_between_p (SET_SRC (set0), i2, i3)
-	       && !(REG_P (SET_DEST (set0))
-		    && find_reg_note (i2, REG_DEAD, SET_DEST (set0)))
-	       && !(GET_CODE (SET_DEST (set0)) == SUBREG
-		    && find_reg_note (i2, REG_DEAD,
-				      SUBREG_REG (SET_DEST (set0))))
-	       && !reg_used_between_p (SET_DEST (set0), i2, i3)
+      else if ((set_noop_p (set0)
+		|| (!modified_between_p (SET_SRC (set0), i2, i3)
+		    && !(REG_P (SET_DEST (set0))
+			 && find_reg_note (i2, REG_DEAD, SET_DEST (set0)))
+		    && !(GET_CODE (SET_DEST (set0)) == SUBREG
+			 && find_reg_note (i2, REG_DEAD,
+					   SUBREG_REG (SET_DEST (set0))))
+		    && !reg_used_between_p (SET_DEST (set0), i2, i3)))
 	       /* If I3 is a jump, ensure that set1 is a jump so that
 		  we do not create invalid RTL.  */
 	       && (!JUMP_P (i3) || SET_DEST (set1) == pc_rtx)

	Jakub


             reply	other threads:[~2025-03-28 11:20 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-28 11:20 Jakub Jelinek [this message]
2025-03-29  8:28 ` Jakub Jelinek
2025-03-30  0:51 ` Jeff Law
2025-03-30 18:18   ` Jakub Jelinek
2025-04-28  7:26 ` Patch ping (Re: [PATCH] combine: Special case set_noop_p in two spots) Jakub Jelinek
2025-04-30 19:20   ` Jeff Law

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=Z+aF8pEePd6K5xKf@tucnak \
    --to=jakub@redhat.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jeffreyalaw@gmail.com \
    --cc=rguenther@suse.de \
    --cc=richard.sandiford@arm.com \
    --cc=segher@kernel.crashing.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).