[flang-commits] [libcxxabi] [libcxx] [libc] [lld] [flang] [llvm] [clang] [lldb] [msan] Unpoison indirect outputs for userspace using memset for large operands (PR #79924)
Alexander Potapenko via flang-commits
flang-commits at lists.llvm.org
Wed Jan 31 02:27:07 PST 2024
================
@@ -4552,16 +4552,22 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
}
if (!ElemTy->isSized())
return;
- Value *SizeVal =
- IRB.CreateTypeSize(MS.IntptrTy, DL.getTypeStoreSize(ElemTy));
+ auto Size = DL.getTypeStoreSize(ElemTy);
+ Value *SizeVal = IRB.CreateTypeSize(MS.IntptrTy, Size);
if (MS.CompileKernel) {
IRB.CreateCall(MS.MsanInstrumentAsmStoreFn, {Operand, SizeVal});
} else {
// ElemTy, derived from elementtype(), does not encode the alignment of
// the pointer. Conservatively assume that the shadow memory is unaligned.
+ // When Size is large, avoid StoreInst as it would expand to many
+ // instructions.
auto [ShadowPtr, _] =
getShadowOriginPtrUserspace(Operand, IRB, IRB.getInt8Ty(), Align(1));
- IRB.CreateAlignedStore(getCleanShadow(ElemTy), ShadowPtr, Align(1));
+ if (Size <= 32)
----------------
ramosian-glider wrote:
Maybe some comment wouldn't hurt here to clarify this constant.
https://github.com/llvm/llvm-project/pull/79924
More information about the flang-commits
mailing list