<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 21, 2014 at 3:08 PM, Warren Hunt <span dir="ltr"><<a href="mailto:whunt@google.com" target="_blank">whunt@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div id=":1v6" class="a3s" style="overflow:hidden">Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=201901&r1=201900&r2=201901&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=201901&r1=201900&r2=201901&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Fri Feb 21 17:08:53 2014<br>
@@ -1500,6 +1500,42 @@ RValue CodeGenFunction::EmitBuiltinExpr(<br>
     return RValue::get(EmitLValue(E->getArg(0)).getAddress());<br>
   case Builtin::BI__noop:<br>
     return RValue::get(0);<br>
+  case Builtin::BI_InterlockedCompareExchange: {<br>
+    AtomicCmpXchgInst *CXI = Builder.CreateAtomicCmpXchg(<br>
+        EmitScalarExpr(E->getArg(0)),<br>
+        EmitScalarExpr(E->getArg(2)),<br>
+        EmitScalarExpr(E->getArg(1)),<br>
+        SequentiallyConsistent);<br>
+      CXI->setVolatile(true);<br>
+      return RValue::get(CXI);<br>
+  }<br>
+  case Builtin::BI_InterlockedIncrement: {<br>
+    AtomicRMWInst *RMWI = Builder.CreateAtomicRMW(<br>
+      AtomicRMWInst::Add,<br>
+      EmitScalarExpr(E->getArg(0)),<br>
+      ConstantInt::get(Int32Ty, 1),<br>
+      llvm::SequentiallyConsistent);<br>
+    RMWI->setVolatile(true);<br>
+    return RValue::get(Builder.CreateAdd(RMWI, ConstantInt::get(Int32Ty, 1)));<br>
+  }<br>
+  case Builtin::BI_InterlockedDecrement: {<br>
+    AtomicRMWInst *RMWI = Builder.CreateAtomicRMW(<br>
+      AtomicRMWInst::Sub,<br>
+      EmitScalarExpr(E->getArg(0)),<br>
+      ConstantInt::get(Int32Ty, 1),<br>
+      llvm::SequentiallyConsistent);<br>
+    RMWI->setVolatile(true);<br>
+    return RValue::get(Builder.CreateSub(RMWI, ConstantInt::get(Int32Ty, 1)));<br>
+  }<br>
+  case Builtin::BI_InterlockedExchangeAdd: {<br>
+    AtomicRMWInst *RMWI = Builder.CreateAtomicRMW(<br>
+      AtomicRMWInst::Add,<br>
+      EmitScalarExpr(E->getArg(0)),<br>
+      EmitScalarExpr(E->getArg(1)),<br>
+      llvm::SequentiallyConsistent);<br>
+    RMWI->setVolatile(true);<br>
+    return RValue::get(RMWI);<br>
+  }</div></blockquote></div><br>Huh??? This doesn't seem to have anything to do with _mm_prefetch....</div></div>