summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/InstructionSimplify.cpp
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2018-08-07 20:32:55 +0000
committerSanjay Patel <spatel@rotateright.com>2018-08-07 20:32:55 +0000
commit9b073470334adfedfe265728382c7c5e07af319b (patch)
treed21cfac23e718e35eb5e341d9746a89938abdd37 /llvm/lib/Analysis/InstructionSimplify.cpp
parent3e7b9db2d9943eadc953500c995919a8168cd56a (diff)
downloadbcm5719-llvm-9b073470334adfedfe265728382c7c5e07af319b.tar.gz
bcm5719-llvm-9b073470334adfedfe265728382c7c5e07af319b.zip
[InstSimplify] fold fsub+fadd with common operand
llvm-svn: 339176
Diffstat (limited to 'llvm/lib/Analysis/InstructionSimplify.cpp')
-rw-r--r--llvm/lib/Analysis/InstructionSimplify.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
index 22ced5a8665..13805437b54 100644
--- a/llvm/lib/Analysis/InstructionSimplify.cpp
+++ b/llvm/lib/Analysis/InstructionSimplify.cpp
@@ -4359,6 +4359,14 @@ static Value *SimplifyFAddInst(Value *Op0, Value *Op1, FastMathFlags FMF,
match(Op1, m_FSub(m_AnyZeroFP(), m_Specific(Op0)))))
return ConstantFP::getNullValue(Op0->getType());
+ // (X - Y) + Y --> X
+ // Y + (X - Y) --> X
+ Value *X;
+ if (FMF.noSignedZeros() && FMF.allowReassoc() &&
+ (match(Op0, m_FSub(m_Value(X), m_Specific(Op1))) ||
+ match(Op1, m_FSub(m_Value(X), m_Specific(Op0)))))
+ return X;
+
return nullptr;
}
OpenPOWER on IntegriCloud