[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

llvm-svn: 289153

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

index bbabf2a..e620e09 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 ef8adcb..21c9fdd 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