memcpy, memmove : set volatile on the source or destination operand, not on the intrinsic itself.
This means that memcpy and memove will now have 2 parameters : isSrcVolatile and isDestVolatile in place of isVolatile. For now, the old 'isVolatile' parameter is duplicated to form the is(Src|Dest)Volatile parameters in order to
preserve the actual behaviour.
The isVolatile and setVolatile method are still there for compatibility reasons, but should disappear as soon as all users have moved to the new interface.
Those changes requires some clang tests to be updated accordingly (see http://llvm-reviews.chandlerc.com/D376)
The update of all IR tests to use the new format is moved to a separate patch, as it is quite big and mechanical.
No functional change. The code in LLVM or Clang using the isVolatile part will be updated in subsequent patches. It is expected to bring some improvement as the old behaviour prevented some optimizations to kick-in.
I would just sink this into the specific intrinsic classes so that we don't have to get the intrinsic ID and switch over it here.