llvm.memory.barrier for __sync_syncronize

llvm-svn: 47205
diff --git a/llvm-gcc-4.2/gcc/llvm-convert.cpp b/llvm-gcc-4.2/gcc/llvm-convert.cpp
index c22791d..7d206b1 100644
--- a/llvm-gcc-4.2/gcc/llvm-convert.cpp
+++ b/llvm-gcc-4.2/gcc/llvm-convert.cpp
@@ -4293,6 +4293,18 @@
     return true;
   }
     
+  case BUILT_IN_SYNCHRONIZE: {
+    // We assume like gcc appears to, that this only applies to cached memory.
+    Value* C[5];
+    C[0] = C[1] = C[2] = C[3] = ConstantInt::get(Type::Int1Ty, 1);
+    C[4] = ConstantInt::get(Type::Int1Ty, 0);
+   
+    Builder.CreateCall(Intrinsic::getDeclaration(TheModule, 
+                                                 Intrinsic::memory_barrier),
+                       C, C + 5);
+    return true;
+  }
+
 #if 1  // FIXME: Should handle these GCC extensions eventually.
     case BUILT_IN_APPLY_ARGS:
     case BUILT_IN_APPLY: