emit-rtl.c (need_atomic_barrier_p): Mask memory model argument with MEMMODEL_MASK...
authorUros Bizjak <uros@gcc.gnu.org>
Wed, 16 Jan 2013 07:10:21 +0000 (08:10 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Wed, 16 Jan 2013 07:10:21 +0000 (08:10 +0100)
* emit-rtl.c (need_atomic_barrier_p): Mask memory model argument
with MEMMODEL_MASK before comparing with MEMMODEL_* memory types.
* optabs.c (maybe_emit_sync_lock_test_and_set): Ditto.
(expand_mem_thread_fence): Ditto.
(expand_mem_signal_fence): Ditto.
(expand_atomic_load): Ditto.
(expand_atomic_store): Ditto.

From-SVN: r195228

gcc/ChangeLog
gcc/emit-rtl.c
gcc/optabs.c

index 6f7441e8b237e204cb9af1726d9dcdab3bd61902..1f66518ee45cdf3db9d8d92611a6c5c382a26a09 100644 (file)
@@ -1,3 +1,13 @@
+2013-01-15  Uros Bizjak  <ubizjak@gmail.com>
+
+       * emit-rtl.c (need_atomic_barrier_p): Mask memory model argument
+       with MEMMODEL_MASK before comparing with MEMMODEL_* memory types.
+       * optabs.c (maybe_emit_sync_lock_test_and_set): Ditto.
+       (expand_mem_thread_fence): Ditto.
+       (expand_mem_signal_fence): Ditto.
+       (expand_atomic_load): Ditto.
+       (expand_atomic_store): Ditto.
+
 2013-01-16  Alexandre Oliva <aoliva@redhat.com>
 
        PR rtl-optimization/55547
 
 2013-01-14  Tejas Belagod  <tejas.belagod@arm.com>
 
-       * config/aarch64/aarch64-simd.md (*aarch64_simd_ld1r<mode>): New. 
-       * config/aarch64/iterators.md (VALLDI): New. 
+       * config/aarch64/aarch64-simd.md (*aarch64_simd_ld1r<mode>): New.
+       * config/aarch64/iterators.md (VALLDI): New.
 
 2012-01-14  Uros Bizjak  <ubizjak@gmail.com>
            Andi Kleen  <ak@linux.intel.com>
index 2987bc9bb8838940f7fe2ff6ae4f2078af4381d3..f997e5d319bcd6051cf6e2fc9daa2ce8582193de 100644 (file)
@@ -6019,7 +6019,7 @@ insn_file (const_rtx insn)
 bool
 need_atomic_barrier_p (enum memmodel model, bool pre)
 {
-  switch (model)
+  switch (model & MEMMODEL_MASK)
     {
     case MEMMODEL_RELAXED:
     case MEMMODEL_CONSUME:
index e637a1e9cafa5340b54508258bd361acc1a1f8d6..8a3d3a921abb49ec9aa839006eb5c556f309f7ed 100644 (file)
@@ -7008,9 +7008,9 @@ maybe_emit_sync_lock_test_and_set (rtx target, rtx mem, rtx val,
      exists, and the memory model is stronger than acquire, add a release 
      barrier before the instruction.  */
 
-  if (model == MEMMODEL_SEQ_CST
-      || model == MEMMODEL_RELEASE
-      || model == MEMMODEL_ACQ_REL)
+  if ((model & MEMMODEL_MASK) == MEMMODEL_SEQ_CST
+      || (model & MEMMODEL_MASK) == MEMMODEL_RELEASE
+      || (model & MEMMODEL_MASK) == MEMMODEL_ACQ_REL)
     expand_mem_thread_fence (model);
 
   if (icode != CODE_FOR_nothing)
@@ -7388,7 +7388,7 @@ expand_mem_thread_fence (enum memmodel model)
 {
   if (HAVE_mem_thread_fence)
     emit_insn (gen_mem_thread_fence (GEN_INT (model)));
-  else if (model != MEMMODEL_RELAXED)
+  else if ((model & MEMMODEL_MASK) != MEMMODEL_RELAXED)
     {
       if (HAVE_memory_barrier)
        emit_insn (gen_memory_barrier ());
@@ -7412,7 +7412,7 @@ expand_mem_signal_fence (enum memmodel model)
 {
   if (HAVE_mem_signal_fence)
     emit_insn (gen_mem_signal_fence (GEN_INT (model)));
-  else if (model != MEMMODEL_RELAXED)
+  else if ((model & MEMMODEL_MASK) != MEMMODEL_RELAXED)
     {
       /* By default targets are coherent between a thread and the signal
         handler running on the same thread.  Thus this really becomes a
@@ -7467,7 +7467,7 @@ expand_atomic_load (rtx target, rtx mem, enum memmodel model)
     target = gen_reg_rtx (mode);
 
   /* For SEQ_CST, emit a barrier before the load.  */
-  if (model == MEMMODEL_SEQ_CST)
+  if ((model & MEMMODEL_MASK) == MEMMODEL_SEQ_CST)
     expand_mem_thread_fence (model);
 
   emit_move_insn (target, mem);
@@ -7513,7 +7513,7 @@ expand_atomic_store (rtx mem, rtx val, enum memmodel model, bool use_release)
          if (maybe_expand_insn (icode, 2, ops))
            {
              /* lock_release is only a release barrier.  */
-             if (model == MEMMODEL_SEQ_CST)
+             if ((model & MEMMODEL_MASK) == MEMMODEL_SEQ_CST)
                expand_mem_thread_fence (model);
              return const0_rtx;
            }
@@ -7540,7 +7540,7 @@ expand_atomic_store (rtx mem, rtx val, enum memmodel model, bool use_release)
   emit_move_insn (mem, val);
 
   /* For SEQ_CST, also emit a barrier after the store.  */
-  if (model == MEMMODEL_SEQ_CST)
+  if ((model & MEMMODEL_MASK) == MEMMODEL_SEQ_CST)
     expand_mem_thread_fence (model);
 
   return const0_rtx;