[llvm-branch-commits] [msan] Implement shadow propagation for _mm_dp_pd, _mm_dp_ps, _mm256_dp_ps (PR #94875)

Vitaly Buka via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Jun 10 13:40:02 PDT 2024


================
@@ -3287,6 +3287,76 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
     setOriginForNaryOp(I);
   }
 
+  // Convert `Mask` into `<n x i1>`.
+  Constant *createDppMask(unsigned Width, unsigned Mask) {
+    SmallVector<Constant *, 4> R;
+    R.assign(Width, ConstantInt::getFalse(F.getContext()));
+    for (auto &M : R) {
+      if (Mask & 1)
+        M = ConstantInt::getTrue(F.getContext());
+      Mask >>= 1;
+    }
+    return ConstantVector::get(R);
+  }
+
+  // Calculate output shadow as array of booleans `<n x i1>`, assuming if any
----------------
vitalybuka wrote:

Not exactly. Input bits can affect particular output bits.
E.g. argument with single uninitialized bit can be multiplied by initialized zero.
So it's approximation, but better checking will be expensive.

https://github.com/llvm/llvm-project/pull/94875


More information about the llvm-branch-commits mailing list