diff options
| author | Cameron McInally <cameron.mcinally@nyu.edu> | 2019-06-05 22:37:05 +0000 |
|---|---|---|
| committer | Cameron McInally <cameron.mcinally@nyu.edu> | 2019-06-05 22:37:05 +0000 |
| commit | c72fbe5dc18ed0ffa6a1c67afef90e67c8b55c8b (patch) | |
| tree | 82e31b90d00110da6a2faa9451c3af95b042c4c7 | |
| parent | 6c5d5ce5517b12420f2717ae660a8929a41dda26 (diff) | |
| download | bcm5719-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.cpp | 2 | ||||
| -rw-r--r-- | llvm/test/Instrumentation/MemorySanitizer/msan_basic.ll | 16 |
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 { |

