diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index f17fee2fe745..e85695755d46 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -4816,17 +4816,13 @@ SDValue SelectionDAG::foldConstantFPMath(unsigned Opcode, const SDLoc &DL, break; case ISD::FDIV: Status = C1.divide(C2, APFloat::rmNearestTiesToEven); - if (!HasFPExceptions || (Status != APFloat::opInvalidOp && - Status != APFloat::opDivByZero)) { + if (!HasFPExceptions || Status != APFloat::opInvalidOp) return getConstantFP(C1, DL, VT); - } break; case ISD::FREM: Status = C1.mod(C2); - if (!HasFPExceptions || (Status != APFloat::opInvalidOp && - Status != APFloat::opDivByZero)) { + if (!HasFPExceptions || Status != APFloat::opInvalidOp) return getConstantFP(C1, DL, VT); - } break; case ISD::FCOPYSIGN: C1.copySign(C2); @@ -4840,7 +4836,7 @@ SDValue SelectionDAG::foldConstantFPMath(unsigned Opcode, const SDLoc &DL, // This can return overflow, underflow, or inexact; we don't care. // FIXME need to be more flexible about rounding mode. (void) C1.convert(EVTToAPFloatSemantics(VT), APFloat::rmNearestTiesToEven, - &Unused); + &Unused); return getConstantFP(C1, DL, VT); } diff --git a/llvm/test/CodeGen/AArch64/fp-const-fold.ll b/llvm/test/CodeGen/AArch64/fp-const-fold.ll index b8b4722ade12..398671b79b52 100644 --- a/llvm/test/CodeGen/AArch64/fp-const-fold.ll +++ b/llvm/test/CodeGen/AArch64/fp-const-fold.ll @@ -6,10 +6,8 @@ define double @constant_fold_fdiv_by_zero(double* %p) { ; CHECK-LABEL: constant_fold_fdiv_by_zero: ; CHECK: // %bb.0: -; CHECK-NEXT: mov x8, #1 -; CHECK-NEXT: fmov d0, xzr -; CHECK-NEXT: fmov d1, x8 -; CHECK-NEXT: fdiv d0, d1, d0 +; CHECK-NEXT: mov x8, #9218868437227405312 +; CHECK-NEXT: fmov d0, x8 ; CHECK-NEXT: ret %r = fdiv double 4.940660e-324, 0.0 ret double %r diff --git a/llvm/test/CodeGen/X86/fdiv-combine.ll b/llvm/test/CodeGen/X86/fdiv-combine.ll index c0c5baa2c8bf..cd2b959ee0da 100644 --- a/llvm/test/CodeGen/X86/fdiv-combine.ll +++ b/llvm/test/CodeGen/X86/fdiv-combine.ll @@ -115,16 +115,7 @@ define float @div_select_constant_fold(i1 zeroext %arg) { define float @div_select_constant_fold_zero(i1 zeroext %arg) { ; CHECK-LABEL: div_select_constant_fold_zero: ; CHECK: # %bb.0: -; CHECK-NEXT: testl %edi, %edi -; CHECK-NEXT: jne .LBB7_1 -; CHECK-NEXT: # %bb.2: ; CHECK-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero -; CHECK-NEXT: jmp .LBB7_3 -; CHECK-NEXT: .LBB7_1: -; CHECK-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero -; CHECK-NEXT: .LBB7_3: -; CHECK-NEXT: xorps %xmm1, %xmm1 -; CHECK-NEXT: divss %xmm1, %xmm0 ; CHECK-NEXT: retq %tmp = select i1 %arg, float 5.000000e+00, float 6.000000e+00 %B2 = fdiv float %tmp, 0.000000e+00