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

Florian Mayer via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Jun 10 13:45:03 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
----------------
fmayer wrote:

Ah, ok. Please add a comment. I guess these instructions are beyond the reach of the C++ standard, so there is no proper definition for "undefined bits" that would say whether multiplying one by zero is UB or not?

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


More information about the llvm-branch-commits mailing list