<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>What is the downside of the currently generated IR? There ain't nothin' wrong with bitcasts, IMO. <br><br>-Filip</div><div><br>On May 24, 2014, at 2:17 PM, Philip Reames <<a href="mailto:listmail@philipreames.com">listmail@philipreames.com</a>> wrote:<br><br></div><blockquote type="cite"><div>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
Looking through the documentation, I discovered that atomic loads
and stores are only supported for integer types. Can anyone provide
some background on this? Why is this true?<br>
<br>
Currently, given code:<br>
std::atomic<float> aFloat;<br>
void foo() {<br>
float f = atomic_load(&aFloat);<br>
..<br>
}<br>
<br>
Clang generates code like:<code></code><br>
%"struct.std::atomic.2" = type { float }<br>
@aFloat = global %"struct.std::atomic.2" zeroinitializer, align 4<br>
<br>
define void @foo() {<br>
%1 = load atomic i32* bitcast (%"struct.std::atomic.2"* @aFloat to
i32*) seq_cst, align 4<br>
%2 = bitcast i32 %1 to float<br>
...<br>
}<br>
<br>
This seems less than ideal. I would expect that we might have to
desugar floats into integer & cast operations in the backend,
but why is this imposed on the frontend? <br>
<br>
More generally, is there anyone who is knowledgeable and/or working
on atomics and synchronization in LLVM? I've got a number of
questions w.r.t. semantics and have found a number of what I believe
to be missed optimizations. I'm happy to file the later, but I'd
like to talk them over with a knowledgeable party first.<br>
<br>
Philip<br>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>LLVM Developers mailing list</span><br><span><a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a> <a href="http://llvm.cs.uiuc.edu">http://llvm.cs.uiuc.edu</a></span><br><span><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a></span><br></div></blockquote></body></html>