在下面的代码中,只会进行一次比较,因为编译器知道条件是互斥的,我们将始终bar
根据需要输入第二个条件> 32:
int foo(int bar) {
if (bar <= 64)
return 1;
if (bar > 32) {
printf("Too many elements");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,想象一下我知道bar
的总是高于64。因为系统的输入,配置,或者其他。我怎样才能暗示编译器根本不做比较,就像if (bar <= 64) return
编译了一样,除非它实际上没有保存在最终的 ASM 中。
就像是:
int foo(int bar) {
@precond(bar > 64);
if (bar > 32) {
printf("Too many elements");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是我编写 LLVM 通行证的唯一解决方案吗?