Почему g ++ не оптимизирует доступ к локальному массиву constexpr? - PullRequest
0 голосов
/ 26 ноября 2018

У меня следующий код c ++:

inline int choose(int i){
    static constexpr int arr[]={1,3,3,2,4,1,4}; 
    return arr[i];
}
void f(int);
int main(){
    for(int i=0;i<5;i++){
    f(choose(i));
    }
}

Когда я компилирую это с g ++ 8.2 с опцией -O3, он выдает хорошо оптимизированный asm-код .Однако, когда я изменяю вторую строку с static constexpr на constexpr, которая должна быть семантически одинаковой, она больше не оптимизирует доступ к массиву и выдает несколько неэффективный асм-код .

У кого-нибудь есть идеи, почему это происходит?

...