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: