mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 15:17:25 +00:00
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... git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218698 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -2624,21 +2624,37 @@ public:
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
/// Hooks for building estimates in place of, for example, slower divisions
|
||||
/// and square roots. These are not builder functions themselves, just the
|
||||
/// target-specific variables needed for building the estimate algorithm.
|
||||
|
||||
/// Return an estimate value for the input opcode and input operand.
|
||||
/// The RefinementSteps output is the number of refinement iterations
|
||||
/// required to generate a sufficient (though not necessarily IEEE-754
|
||||
/// compliant) estimate for the value type.
|
||||
/// Hooks for building estimates in place of slower divisions and square
|
||||
/// roots.
|
||||
|
||||
/// Return a reciprocal square root estimate value for the input operand.
|
||||
/// The RefinementSteps output is the number of Newton-Raphson refinement
|
||||
/// iterations required to generate a sufficient (though not necessarily
|
||||
/// IEEE-754 compliant) estimate for the value type.
|
||||
/// 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 getEstimate(unsigned Opcode, SDValue Operand,
|
||||
virtual SDValue getRsqrtEstimate(SDValue Operand,
|
||||
DAGCombinerInfo &DCI,
|
||||
unsigned &RefinementSteps) const {
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
|
||||
/// Return a reciprocal estimate value for the input operand.
|
||||
/// The RefinementSteps output is the number of Newton-Raphson refinement
|
||||
/// iterations required to generate a sufficient (though not necessarily
|
||||
/// IEEE-754 compliant) estimate for the value type.
|
||||
/// 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 getRecipEstimate(SDValue Operand,
|
||||
DAGCombinerInfo &DCI,
|
||||
unsigned &RefinementSteps) const {
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Legalization utility functions
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user