Sanjay Patel
6840c5ff75
[ValueTracking, InstCombine] canonicalize fcmp ord/uno with non-NAN ops to null constants
...
This is a preliminary step towards solving the remaining part of PR27145 - IR for isfinite():
https://bugs.llvm.org/show_bug.cgi?id=27145
In order to solve that one more generally, we need to add matching for and/or of fcmp ord/uno
with a constant operand.
But while looking at those patterns, I realized we were missing a canonicalization for nonzero
constants. Rather than limiting to just folds for constants, we're adding a general value
tracking method for this based on an existing DAG helper.
By transforming everything to 0.0, we can simplify the existing code in foldLogicOfFCmps()
and pick up missing vector folds.
Differential Revision: https://reviews.llvm.org/D37427
llvm-svn: 312591
2017-09-05 23:13:13 +00:00
Sanjay Patel
661beccdd9
[InstCombine] add tests for fcmp ord/uno canonicalization; NFC
...
Currently, we canonicalize some cases to use 0.0, but we miss others.
llvm-svn: 312445
2017-09-03 15:35:10 +00:00
Tim Shen
aec68b263d
[InstCombine] Simplify and correct folding fcmps with the same children
...
Summary: Take advantage of FCmpInst::Predicate's bit pattern and handle (fcmp *, x, y) | (fcmp *, x, y) and (fcmp *, x, y) & (fcmp *, x, y) more consistently. Also fold more FCmpInst::FCMP_FALSE and FCmpInst::FCMP_TRUE to constants.
Currently InstCombine wrongly folds (fcmp ogt, x, y) | (fcmp ord, x, y) to (fcmp ogt, x, y); this patch also fixes that.
Reviewers: spatel
Subscribers: llvm-commits, iteratee, echristo
Differential Revision: http://reviews.llvm.org/D21775
llvm-svn: 274156
2016-06-29 20:10:17 +00:00
Tim Shen
860a67eb4c
[InstCombine, NFC] Change the generated variable names by creating new instructions
...
This removes some noise for D21775's test changes.
llvm-svn: 274155
2016-06-29 20:10:13 +00:00
Tim Shen
4561e784f4
[InstCombine] Add full tests for FoldAndOfFCmps and FoldOrOfFCmps
...
Summary: This adds tests for covering all cases that FoldAndOfFCmps and FoldOrOfFCmps handle.
Reviewers: spatel
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D21844
llvm-svn: 274144
2016-06-29 17:55:11 +00:00
Sanjay Patel
8ce43c098b
minimize regression tests and update checks
...
llvm-svn: 274046
2016-06-28 18:33:10 +00:00
Benjamin Kramer
e89c705030
InstCombine: Check the operand types before merging fcmp ord & fcmp ord.
...
Fixes PR15737.
llvm-svn: 179417
2013-04-12 21:56:23 +00:00
Benjamin Kramer
bc2724f6e0
Fix broken tests.
...
llvm-svn: 165019
2012-10-02 15:49:34 +00:00
Manman Ren
c2bc2d106b
InstCombine: fix a bug when combining (fcmp cc0 x, y) && (fcmp cc1 x, y).
...
uno && ueq was converted to ueq, it should be converted to uno.
llvm-svn: 158441
2012-06-14 05:57:42 +00:00
Chad Rosier
faa3894628
Fix combine of uno && ord -> false so that the ordering of the fcmps doesn't
...
matter.
rdar://11579835
llvm-svn: 158084
2012-06-06 17:22:40 +00:00
Chad Rosier
280e5df2ac
Remove extraneous CHECK-NOTs from previous commit and add a new test case.
...
llvm-svn: 158045
2012-06-06 02:12:17 +00:00
Chad Rosier
1de1b54e72
FileCheckize this test.
...
llvm-svn: 158044
2012-06-06 01:38:32 +00:00
Dan Gohman
72a13d2476
Use opt -S instead of piping bitcode output through llvm-dis.
...
llvm-svn: 81257
2009-09-08 22:34:10 +00:00
Dan Gohman
9737a63ed8
Change these tests to feed the assembly files to opt directly, instead
...
of using llvm-as, now that opt supports this.
llvm-svn: 81226
2009-09-08 16:50:01 +00:00
Evan Cheng
ce70752b11
- Somehow I forgot about one / une.
...
- Renumber fcmp predicates to match their icmp counterparts.
- Try swapping operands to expose more optimization opportunities.
llvm-svn: 57513
2008-10-14 18:13:38 +00:00
Evan Cheng
67786cce66
Optimize anding of two fcmp into a single fcmp if the operands are the same. e.g. uno && ueq -> ueq
...
ord && olt -> olt
ord && ueq -> oeq
llvm-svn: 57507
2008-10-14 17:15:11 +00:00