[InstSimplify] fold fadd+fsub with common operand
llvm-svn: 339174
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
index d0794364..22ced5a 100644
--- a/llvm/lib/Analysis/InstructionSimplify.cpp
+++ b/llvm/lib/Analysis/InstructionSimplify.cpp
@@ -4397,8 +4397,10 @@
return Constant::getNullValue(Op0->getType());
// Y - (Y - X) --> X
+ // (X + Y) - Y --> X
if (FMF.noSignedZeros() && FMF.allowReassoc() &&
- match(Op1, m_FSub(m_Specific(Op0), m_Value(X))))
+ (match(Op1, m_FSub(m_Specific(Op0), m_Value(X))) ||
+ match(Op0, m_c_FAdd(m_Specific(Op1), m_Value(X)))))
return X;
return nullptr;