]> granicus.if.org Git - llvm/commitdiff
[InstSimplify] Add "X / 1.0" to SimplifyFDivInst.
authorZia Ansari <zia.ansari@intel.com>
Thu, 8 Dec 2016 23:27:40 +0000 (23:27 +0000)
committerZia Ansari <zia.ansari@intel.com>
Thu, 8 Dec 2016 23:27:40 +0000 (23:27 +0000)
Differential Revision: https://reviews.llvm.org/D27587

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@289153 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/InstructionSimplify.cpp
test/Transforms/InstSimplify/floating-point-arithmetic.ll

index bbabf2af691306ec717d12e7342e83a199693bca..e620e09f5db60a281cfc64399ef3d9915776f351 100644 (file)
@@ -1127,6 +1127,10 @@ static Value *SimplifyFDivInst(Value *Op0, Value *Op1, FastMathFlags FMF,
   if (match(Op1, m_Undef()))
     return Op1;
 
+  // X / 1.0 -> X
+  if (match(Op1, m_FPOne()))
+    return Op0;
+
   // 0 / X -> 0
   // Requires that NaNs are off (X could be zero) and signed zeroes are
   // ignored (X could be positive or negative, so the output sign is unknown).
@@ -4093,6 +4097,8 @@ static Value *SimplifyFPBinOp(unsigned Opcode, Value *LHS, Value *RHS,
     return SimplifyFSubInst(LHS, RHS, FMF, Q, MaxRecurse);
   case Instruction::FMul:
     return SimplifyFMulInst(LHS, RHS, FMF, Q, MaxRecurse);
+  case Instruction::FDiv:
+    return SimplifyFDivInst(LHS, RHS, FMF, Q, MaxRecurse);
   default:
     return SimplifyBinOp(Opcode, LHS, RHS, Q, MaxRecurse);
   }
index ef8adcb1646beff6a2e78d363f56a9f2e90c7806..21c9fdde15069ede72a60715a2313b52c2c85add 100644 (file)
@@ -62,12 +62,10 @@ define double @fmul_X_1(double %a) {
   ret double %b
 }
 
-; FIXME:
 ; fdiv X, 1.0 ==> X
 define float @fdiv_x_1(float %a) {
 ; CHECK-LABEL: @fdiv_x_1(
-; CHECK-NEXT:    [[RET:%.*]] = fdiv float %a, 1.000000e+00
-; CHECK-NEXT:    ret float [[RET]]
+; CHECK-NEXT:    ret float %a
 ;
   %ret = fdiv float %a, 1.0
   ret float %ret