[llvm] [msan] Handle AVX512 vector down convert (non-mem) intrinsics (PR #147606)
Thurston Dang via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 8 15:53:32 PDT 2025
================
@@ -4592,6 +4592,91 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
ConstantInt::get(IRB.getInt32Ty(), 0));
}
+ // Handle llvm.x86.avx512.mask.pmov{,s,us}.*.512
+ //
+ // e.g., call <16 x i8> @llvm.x86.avx512.mask.pmov.qb.512
+ // (<8 x i64>, <16 x i8>, i8)
+ // A WriteThru Mask
+ //
+ // call <16 x i8> @llvm.x86.avx512.mask.pmovs.db.512
+ // (<16 x i32>, <16 x i8>, i16)
+ //
+ // Dst[i] = Mask[i] ? truncate_or_saturate(A[i]) : WriteThru[i]
+ // Dst_shadow[i] = Mask[i] ? truncate(A_shadow[i]) : WriteThru_shadow[i]
+ //
+ // If Dst has more elements than A, the excess elements are zeroed (and the
+ // corresponding shadow is initialized).
+ //
+ // Note: for PMOV (truncation), handleIntrinsicByApplyingToShadow is precise
+ // and is much faster than this handler.
+ void handleAVX512VectorDownConvert(IntrinsicInst &I) {
+ IRBuilder<> IRB(&I);
+
+ assert(I.arg_size() == 3);
+ Value *A = I.getOperand(0);
+ Value *WriteThrough = I.getOperand(1);
+ Value *Mask = I.getOperand(2);
----------------
thurstond wrote:
Done
https://github.com/llvm/llvm-project/pull/147606
More information about the llvm-commits
mailing list