public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] loop-invariant: JUMP_INSNs aren't loop invariant [PR97954]
@ 2020-12-01  8:48 Jakub Jelinek
  2020-12-01 10:06 ` Richard Biener
  0 siblings, 1 reply; 2+ messages in thread
From: Jakub Jelinek @ 2020-12-01  8:48 UTC (permalink / raw)
  To: Richard Biener, Jeff Law; +Cc: gcc-patches

Hi!

The following testcase ICEs because loop invariant motion moves asm goto
with a single output as invariant.
Normally, jumps aren't really moved, because if they are single set,
they have their SET_DEST (pc) and pc_rtx has VOIDmode on which one of the
functions find_invariant_insn calls bails out.  The code already punts on
insns that can throw or trap.  And for asm goto without outputs, it isn't
single set, or asm goto with two or more outputs it isn't single set either.

Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for
trunk?

2020-12-01  Jakub Jelinek  <jakub@redhat.com>

	PR rtl-optimization/97954
	* loop-invariant.c (find_invariant_insn): Punt on JUMP_P insns.

	* gcc.dg/pr97954.c: New test.

--- gcc/loop-invariant.c.jj	2020-01-12 11:54:36.000000000 +0100
+++ gcc/loop-invariant.c	2020-11-30 09:56:37.022696142 +0100
@@ -1099,6 +1099,10 @@ find_invariant_insn (rtx_insn *insn, boo
   if (HAVE_cc0 && sets_cc0_p (insn))
     return;
 
+  /* Jumps have control flow side-effects.  */
+  if (JUMP_P (insn))
+    return;
+
   set = single_set (insn);
   if (!set)
     return;
--- gcc/testsuite/gcc.dg/pr97954.c.jj	2020-11-30 10:31:54.870891248 +0100
+++ gcc/testsuite/gcc.dg/pr97954.c	2020-11-30 10:31:08.875407984 +0100
@@ -0,0 +1,12 @@
+/* PR rtl-optimization/97954 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int
+foo (void)
+{
+  int x;
+ lab:
+  asm goto ("": "=r" (x) : : : lab);
+  return x;
+}

	Jakub


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-12-01 10:06 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-01  8:48 [PATCH] loop-invariant: JUMP_INSNs aren't loop invariant [PR97954] Jakub Jelinek
2020-12-01 10:06 ` Richard Biener

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