[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;
}