<p dir="ltr">That construct is just a memory barrier that applies to escaped objects. Dead stores to unescaped locals for example will be removed during SSA conversion.</p>
<p dir="ltr">Sent from phone</p>
<div class="gmail_quote">On Aug 1, 2015 9:29 PM, "Jeffrey Walton" <<a href="mailto:noloader@gmail.com">noloader@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">GCC disables optimizations in a function if it encounters inline<br>
assembly. That means we can use a memory barrier to ensure dead stores<br>
are not optimized out:<br>
<br>
    delete m_ptr;<br>
    m_ptr = NULL:<br>
<br>
    __asm__ __volatile__ ("" ::: "memory");<br>
<br>
Clang defines __GNUC__, but its not clear to me if the same behavior<br>
is present. Looking at Language Compatibility at<br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_compatibility.html&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=CnzuN65ENJ1H9py9XLiRvC_UQz6u3oG6GUNn7_wosSM&m=A2AAohOQP0la1Yt6akmKKhI8rKMikd631RG8H6vyKkU&s=uA2mV0WGcSWzqTUIJO8PCiRVl0hlRStlaOchl0kGUWg&e=" rel="noreferrer" target="_blank">http://clang.llvm.org/compatibility.html</a>, there is no discussion of<br>
the behavior.<br>
<br>
Does inline assembly or a memory barrier tame the optimizer in a<br>
function so that dead stores are not removed?<br>
<br>
Thanks in advance.<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
</blockquote></div>