我正在测试LLVM与gcc生成的代码质量
我有一个像这样的小程序
#includedouble mysqrt(double a){ return sqrt(a); } int main() { mysqrt(0.1); return 1; }
克朗正在散发出来
mysqrt: # @mysqrt # BB#0: # %entry jmp sqrt # TAILCALL
这意味着它正在调用sqrt函数
gcc正在发光
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正在调用函数而不是使用机器指令吗?