[InstSimplify] fsub nnan x, x -> 0.0 is valid without ninf
authorBenjamin Kramer <benny.kra@googlemail.com>
Sun, 14 Jun 2015 21:01:20 +0000 (21:01 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Sun, 14 Jun 2015 21:01:20 +0000 (21:01 +0000)
Both inf - inf and (-inf) - (-inf) are NaN, so it's already covered by
nnan.

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

lib/Analysis/InstructionSimplify.cpp
test/Transforms/InstSimplify/fast-math.ll

index 5e3b415a2a6bce02a4afcb4a2a1d324884d64fec..8f7a940aa9547f30e8eb64a5541d53886f0a71fa 100644 (file)
@@ -854,8 +854,8 @@ static Value *SimplifyFSubInst(Value *Op0, Value *Op1, FastMathFlags FMF,
       return X;
   }
 
-  // fsub nnan ninf x, x ==> 0.0
-  if (FMF.noNaNs() && FMF.noInfs() && Op0 == Op1)
+  // fsub nnan x, x ==> 0.0
+  if (FMF.noNaNs() && Op0 == Op1)
     return Constant::getNullValue(Op0->getType());
 
   return nullptr;
index 0336301c354a7eb3cdccca5a659722eb38b9fe0c..c9ae7ef0f09b2394ce04d0410d90f8ce0f04156c 100644 (file)
@@ -70,17 +70,17 @@ define float @fadd_fsub_0(float %a) {
   ret float %ret
 }
 
-; fsub nnan ninf x, x ==> 0.0
+; fsub nnan x, x ==> 0.0
 ; CHECK-LABEL: @fsub_x_x(
 define float @fsub_x_x(float %a) {
 ; X - X ==> 0
-  %zero1 = fsub nnan ninf float %a, %a
+  %zero1 = fsub nnan float %a, %a
 
 ; Dont fold
 ; CHECK: %no_zero1 = fsub
   %no_zero1 = fsub ninf float %a, %a
 ; CHECK: %no_zero2 = fsub
-  %no_zero2 = fsub nnan float %a, %a
+  %no_zero2 = fsub float %a, %a
 ; CHECK: %no_zero = fadd
   %no_zero = fadd float %no_zero1, %no_zero2