re PR target/48126 (arm_output_sync_loop: misplaced memory barrier)
authorDavid Alan Gilbert <david.gilbert@linaro.org>
Fri, 14 Oct 2011 14:38:42 +0000 (14:38 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Fri, 14 Oct 2011 14:38:42 +0000 (14:38 +0000)
gcc/
2011-10-14  David Alan Gilbert  <david.gilbert@linaro.org>

PR target/48126
* config/arm/arm.c (arm_output_sync_loop): Move label before barrier.

From-SVN: r179980

gcc/ChangeLog
gcc/config/arm/arm.c

index 6a141e527bd31920a99a40cbc7818879146f616c..83e5db56beebd347f6f325028dea66401c32dc0a 100644 (file)
@@ -1,3 +1,8 @@
+2011-10-14  David Alan Gilbert  <david.gilbert@linaro.org>
+
+       PR target/48126
+       * config/arm/arm.c (arm_output_sync_loop): Move label before barrier.
+
 2011-10-14  David Alan Gilbert  <david.gilbert@linaro.org>
 
        * config/arm/arm.h (TARGET_HAVE_DMB_MCR): MCR Not available in Thumb1.
index ad733dad1d0e6387fb0135e210dbadfd0b7aaa1f..93386f036d305ce9c80735c09d03ebfd454c4c88 100644 (file)
@@ -24217,8 +24217,11 @@ arm_output_sync_loop (emit_f emit,
        }
     }
 
-  arm_process_output_memory_barrier (emit, NULL);
+  /* Note: label is before barrier so that in cmp failure case we still get
+     a barrier to stop subsequent loads floating upwards past the ldrex
+     PR target/48126.  */
   arm_output_asm_insn (emit, 1, operands, "%sLSYB%%=:", LOCAL_LABEL_PREFIX);
+  arm_process_output_memory_barrier (emit, NULL);
 }
 
 static rtx