summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCameron McInally <cameron.mcinally@nyu.edu>2019-06-05 22:37:05 +0000
committerCameron McInally <cameron.mcinally@nyu.edu>2019-06-05 22:37:05 +0000
commitc72fbe5dc18ed0ffa6a1c67afef90e67c8b55c8b (patch)
tree82e31b90d00110da6a2faa9451c3af95b042c4c7
parent6c5d5ce5517b12420f2717ae660a8929a41dda26 (diff)
downloadbcm5719-llvm-c72fbe5dc18ed0ffa6a1c67afef90e67c8b55c8b.tar.gz
bcm5719-llvm-c72fbe5dc18ed0ffa6a1c67afef90e67c8b55c8b.zip
[MSAN] Add unary FNeg visitor to the MemorySanitizer
Differential Revision: https://reviews.llvm.org/D62909 llvm-svn: 362664
-rw-r--r--llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp2
-rw-r--r--llvm/test/Instrumentation/MemorySanitizer/msan_basic.ll16
2 files changed, 18 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
index 87f73ff24c4..7c261775003 100644
--- a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
@@ -2110,6 +2110,8 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
SC.Done(&I);
}
+ void visitFNeg(UnaryOperator &I) { handleShadowOr(I); }
+
// Handle multiplication by constant.
//
// Handle a special case of multiplication by constant that may have one or
diff --git a/llvm/test/Instrumentation/MemorySanitizer/msan_basic.ll b/llvm/test/Instrumentation/MemorySanitizer/msan_basic.ll
index a42730de012..499de14aea3 100644
--- a/llvm/test/Instrumentation/MemorySanitizer/msan_basic.ll
+++ b/llvm/test/Instrumentation/MemorySanitizer/msan_basic.ll
@@ -438,6 +438,22 @@ entry:
; CHECK: store i32 %[[SC]], i32* {{.*}}@__msan_retval_tls
; CHECK: ret float
+; Check that fneg simply propagates shadow.
+
+define float @FNeg(float %a) nounwind uwtable readnone sanitize_memory {
+entry:
+ %c = fneg float %a
+ ret float %c
+}
+
+; CHECK-LABEL: @FNeg
+; CHECK: %[[SA:.*]] = load i32,{{.*}}@__msan_param_tls
+; CHECK-ORIGINS: %[[SB:.*]] = load i32,{{.*}}@__msan_param_origin_tls
+; CHECK: = fneg float
+; CHECK: store i32 %[[SA]], i32* {{.*}}@__msan_retval_tls
+; CHECK-ORIGINS: store i32{{.*}}@__msan_retval_origin_tls
+; CHECK: ret float
+
; Check that we propagate shadow for x<0, x>=0, etc (i.e. sign bit tests)
define zeroext i1 @ICmpSLTZero(i32 %x) nounwind uwtable readnone sanitize_memory {
OpenPOWER on IntegriCloud