<div dir="ltr">Hi llvmdev!<div><br></div><div>There are cases when we want our instrumentation passes for Sanitizer tools to insert llvm.memset.* calls (basically, we want to mark certain region of user memory as (un)addressable by writing magic values for "shadow" of that memory region). llvm.memset are convenient:</div>
<div>(1) we don't have to manually emit all these n-byte stores in a cycle.</div><div>(2) llvm.memset can be inlined as a platform-specific fast instructions (e.g. SSE).</div><div>But there will be a problem if llvm.memset is lowered into a regular memset() call: sanitizer runtime libraries intercept all memset() calls and treat them as function calls made by user, in particular checking that its arguments point to an addressable "user" memory, not some sanitizer-specific memory regions.</div>
<div><br></div><div>Can you suggest a way to ensure llvm.memset() is not transformed into memset function()? This intrinsic has <isvolatile> argument, which limits possible optimization of this call, does it make sense to add yet another argument, that would forbid transforming it into function calls?</div>
<div><div><br></div>-- <br><div>Alexey Samsonov, MSK</div>
</div></div>