在下面的代码中,只会进行一次比较,因为编译器知道这些条件是互斥的,我们将总是进入第二个条件,因为
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
一样,但实际上它没有被保留在最终的汇编代码中。
类似于:
int foo(int bar) {
@precond(bar > 64);
if (bar > 32) {
printf("Too many elements");
}
return 0;
}
我的唯一解决方案是写一个LLVM pass吗?
__builtin_expect
:http://blog.man7.org/2012/10/how-much-do-builtinexpect-likely-and.html - ForceBru