问题描述
我遇到过几种情况,我想说一个函数的返回值可能在函数的主体内,而不是会调用它的if语句。
例如,说我想将代码从使用LIKELY
宏移植到使用新的[[likely]]
注释。但是这些在语法上却不同:
#define LIKELY(...) __builtin_expect(!!(__VA_ARGS__),0)
if(LIKELY(x)) { ... }
vs
if(x) [[likely]] { ... }
没有简单的方法来重新定义LIKELY
宏以使用注释。会定义类似
inline bool likely(bool x) {
if(x) [[likely]] return true;
else return false;
}
将提示传播给if?喜欢
if(likely(x)) { ... }
类似地,在通用代码中,即使在其他地方是已知的,也可能很难在实际的if
语句中直接表达算法似然信息。例如,copy_if
的谓词几乎总是假的。据我所知,还没有办法使用属性来表达这一点,但是如果分支权重信息可以通过函数传播,这就是一个解决的问题。
到目前为止,我还没有找到有关此文档的文档,而且我不知道通过查看输出的程序集来测试它的良好设置。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)