Por que os compiladores não mesclam redundantes std :: atomic escreve?

Gostaria de saber por que nenhum compilador está preparado para mesclar gravações consecutivas do mesmo valor em uma única variável atômica, por exemplo:

#include <atomic>
std::atomic<int> y(0);
void f() {
  auto order = std::memory_order_relaxed;
  y.store(1, order);
  y.store(1, order);
  y.store(1, order);
}

Todo compilador que eu tentei emitirá a gravação acima três vezes. Que observador legítimo e sem raça pode ver a diferença entre o código acima e uma versão otimizada com uma única gravação (ou seja, a regra 'como se' não se aplica)?

Se a variável tiver sido volátil, obviamente nenhuma otimização é aplicável. O que está impedindo isso no meu caso?

Aqui está o código emexplorador de compilador.

questionAnswers(9)

yourAnswerToTheQuestion