================ @@ -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 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits