<div dir="ltr" style="text-align: left;"><div class="source-cpp" style="font-family: monospace;"><pre><span class="kw4">Hi,<br><br>I got a solution to use intrinsics without the need of builtin functions from:<br><a href="http://wiki.llvm.org/HowTo:_Call_LLVM_intrinsics_from_C_code">http://wiki.llvm.org/HowTo:_Call_LLVM_intrinsics_from_C_code</a><br>
<br>Do you know if this approach is still valid ?<br><br>The example is the following:<br><br>  extern</span> <span class="st0">"C"</span> <span class="kw4">int</span> llvm_cas<span class="br0">(</span><span class="kw4">volatile</span> <span class="kw4">int</span><span class="sy2">*</span>, <span class="kw4">int</span>, <span class="kw4">int</span><span class="br0">)</span> asm<span class="br0">(</span><span class="st0">"llvm.atomic.cmp.swap.i32"</span><span class="br0">)</span><span class="sy4">;</span><br>
 <br><span class="kw4">  int</span> foo<span class="br0">(</span><span class="kw4">volatile</span> <span class="kw4">int</span><span class="sy2">*</span> add, <span class="kw4">int</span> from, <span class="kw4">int</span> to<span class="br0">)</span> <span class="br0">{</span>                                  <br>
      <span class="kw1">return</span> llvm_cas<span class="br0">(</span>add, from, to<span class="br0">)</span><span class="sy4">;</span>                                             <br><span class="br0">  }<br><br>And the expected llvm output is:<br>
</span><br>  define i32 @_Z3fooPViii(i32* %add, i32 %from, i32 %to) {<br>  entry:<br>   %0 = tail call i32 @llvm.atomic.cmp.swap.i32(i32* %add, i32 %from, i32 %to); <i32> [#uses=1]<br>    ret i32 %0<br>  }<br><br>  declare i32 @llvm.atomic.cmp.swap.i32(i32*, i32, i32)<br>
<span class="br0"><br>However, when I compile the same code, it generates the following call:<br><br>   %call = tail call i32 @"\01llvm.atomic.cmp.swap.i32"(i32* %add, i32 %from, i32 %to) nounwind optsize<br><br>
which looks to me a regular call and not a direct call to the intrinsic.<br><br>   Thank you,<br><br>  Damien<br></span></pre></div></div>