diff options
author | Evandro Menezes <e.menezes@samsung.com> | 2016-11-10 23:31:06 +0000 |
---|---|---|
committer | Evandro Menezes <e.menezes@samsung.com> | 2016-11-10 23:31:06 +0000 |
commit | 3f647d62d1ffc114ab52034d992f650aa2c9fec5 (patch) | |
tree | d5daa9c1170d2d0f3ce8945b32467be7b9a30136 /include | |
parent | b0204917258d334a4200e604557a21655a801a29 (diff) |
[DAG Combiner] Fix the native computation of the Newton series for reciprocals
The generic infrastructure to compute the Newton series for reciprocal and
reciprocal square root was conceived to allow a target to compute the series
itself. However, the original code did not properly consider this condition
if returned by a target. This patch addresses the issues to allow a target
to compute the series on its own.
Differential revision: https://reviews.llvm.org/D22975
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286523 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Target/TargetLowering.h | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/include/llvm/Target/TargetLowering.h b/include/llvm/Target/TargetLowering.h index 823d91072fc..826b4d5a180 100644 --- a/include/llvm/Target/TargetLowering.h +++ b/include/llvm/Target/TargetLowering.h @@ -2986,21 +2986,24 @@ public: /// Hooks for building estimates in place of slower divisions and square /// roots. - /// Return a reciprocal square root estimate value for the input operand. + /// Return either a square root or its reciprocal estimate value for the input + /// operand. /// \p Enabled is a ReciprocalEstimate enum with value either 'Unspecified' or /// 'Enabled' as set by a potential default override attribute. /// If \p RefinementSteps is 'Unspecified', the number of Newton-Raphson /// refinement iterations required to generate a sufficient (though not /// necessarily IEEE-754 compliant) estimate is returned in that parameter. /// The boolean UseOneConstNR output is used to select a Newton-Raphson - /// algorithm implementation that uses one constant or two constants. + /// algorithm implementation that uses either one or two constants. + /// The boolean Reciprocal is used to select whether the estimate is for the + /// square root of the input operand or the reciprocal of its square root. /// A target may choose to implement its own refinement within this function. /// If that's true, then return '0' as the number of RefinementSteps to avoid /// any further refinement of the estimate. /// An empty SDValue return means no estimate sequence can be created. - virtual SDValue getRsqrtEstimate(SDValue Operand, SelectionDAG &DAG, - int Enabled, int &RefinementSteps, - bool &UseOneConstNR) const { + virtual SDValue getSqrtEstimate(SDValue Operand, SelectionDAG &DAG, + int Enabled, int &RefinementSteps, + bool &UseOneConstNR, bool Reciprocal) const { return SDValue(); } |