diff options
author | Nemanja Ivanovic <nemanja.i.ibm@gmail.com> | 2019-05-07 13:48:03 +0000 |
---|---|---|
committer | Nemanja Ivanovic <nemanja.i.ibm@gmail.com> | 2019-05-07 13:48:03 +0000 |
commit | b4f028f0f3f6c4326ff9ff3c077f71b01d5adc2e (patch) | |
tree | dc0d51ef3204f44cdf1dec98975ded5442bad306 /llvm/lib/Target/PowerPC/PPCISelLowering.cpp | |
parent | 5c922f698847a7059e9015dcf73721af3be852a3 (diff) | |
download | bcm5719-llvm-b4f028f0f3f6c4326ff9ff3c077f71b01d5adc2e.tar.gz bcm5719-llvm-b4f028f0f3f6c4326ff9ff3c077f71b01d5adc2e.zip |
[PowerPC] Use the two-constant NR algorithm for refining estimates
The single-constant algorithm produces infinities on a lot of denormal values.
The precision of the two-constant algorithm is actually sufficient across the
range of denormals. We will switch to that algorithm for now to avoid the
infinities on denormals. In the future, we will re-evaluate the algorithm to
find the optimal one for PowerPC.
Differential revision: https://reviews.llvm.org/D60037
llvm-svn: 360144
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCISelLowering.cpp')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp index 3b61f4da351..9ff817e2f50 100644 --- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp @@ -11145,7 +11145,9 @@ SDValue PPCTargetLowering::getSqrtEstimate(SDValue Operand, SelectionDAG &DAG, if (RefinementSteps == ReciprocalEstimate::Unspecified) RefinementSteps = getEstimateRefinementSteps(VT, Subtarget); - UseOneConstNR = true; + // The Newton-Raphson computation with a single constant does not provide + // enough accuracy on some CPUs. + UseOneConstNR = !Subtarget.needsTwoConstNR(); return DAG.getNode(PPCISD::FRSQRTE, SDLoc(Operand), VT, Operand); } return SDValue(); |