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.