[Bug rtl-optimization/55153] [4.8 Regression] ICE: in begin_move_insn, at sched-ebb.c:205 with -fsched2-use-superblocks and __builtin_prefetch

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Nov 7 11:28:00 GMT 2012


Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-11-07 11:28:13 UTC ---
I've tried to "fix" this similarly to PR48721:
--- sched-deps.c.jj2    2012-10-17 17:18:21.000000000 +0200
+++ sched-deps.c    2012-11-07 12:15:05.246124552 +0100
@@ -2907,7 +2907,10 @@ sched_analyze_insn (struct deps_desc *de
       rtx next;
       next = next_nonnote_nondebug_insn (insn);
-      if (next && BARRIER_P (next))
+      /* Don't schedule anything after an unconditional return jump.  */
+      if (returnjump_p (insn) && ! condjump_p (insn))
+    reg_pending_barrier = TRUE_BARRIER;
+      else if (next && BARRIER_P (next))
     reg_pending_barrier = MOVE_BARRIER;
but that didn't help.  The difference between reload and LRA seems to be just
in that old reload emitted a deleted note after the prefetch for some reason,
and after adding simple_return jump and barrier after it that note was still
following the barrier, while with LRA there is no such deleted note at the end.
Still the scheduler seems to attempt to do DCE of the prefetch (why?  Isn't the
prefetch meaningful on its own?).  Vlad, can you please have a look?  Thanks.

More information about the Gcc-bugs mailing list