我正在测试LLVM vs gcc生成的代码的质量
我有一个像这样的小程序
#include<math.h>
double mysqrt(double a){
return sqrt(a);
}
int main()
{
mysqrt(0.1);
return 1;
}
lang发出
mysqrt: # @mysqrt
# BB#0: # %entry
jmp sqrt # TAILCALL
这意味着它正在调用sqrt函数
海湾合作委员会正在发射
mysqrt:
.LFB25:
.cfi_startproc
subl $28, %esp
.cfi_def_cfa_offset 32
fldl 32(%esp)
fld %st(0)
fsqrt
fucomi %st(0), %st
这意味着它正在使用直接机器指令fsqrt(我想它比调用函数要快得多)。这是针对具有O3优化级别的X86机器完成的。有人知道为什么LLVM调用函数而不使用机器指令吗?
最佳答案
gcc的行为不是标准的C,因为该内联调用缺少错误检查。要使gcc具有符合标准的行为,请使用-std=c99
选项或类似选项进行编译。迫使clang忘记其标准合规性,例如-ffast-math
可能会有所帮助。
关于c - LLVM不使用机器指令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20518480/