-fp-rcp flag along with -enable-unsafe-fp-math flag controls the generatation of X86 rcp instruction generation and some derived optimizations possible from generated rsqrt instructions. We have observed some effects on precision and hence has put these transformations under the mentioned flags. Following is the details of the -fp-rcp flag along with its values and enabled optimizations. -fp-rcp - Enable rcp ops =off - No rcp =on - y/x => y * rcp(x) i.e. Standard =fda - Standard, Derive FMA Generate LLVM IR by gfortran -S -O1 -o - -fplugin=dragonegg.so -fplugin-arg-dragonegg-emit-ir .ll -> .s file generation by llc -O3 -enable-unsafe-fp-math -fp-rsqrt=off/on/advance/fda <.ll filename> -filetype=asm Example 1. Source code real*4 x real*4 y real*4 r r = y/x LLVM IR %0 = load float* %y, align 4 %1 = load float* %x, align 4 %2 = fdiv float %0, %1 store float %2, float* %r, align 4 -fp-rcp=off movq %rdx, %r14 movq %rsi, %r15 movq %rdi, %rbx vmovss (%r15), %xmm0 vdivss (%rbx), %xmm0, %xmm0 leaq 8(%rsp), %r12 vmovss %xmm0, (%r14) -fp-rcp=on vmovss (%rbx), %xmm0 vrcpss %xmm0, %xmm0, %xmm0 vmulss (%r15), %xmm0, %xmm0 vmovss %xmm0, (%r14) Input ------ x = 3.00000000 y = 7.00000000 Output --------- without rcp:: r = 2.33333325 with rcp:: r = 2.33329773 Example 2 Source real*4 x real*4 y real*4 z real*4 r r = z+y/x LLVM-IR %0 = load float* %z, align 4 %1 = load float* %y, align 4 %2 = load float* %x, align 4 %3 = fdiv float %1, %2 %4 = fadd float %0, %3 store float %4, float* %r, align 4 -fp-rcp=off movq %rcx, %r14 movq %rdx, %r15 movq %rsi, %r12 movq %rdi, %rbx vmovss (%r12), %xmm0 vdivss (%rbx), %xmm0, %xmm0 leaq (%rsp), %r13 vaddss (%r15), %xmm0, %xmm0 vmovss %xmm0, (%r14) -fp-rcp=fda movq %rcx, %r14 movq %rdx, %r15 movq %rsi, %r12 movq %rdi, %r13 vmovss (%r13), %xmm0 vrcpss %xmm0, %xmm0, %xmm0 vmovss (%r12), %xmm1 vfmadd213ss (%r15), %xmm1, %xmm0 vmovss %xmm0, (%r14) Input ----- x = 3.00000000 y = 7.00000000 z = 0.330000013 Output -------- without rcp:: r = 2.66333318 with rcp+fma:: r = 2.66329765