We are working towards being able to insert the element unordered atomic memcpy (see: https://reviews.llvm.org/D33240) to the introspection hierarchy as a subclass of MemCpyInst.
This NFC is a first step that introduces a method to the MemIntrinsic class that can be used to query whether, or not, a given memory intrinsic is element atomic; this is being added to MemIntrinsic, rather than MemCpyInst, because the intention is to introduce element atomic memset & memmove intrinsics in the near future as well.
The plan is that future patches will, one at a time, update passes and introduce test cases to ensure that isElementAtomic() of a MemIntrinsic is properly handled -- ensuring fall-through to current behaviour when isElementAtomic() is false, and at least a graceful exit when it returns true. Once that is complete a final change that adds the element atomic memcpy intrinsic as a subclass of MemCpyInst will be proposed that also updates tests to show that passes do the right thing with the element atomic memcpy.
Would you mind to give a more detailed description of what "element atomic" actually is in this comment? Maybe write some simple example of array and show how it works with its elements. I'd ask this to make clear distinction between this one and isAtomic() method.