Почему ненужные атомные нагрузки не оптимизированы? - PullRequest
6 голосов
/ 08 мая 2019

Давайте рассмотрим этот тривиальный код:

#include <atomic>

std::atomic<int> a;
void f(){
    for(int k=0;k<100;++k)
        a.load(std::memory_order_relaxed);
}

MSVC, Clang и GCC все выполняют 100 загрузок, хотя кажется очевидным, что его можно было бы оптимизировать. Я ожидал, что функция f будет nop (см. Сгенерированный код здесь )

На самом деле, я ожидал, что это генерирование кода для изменчивого атома:

volatile std::atomic<int> va;
void g(){
    for(int k=0;k<100;++k)
        va.load(std::memory_order_relaxed);
}

Почему компиляторы не оптимизируют ненужные атомарные нагрузки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...