Hello!

Attached patch prevents compute_bb_for_insn to calculate BB for
barrier RTXes. This is in fact the same approach all other
*_bb_for_insn use.

The patch is bordering on obvious.

2012-09-02  Uros Bizjak  <ubiz...@gmail.com>

        PR rtl-optimization/54455
        * cfgrtl.c (compute_bb_for_insn): Do not compute BB for barrier RTXes.

testsuite/ChangeLog:

2012-09-02  Uros Bizjak  <ubiz...@gmail.com>

        PR rtl-optimization/54455
        * gcc.target/i386/pr54455.c: New test.

Bootstrapped and regression tested on x86_64-pc-linux-gnu {-m32}.

OK for mainline and 4.7?

Uros.
Index: cfgrtl.c
===================================================================
--- cfgrtl.c    (revision 190857)
+++ cfgrtl.c    (working copy)
@@ -415,7 +415,8 @@ compute_bb_for_insn (void)
 
       for (insn = BB_HEAD (bb); ; insn = NEXT_INSN (insn))
        {
-         BLOCK_FOR_INSN (insn) = bb;
+         if (!BARRIER_P (insn))
+           BLOCK_FOR_INSN (insn) = bb;
          if (insn == end)
            break;
        }
Index: testsuite/gcc.target/i386/pr54455.c
===================================================================
--- testsuite/gcc.target/i386/pr54455.c (revision 0)
+++ testsuite/gcc.target/i386/pr54455.c (working copy)
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-fschedule-insns -fselective-scheduling --param 
max-sched-extend-regions-iters=8" } */
+
+static inline void
+__attribute__ ((always_inline))
+foo (void)
+{
+  asm goto ("" : : "r" (1), "r" (2) : "memory" : lab);
+  lab:;
+}
+
+void bar (void)
+{
+  foo ();
+  foo ();
+}

Reply via email to