mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-25 10:27:04 +00:00
Improve sqrt estimate algorithm (fast-math)
This patch changes the fast-math implementation for calculating sqrt(x) from: y = 1 / (1 / sqrt(x)) to: y = x * (1 / sqrt(x)) This has 2 benefits: less code / faster code and one less estimate instruction that may lose precision. The only target that will be affected (until http://reviews.llvm.org/D5658 is approved) is PPC. The difference in codegen for PPC is 2 less flops for a single-precision sqrtf or vector sqrtf and 4 less flops for a double-precision sqrt. We also eliminate a constant load and extra register usage. Differential Revision: http://reviews.llvm.org/D5682 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219445 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -197,11 +197,7 @@ define double @foo3(double %a) nounwind {
|
||||
; CHECK-NEXT: fmul
|
||||
; CHECK-NEXT: fmadd
|
||||
; CHECK-NEXT: fmul
|
||||
; CHECK-NEXT: fre
|
||||
; CHECK-NEXT: fnmsub
|
||||
; CHECK-NEXT: fmadd
|
||||
; CHECK-NEXT: fnmsub
|
||||
; CHECK-NEXT: fmadd
|
||||
; CHECK-NEXT: fmul
|
||||
; CHECK: blr
|
||||
|
||||
; CHECK-SAFE: @foo3
|
||||
@@ -220,9 +216,7 @@ define float @goo3(float %a) nounwind {
|
||||
; CHECK: fmuls
|
||||
; CHECK-NEXT: fmadds
|
||||
; CHECK-NEXT: fmuls
|
||||
; CHECK-NEXT: fres
|
||||
; CHECK-NEXT: fnmsubs
|
||||
; CHECK-NEXT: fmadds
|
||||
; CHECK-NEXT: fmuls
|
||||
; CHECK: blr
|
||||
|
||||
; CHECK-SAFE: @goo3
|
||||
@@ -236,7 +230,6 @@ define <4 x float> @hoo3(<4 x float> %a) nounwind {
|
||||
|
||||
; CHECK: @hoo3
|
||||
; CHECK: vrsqrtefp
|
||||
; CHECK-DAG: vrefp
|
||||
; CHECK-DAG: vcmpeqfp
|
||||
|
||||
; CHECK-SAFE: @hoo3
|
||||
|
||||
Reference in New Issue
Block a user