<div dir="ltr"><div>The following IR with the volatile parameter set to true</div><div>> call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %0, i8* align 1 %1, i64 7, i1 true)</div><div><br></div><div>generates the following asm:</div><div>> movl    (%rsi), %eax<br>> movl    3(%rsi), %ecx<br>> movl    %ecx, 3(%rdi)<br>> movl    %eax, (%rdi)<br></div><div><br></div><div>It performs an overlapping read/write which - I believe - is violating the volatile semantic</div><div>Full example here: <a href="https://godbolt.org/z/P_rjBT">https://godbolt.org/z/P_rjBT</a><br></div><div><br></div><div>Is this a bug or am I misunderstanding volatile in this context?</div><div></div></div>