File tree Expand file tree Collapse file tree 2 files changed +5
-3
lines changed
lib/Transforms/InstCombine
test/Transforms/InstCombine Expand file tree Collapse file tree 2 files changed +5
-3
lines changed Original file line number Diff line number Diff line change @@ -1598,9 +1598,11 @@ Instruction *InstCombinerImpl::foldFDivConstantDivisor(BinaryOperator &I) {
1598
1598
return BinaryOperator::CreateFDivFMF (X, NegC, &I);
1599
1599
1600
1600
// nnan X / +0.0 -> copysign(inf, X)
1601
- if (I.hasNoNaNs () && match (I.getOperand (1 ), m_Zero ())) {
1601
+ // nnan nsz X / -0.0 -> copysign(inf, X)
1602
+ if (I.hasNoNaNs () &&
1603
+ (match (I.getOperand (1 ), m_PosZeroFP ()) ||
1604
+ (I.hasNoSignedZeros () && match (I.getOperand (1 ), m_NegZeroFP ())))) {
1602
1605
IRBuilder<> B (&I);
1603
- // TODO: nnan nsz X / -0.0 -> copysign(inf, X)
1604
1606
CallInst *CopySign = B.CreateIntrinsic (
1605
1607
Intrinsic::copysign , {C->getType ()},
1606
1608
{ConstantFP::getInfinity (I.getType ()), I.getOperand (0 )}, &I);
Original file line number Diff line number Diff line change @@ -1004,7 +1004,7 @@ define double @test_positive_zero(double %X) {
1004
1004
1005
1005
define double @test_negative_zero (double %X ) {
1006
1006
; CHECK-LABEL: @test_negative_zero(
1007
- ; CHECK-NEXT: [[TMP1:%.*]] = fdiv nnan nsz double [[X:%.*]], -0.000000e+00
1007
+ ; CHECK-NEXT: [[TMP1:%.*]] = call nnan nsz double @llvm.copysign.f64(double 0x7FF0000000000000, double [[X:%.*]])
1008
1008
; CHECK-NEXT: ret double [[TMP1]]
1009
1009
;
1010
1010
%1 = fdiv nnan nsz double %X , -0 .0
You can’t perform that action at this time.
0 commit comments