diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2016-02-29 11:12:23 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2016-02-29 11:12:23 +0000 |
commit | f5b2a47ac69a91be61a99f16d5b6bbab02e92b77 (patch) | |
tree | 5e1119e19bbdc8aab2e6203a9f910a457b452925 /llvm/lib/Analysis | |
parent | 27ba83fd45b05550bf8c2bd9a10a2b23c7b5f67e (diff) | |
download | bcm5719-llvm-f5b2a47ac69a91be61a99f16d5b6bbab02e92b77.tar.gz bcm5719-llvm-f5b2a47ac69a91be61a99f16d5b6bbab02e92b77.zip |
[InstSimplify] fsub 0.0, (fsub -0.0, X) ==> X is only safe if signed zeros are ignored.
Only allow fsub -0.0, (fsub -0.0, X) ==> X without nsz. PR26746.
llvm-svn: 262212
Diffstat (limited to 'llvm/lib/Analysis')
-rw-r--r-- | llvm/lib/Analysis/InstructionSimplify.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp index 61e7296d05f..aca19de4f17 100644 --- a/llvm/lib/Analysis/InstructionSimplify.cpp +++ b/llvm/lib/Analysis/InstructionSimplify.cpp @@ -833,14 +833,15 @@ static Value *SimplifyFSubInst(Value *Op0, Value *Op1, FastMathFlags FMF, (FMF.noSignedZeros() || CannotBeNegativeZero(Op0))) return Op0; - // fsub 0, (fsub -0.0, X) ==> X + // fsub -0.0, (fsub -0.0, X) ==> X Value *X; - if (match(Op0, m_AnyZero())) { - if (match(Op1, m_FSub(m_NegZero(), m_Value(X)))) - return X; - if (FMF.noSignedZeros() && match(Op1, m_FSub(m_AnyZero(), m_Value(X)))) - return X; - } + if (match(Op0, m_NegZero()) && match(Op1, m_FSub(m_NegZero(), m_Value(X)))) + return X; + + // fsub 0.0, (fsub 0.0, X) ==> X if signed zeros are ignored. + if (FMF.noSignedZeros() && match(Op0, m_NegZero()) && + match(Op1, m_FSub(m_AnyZero(), m_Value(X)))) + return X; // fsub nnan x, x ==> 0.0 if (FMF.noNaNs() && Op0 == Op1) |