http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55153



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;

       else

     {

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.

Reply via email to