gpt4 book ai didi

c++ - gcc 不合并连续的栅栏

转载 作者:行者123 更新时间:2023-11-30 03:17:17 25 4
gpt4 key购买 nike

对于这段简单的代码

std::atomic_int i;
void foo() {
i.store(1);
i.store(2);
}

gcc 为 ARM 生成以下程序集:

movw    r3, #:lower16:.LANCHOR0
movt r3, #:upper16:.LANCHOR0
dmb ish
mov r1, #1
mov r2, #2
str r1, [r3]
dmb ish
dmb ish ; why is this not eliminated?
str r2, [r3]
dmb ish
bx lr

你可能会注意到,中间生成了一个重复的栅栏,这似乎是多余的。是 gcc 的优化器无法捕获和消除额外的栅栏的问题还是我遗漏了什么?

顺便说一句,clang 似乎可以处理相邻的栅栏。

最佳答案

是的,它不是,我已经和不同的人争论了一段时间。对于像我这样的外部观察者来说,效果是它将 atomic 视为 volatile,而标准并不要求它。我在标准中找不到这方面的要求。

但是,这也可能是缺少优化的简单情况。

关于c++ - gcc 不合并连续的栅栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55620073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com