分支似然性提示是否通过函数调用进行?

问题描述

我遇到过几种情况,我想说一个函数的返回值可能在函数的主体内,而不是会调用它的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 (将#修改为@)