[llvm-commits] [dragonegg] r94886 - /dragonegg/trunk/llvm-convert.cpp

Duncan Sands baldrick at free.fr
Sat Jan 30 05:58:33 PST 2010


Author: baldrick
Date: Sat Jan 30 07:58:33 2010
New Revision: 94886

URL: http://llvm.org/viewvc/llvm-project?rev=94886&view=rev
Log:
Port llvm-gcc commit 93409 (evancheng):
Add missing memory barrier after binary atomic builtin. r74403 apparently left this out by mistake. x86 target will optimize it away but it's looking for the barrier after the operation.

Modified:
    dragonegg/trunk/llvm-convert.cpp

Modified: dragonegg/trunk/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/llvm-convert.cpp?rev=94886&r1=94885&r2=94886&view=diff

==============================================================================
--- dragonegg/trunk/llvm-convert.cpp (original)
+++ dragonegg/trunk/llvm-convert.cpp Sat Jan 30 07:58:33 2010
@@ -3362,10 +3362,20 @@
 #else
   EmitMemoryBarrier(true, true, true, true, true);
 #endif
+
   Value *Result =
     Builder.CreateCall(Intrinsic::getDeclaration(TheModule,  id,
                                                  Ty, 2),
     C, C + 2);
+
+  // The gcc builtins are also full memory barriers.
+  // FIXME: __sync_lock_test_and_set and __sync_lock_release require less.
+#if defined(TARGET_ARM) && defined(CONFIG_DARWIN_H)
+  EmitMemoryBarrier(true, true, true, true, false);
+#else
+  EmitMemoryBarrier(true, true, true, true, true);
+#endif
+
   Result = Builder.CreateIntToPtr(Result, ResultTy);
   return Result;
 }





More information about the llvm-commits mailing list