[4.0 Branch] Fwd: [llvm] r295215 - ThreadSanitizer: don't track swifterror memory addresses

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 16 13:27:16 PST 2017


r295376.

Thanks,
Hans

On Wed, Feb 15, 2017 at 2:43 PM, Arnold Schwaighofer via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Hi Hans and Kostya,
>
> Can we merge this into the 4.0 branch?
>
> This affects only the swiftcalling convention and swifterror so should be
> reasonably safe.
>
> Thank you!
>
> Begin forwarded message:
>
> From: Arnold Schwaighofer via llvm-commits <llvm-commits at lists.llvm.org>
> Subject: [llvm] r295215 - ThreadSanitizer: don't track swifterror memory
> addresses
> Date: February 15, 2017 at 10:57:07 AM PST
> To: llvm-commits at lists.llvm.org
> Reply-To: Arnold Schwaighofer <aschwaighofer at apple.com>
>
> Author: arnolds
> Date: Wed Feb 15 12:57:06 2017
> New Revision: 295215
>
> URL: http://llvm.org/viewvc/llvm-project?rev=295215&view=rev
> Log:
> ThreadSanitizer: don't track swifterror memory addresses
>
> They are register promoted by ISel and so it makes no sense to treat them as
> memory.
>
> Inserting calls to the thread sanitizer would also generate invalid IR.
>
> You would hit:
>
> "swifterror value can only be loaded and stored from, or as a swifterror
> argument!"
>
> Modified:
>    llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
>    llvm/trunk/test/Instrumentation/ThreadSanitizer/tsan_basic.ll
>
> Modified: llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp?rev=295215&r1=295214&r2=295215&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp (original)
> +++ llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp Wed Feb 15
> 12:57:06 2017
> @@ -488,6 +488,13 @@ bool ThreadSanitizer::instrumentLoadOrSt
>   Value *Addr = IsWrite
>       ? cast<StoreInst>(I)->getPointerOperand()
>       : cast<LoadInst>(I)->getPointerOperand();
> +
> +  // swifterror memory addresses are mem2reg promoted by instruction
> selection.
> +  // As such they cannot have regular uses like an instrumentation function
> and
> +  // it makes no sense to track them as memory.
> +  if (Addr->isSwiftError())
> +    return false;
> +
>   int Idx = getMemoryAccessFuncIndex(Addr, DL);
>   if (Idx < 0)
>     return false;
>
> Modified: llvm/trunk/test/Instrumentation/ThreadSanitizer/tsan_basic.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/ThreadSanitizer/tsan_basic.ll?rev=295215&r1=295214&r2=295215&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/ThreadSanitizer/tsan_basic.ll (original)
> +++ llvm/trunk/test/Instrumentation/ThreadSanitizer/tsan_basic.ll Wed Feb 15
> 12:57:06 2017
> @@ -54,5 +54,29 @@ entry:
> ; CHECK: ret void
> }
>
> +; CHECK-LABEL: @SwiftError
> +; CHECK-NOT: __tsan_read
> +; CHECK-NOT: __tsan_write
> +; CHECK: ret
> +define void @SwiftError(i8** swifterror) sanitize_thread {
> +  %swifterror_ptr_value = load i8*, i8** %0
> +  store i8* null, i8** %0
> +  %swifterror_addr = alloca swifterror i8*
> +  %swifterror_ptr_value_2 = load i8*, i8** %swifterror_addr
> +  store i8* null, i8** %swifterror_addr
> +  ret void
> +}
> +
> +; CHECK-LABEL: @SwiftErrorCall
> +; CHECK-NOT: __tsan_read
> +; CHECK-NOT: __tsan_write
> +; CHECK: ret
> +define void @SwiftErrorCall(i8** swifterror) sanitize_thread {
> +  %swifterror_addr = alloca swifterror i8*
> +  store i8* null, i8** %0
> +  call void @SwiftError(i8** %0)
> +  ret void
> +}
> +
> ; CHECK: define internal void @tsan.module_ctor()
> ; CHECK: call void @__tsan_init()
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>


More information about the llvm-commits mailing list