mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Add a comment noting that the fdiv -> fmul conversion won't generate
multiplication by a denormal, and some tests checking that. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154431 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3ecb447f52
commit
507bb7a42f
@ -5769,9 +5769,9 @@ SDValue DAGCombiner::visitFDIV(SDNode *N) {
|
|||||||
APFloat N1APF = N1CFP->getValueAPF();
|
APFloat N1APF = N1CFP->getValueAPF();
|
||||||
APFloat Recip(N1APF.getSemantics(), 1); // 1.0
|
APFloat Recip(N1APF.getSemantics(), 1); // 1.0
|
||||||
APFloat::opStatus st = Recip.divide(N1APF, APFloat::rmNearestTiesToEven);
|
APFloat::opStatus st = Recip.divide(N1APF, APFloat::rmNearestTiesToEven);
|
||||||
// Only do the transform if the reciprocal is not too horrible (eg not NaN)
|
// Only do the transform if the reciprocal is a legal fp immediate that
|
||||||
// and the reciprocal is a legal fp imm.
|
// isn't too nasty (eg NaN, denormal, ...).
|
||||||
if ((st == APFloat::opOK || st == APFloat::opInexact) &&
|
if ((st == APFloat::opOK || st == APFloat::opInexact) && // Not too nasty
|
||||||
(!LegalOperations ||
|
(!LegalOperations ||
|
||||||
// FIXME: custom lowering of ConstantFP might fail (see e.g. ARM
|
// FIXME: custom lowering of ConstantFP might fail (see e.g. ARM
|
||||||
// backend)... we should handle this gracefully after Legalize.
|
// backend)... we should handle this gracefully after Legalize.
|
||||||
|
@ -23,3 +23,19 @@ define double @funky(double %x) {
|
|||||||
%div = fdiv double %x, 0.0
|
%div = fdiv double %x, 0.0
|
||||||
ret double %div
|
ret double %div
|
||||||
}
|
}
|
||||||
|
|
||||||
|
define double @denormal1(double %x) {
|
||||||
|
; Don't generate multiplication by a denormal.
|
||||||
|
; CHECK: @denormal1
|
||||||
|
; CHECK: divsd
|
||||||
|
%div = fdiv double %x, 0x7FD0000000000001
|
||||||
|
ret double %div
|
||||||
|
}
|
||||||
|
|
||||||
|
define double @denormal2(double %x) {
|
||||||
|
; Don't generate multiplication by a denormal.
|
||||||
|
; CHECK: @denormal
|
||||||
|
; CHECK: divsd
|
||||||
|
%div = fdiv double %x, 0x7FEFFFFFFFFFFFFF
|
||||||
|
ret double %div
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user