diff options
author | Sanjay Patel <spatel@rotateright.com> | 2014-09-30 20:28:48 +0000 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2014-09-30 20:28:48 +0000 |
commit | 8fde95cb2b547a98b55e13f005ca00b899c095fb (patch) | |
tree | ab61764af3435ad1b99aac48b5508cfb7b3bdbd9 /llvm/lib/CodeGen | |
parent | 916cca728fbc5b8458b30a59e06d72a11f691f65 (diff) | |
download | bcm5719-llvm-8fde95cb2b547a98b55e13f005ca00b899c095fb.tar.gz bcm5719-llvm-8fde95cb2b547a98b55e13f005ca00b899c095fb.zip |
Split the estimate() interface into separate functions for each type. NFC.
It was hacky to use an opcode as a switch because it won't always match
(rsqrte != sqrte), and it looks like we'll need to add more special casing
per arch than I had hoped for. Eg, x86 will prefer a different NR estimate
implementation. ARM will want to use it's 'step' instructions. There also
don't appear to be any new estimate instructions in any arch in a long,
long time. Altivec vloge and vexpte may have been the first and last in
that field...
llvm-svn: 218698
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index aee6455713a..407a8747746 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -11779,7 +11779,7 @@ SDValue DAGCombiner::BuildReciprocalEstimate(SDValue Op) { TargetLowering::DAGCombinerInfo DCI(DAG, Level, false, this); unsigned Iterations; - if (SDValue Est = TLI.getEstimate(ISD::FDIV, Op, DCI, Iterations)) { + if (SDValue Est = TLI.getRecipEstimate(Op, DCI, Iterations)) { // Newton iteration for a function: F(X) is X_{i+1} = X_i - F(X_i)/F'(X_i) // For the reciprocal, we need to find the zero of the function: // F(X) = A X - 1 [which has a zero at X = 1/A] @@ -11820,7 +11820,7 @@ SDValue DAGCombiner::BuildRsqrtEstimate(SDValue Op) { // Expose the DAG combiner to the target combiner implementations. TargetLowering::DAGCombinerInfo DCI(DAG, Level, false, this); unsigned Iterations; - if (SDValue Est = TLI.getEstimate(ISD::FSQRT, Op, DCI, Iterations)) { + if (SDValue Est = TLI.getRsqrtEstimate(Op, DCI, Iterations)) { // Newton iteration for a function: F(X) is X_{i+1} = X_i - F(X_i)/F'(X_i) // For the reciprocal sqrt, we need to find the zero of the function: // F(X) = 1/X^2 - A [which has a zero at X = 1/sqrt(A)] |