[compiler-rt] r332761 - [msan] Don't check divisor shadow in fdiv.

Evgeniy Stepanov via llvm-commits llvm-commits at lists.llvm.org
Fri May 18 13:19:53 PDT 2018


Author: eugenis
Date: Fri May 18 13:19:53 2018
New Revision: 332761

URL: http://llvm.org/viewvc/llvm-project?rev=332761&view=rev
Log:
[msan] Don't check divisor shadow in fdiv.

Summary:
Floating point division by zero or even undef does not have undefined
behavior and may occur due to optimizations.

Fixes https://bugs.llvm.org/show_bug.cgi?id=37523.

Reviewers: kcc

Subscribers: hiraditya, llvm-commits

Differential Revision: https://reviews.llvm.org/D47085

Added:
    compiler-rt/trunk/test/msan/vector_div.cc
Modified:
    compiler-rt/trunk/lib/msan/tests/msan_test.cc

Modified: compiler-rt/trunk/lib/msan/tests/msan_test.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/tests/msan_test.cc?rev=332761&r1=332760&r2=332761&view=diff
==============================================================================
--- compiler-rt/trunk/lib/msan/tests/msan_test.cc (original)
+++ compiler-rt/trunk/lib/msan/tests/msan_test.cc Fri May 18 13:19:53 2018
@@ -4044,7 +4044,6 @@ typedef U4 V2x32 __attribute__((__vector
 typedef U2 V4x16 __attribute__((__vector_size__(8)));
 typedef U1 V8x8 __attribute__((__vector_size__(8)));
 
-
 V8x16 shift_sse2_left_scalar(V8x16 x, U4 y) {
   return _mm_slli_epi16(x, y);
 }

Added: compiler-rt/trunk/test/msan/vector_div.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/msan/vector_div.cc?rev=332761&view=auto
==============================================================================
--- compiler-rt/trunk/test/msan/vector_div.cc (added)
+++ compiler-rt/trunk/test/msan/vector_div.cc Fri May 18 13:19:53 2018
@@ -0,0 +1,17 @@
+// Regression test for https://bugs.llvm.org/show_bug.cgi?id=37523
+
+// RUN: %clangxx_msan -O0 %s -o %t && %run %t
+// RUN: %clangxx_msan -O3 %s -o %t && %run %t
+// REQUIRES: x86_64-target-arch
+
+#include <assert.h>
+#include <emmintrin.h>
+
+int main() {
+  volatile int scale = 5;
+  volatile auto zz = _mm_div_ps(_mm_set1_ps(255), _mm_set1_ps(scale));
+  assert(zz[0] == 51);
+  assert(zz[1] == 51);
+  assert(zz[2] == 51);
+  assert(zz[3] == 51);
+}




More information about the llvm-commits mailing list