Both t0 and t1 loads are atomic, meaning you'll always get the whole object.
But there's no synchronization between them and another thread can preempt
the execution and change value of %ptr right after the first load.
The code itself isn't well-formed because %ptr isn't actually defined anywhere—just pretend that it was. ;)
[0] Technically, LLVM does not have variables (as in, names you can assign to more than once), since it's in SSA form, but I don't know what a better name would be here. :)