<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Hi Hans and Kostya,</div><div class=""><br class=""></div><div class="">Can we merge this into the 4.0 branch?</div><div class=""><br class=""></div><div class="">This affects only the swiftcalling convention and swifterror so should be reasonably safe.</div><div class=""><br class=""></div><div class="">Thank you!</div><div><br class=""><blockquote type="cite" class=""><div class="">Begin forwarded message:</div><br class="Apple-interchange-newline"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">From: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class="">Arnold Schwaighofer via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a>><br class=""></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">Subject: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class=""><b class="">[llvm] r295215 - ThreadSanitizer: don't track swifterror memory addresses</b><br class=""></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">Date: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class="">February 15, 2017 at 10:57:07 AM PST<br class=""></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">To: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class=""><a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class=""></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">Reply-To: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class="">Arnold Schwaighofer <<a href="mailto:aschwaighofer@apple.com" class="">aschwaighofer@apple.com</a>><br class=""></span></div><br class=""><div class=""><div class="">Author: arnolds<br class="">Date: Wed Feb 15 12:57:06 2017<br class="">New Revision: 295215<br class=""><br class="">URL: <a href="http://llvm.org/viewvc/llvm-project?rev=295215&view=rev" class="">http://llvm.org/viewvc/llvm-project?rev=295215&view=rev</a><br class="">Log:<br class="">ThreadSanitizer: don't track swifterror memory addresses<br class=""><br class="">They are register promoted by ISel and so it makes no sense to treat them as<br class="">memory.<br class=""><br class="">Inserting calls to the thread sanitizer would also generate invalid IR.<br class=""><br class="">You would hit:<br class=""><br class="">"swifterror value can only be loaded and stored from, or as a swifterror<br class="">argument!"<br class=""><br class="">Modified:<br class="">    llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp<br class="">    llvm/trunk/test/Instrumentation/ThreadSanitizer/tsan_basic.ll<br class=""><br class="">Modified: llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp?rev=295215&r1=295214&r2=295215&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp?rev=295215&r1=295214&r2=295215&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp (original)<br class="">+++ llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp Wed Feb 15 12:57:06 2017<br class="">@@ -488,6 +488,13 @@ bool ThreadSanitizer::instrumentLoadOrSt<br class="">   Value *Addr = IsWrite<br class="">       ? cast<StoreInst>(I)->getPointerOperand()<br class="">       : cast<LoadInst>(I)->getPointerOperand();<br class="">+<br class="">+  // swifterror memory addresses are mem2reg promoted by instruction selection.<br class="">+  // As such they cannot have regular uses like an instrumentation function and<br class="">+  // it makes no sense to track them as memory.<br class="">+  if (Addr->isSwiftError())<br class="">+    return false;<br class="">+<br class="">   int Idx = getMemoryAccessFuncIndex(Addr, DL);<br class="">   if (Idx < 0)<br class="">     return false;<br class=""><br class="">Modified: llvm/trunk/test/Instrumentation/ThreadSanitizer/tsan_basic.ll<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/ThreadSanitizer/tsan_basic.ll?rev=295215&r1=295214&r2=295215&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/ThreadSanitizer/tsan_basic.ll?rev=295215&r1=295214&r2=295215&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/test/Instrumentation/ThreadSanitizer/tsan_basic.ll (original)<br class="">+++ llvm/trunk/test/Instrumentation/ThreadSanitizer/tsan_basic.ll Wed Feb 15 12:57:06 2017<br class="">@@ -54,5 +54,29 @@ entry:<br class=""> ; CHECK: ret void<br class=""> }<br class=""><br class="">+; CHECK-LABEL: @SwiftError<br class="">+; CHECK-NOT: __tsan_read<br class="">+; CHECK-NOT: __tsan_write<br class="">+; CHECK: ret<br class="">+define void @SwiftError(i8** swifterror) sanitize_thread {<br class="">+  %swifterror_ptr_value = load i8*, i8** %0<br class="">+  store i8* null, i8** %0<br class="">+  %swifterror_addr = alloca swifterror i8*<br class="">+  %swifterror_ptr_value_2 = load i8*, i8** %swifterror_addr<br class="">+  store i8* null, i8** %swifterror_addr<br class="">+  ret void<br class="">+}<br class="">+<br class="">+; CHECK-LABEL: @SwiftErrorCall<br class="">+; CHECK-NOT: __tsan_read<br class="">+; CHECK-NOT: __tsan_write<br class="">+; CHECK: ret<br class="">+define void @SwiftErrorCall(i8** swifterror) sanitize_thread {<br class="">+  %swifterror_addr = alloca swifterror i8*<br class="">+  store i8* null, i8** %0<br class="">+  call void @SwiftError(i8** %0)<br class="">+  ret void<br class="">+}<br class="">+<br class=""> ; CHECK: define internal void @tsan.module_ctor()<br class=""> ; CHECK: call void @__tsan_init()<br class=""><br class=""><br class="">_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits<br class=""></div></div></blockquote></div><br class=""></body></html>