此问题在此处已有答案:
Can I hint the optimizer by giving the range of an integer?(4个答案)
三年前关闭了。
在下面的代码中,只进行一次比较,因为编译器知道条件是互斥的,我们总是输入第二个条件,因为bar
将是必要的〉32:
int foo(int bar) {
if (bar <= 64)
return 1;
if (bar > 32) {
printf("Too many elements");
}
return 0;
}
现在,假设我知道bar
总是大于64。由于系统、配置或其他输入的原因,我怎么能提示编译器根本不进行比较,就像如果if (bar <= 64) return
被编译了一样,除非它实际上没有保存在最终的ASM中。
比如:
int foo(int bar) {
@precond(bar > 64);
if (bar > 32) {
printf("Too many elements");
}
return 0;
}
是我唯一的解决方案写例如LLVM通行证?
1条答案
按热度按时间kq4fsx7k1#
您可以在GCC中使用
__builtin_unreachable
:Clang中的
__builtin_assume
:MSVC中的
__assume
:在C++23中,你也可以使用可移植语法