mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
bb38b0a59d
Summary: Normally, the Origin is passed over TLS, which seems like it introduces unnecessary overhead. It's in the (extremely) cold path though, so the only overhead is in code size. But with eager-checks, calls to __msan_warning functions are extremely common, so this becomes a useful optimization. This can save ~5% code size. Reviewers: eugenis, vitalybuka Reviewed By: eugenis, vitalybuka Subscribers: hiraditya, #sanitizers, llvm-commits Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D81700
25 lines
871 B
LLVM
25 lines
871 B
LLVM
; Make sure MSan doesn't insert shadow checks for @llvm.is.constant.* arguments.
|
|
|
|
; RUN: opt < %s -msan-kernel=1 -S -passes=msan 2>&1 | FileCheck \
|
|
; RUN: -check-prefixes=CHECK %s
|
|
; RUN: opt < %s -msan -msan-kernel=1 -S | FileCheck -check-prefixes=CHECK %s
|
|
; RUN: opt < %s -S -passes=msan 2>&1 | FileCheck -check-prefixes=CHECK %s
|
|
; RUN: opt < %s -msan -S | FileCheck -check-prefixes=CHECK %s
|
|
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
; Function Attrs: nounwind readnone uwtable
|
|
define dso_local i32 @bar(i32 %v) local_unnamed_addr sanitize_memory {
|
|
entry:
|
|
%0 = tail call i1 @llvm.is.constant.i32(i32 %v)
|
|
%1 = zext i1 %0 to i32
|
|
ret i32 %1
|
|
}
|
|
|
|
; CHECK-LABEL: bar
|
|
; CHECK-NOT: call void @__msan_warning_with_origin
|
|
|
|
; Function Attrs: nounwind readnone
|
|
declare i1 @llvm.is.constant.i32(i32)
|