<div class="gmail_quote"><div dir="ltr">On Tue, Feb 23, 2016, 04:50 Joerg Sonnenberger via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
You can get the TCB address from %fs:0 or %gs:0 on x86. But that's<br>
suboptimal for the purpose here as you need to do a second load with the<br>
resulting pointer, when you could have gotten it from %fs:$magic_offset<br>
or %gs:$magic_offset in first place.<br></blockquote></div><div><br></div><div>Isn't LLVM already combining a register load with an offset (0) followed by another offset-load? If it's currently not implemented, it seems quite useful and generic, and we should just implmenet it?</div><div><br></div><div>If for some reason it can't be done, we can still pass the offset into the intrinsic, as ISD::GlobalTLSAddress is designed.</div><div><br></div><div>ISD::GlobalTLSAddress is actually quite close to what we want - except for a GlobalValue it requires. Maybe we can make that requirement optional? E.g. if a nullptr is passed in as the GlobalValue, generate fs:offset, rather than fs:@a+ offset.</div>