We need to use no_remote_memory as the key instead of remote_memory since we would like the atomic instruction in IR by default assuming a conservative (worst) situation, that is, it is possible to access remote memory. Therefore, the backend will emit ISA that works for the conservative (worst) situation. And by adding a metadata promising no remote memory access, the backend emits more performant. Therefore, the metadata serves as a performance hint that can be dropped without losing correctness.
That said, we can still adopt your format by using something like
[[clang::atomic(!no_remote_memory, !no_fine_grained_memory, ignore_denormals)]]