This is a patch to LangRef suggesting that pointers to load/store should be
well-defined, and the size of memset/memcpy/memmove should be well-defined
If the size is non-zero, vice versa to the pointers.
This means that, for example, it is undefined behavior to do
%p = alloca [8 x i8]
%p2 = gep %p, (undef & 8)
store 0, %p2
even if `undef & 8` is always less than 8.
This patch is beneficial for further no-undef analysis.
IIUC, this is consistent with MSan's assumption.
With `-msan-check-access-address` enabled,
it detects a case when e.g., only lower bits of address are garbage.
A remaining concern is whether there exists a case that this undef-bits offset
I'll send a mail to llvm-dev for further discussion.
BTW, this patch contains slightly more diff that moves a definition of frozen
value to the end of poison part and etc.