<div dir="ltr">IIRC, this is a long-standing issue and some of our game teams that use coroutine-like job systems run into this as well. My recollection is that it is a big pile of work to fix this in the llvm backend. The workaround is to do all thread-local access via functions that access thread-local state and do not do any context-switching (and these functions must not be inlined, obviously).<div><br></div><div>-- Sean Silva<br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Feb 1, 2016 at 9:25 AM, Juan Wajnerman via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hi everyone,<div><br></div><div>I’m working on adding multithreading support to our programming language (<a href="http://crystal-lang.org" target="_blank">http://crystal-lang.org</a>) and I’m facing an issue with thread local variables.</div><div>Since the language relies heavily on coroutines, basically the problem is that a function could start running on a thread, get suspended and continue running on a different thread.</div><div><br></div><div>So, for example, if I have this pseudocoe:</div><div><br></div><div>1. read / write thread local variable</div><div>2. do some context switch, might resume in a different thread</div><div>3. read / write same thread local variable</div><div><br></div><div>Now the real issue is that when compiling with optimizations, LLVM wont re-read the thread local address, and instead it will rely on the address stored on some register.</div><div><br></div><div>The question is: is there any way to force LLVM to re-read the thread local address each time? Or even better, is there any way to give hints about where the cached address is not reliable anymore?</div><div><br></div><div>Best regards!</div><span class="HOEnZb"><font color="#888888"><div>- Juan</div><div><br></div><div><br></div></font></span></div><br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div></div></div>