[InstSimplify] fold fsub+fsub with common operand

llvm-svn: 339171
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
index 02137a5..d0794364 100644
--- a/llvm/lib/Analysis/InstructionSimplify.cpp
+++ b/llvm/lib/Analysis/InstructionSimplify.cpp
@@ -4396,6 +4396,11 @@
   if (FMF.noNaNs() && Op0 == Op1)
     return Constant::getNullValue(Op0->getType());
 
+  // Y - (Y - X) --> X
+  if (FMF.noSignedZeros() && FMF.allowReassoc() &&
+      match(Op1, m_FSub(m_Specific(Op0), m_Value(X))))
+    return X;
+
   return nullptr;
 }