Noah Goldstein
5265be11b1
[InstSimply] Simplify (fmul -x, +/-0) -> -/+0
...
We already handle the `+x` case, and noticed it was missing in the bug
affecting #82555
Proofs: https://alive2.llvm.org/ce/z/WUSvmV
Closes #85345
2024-03-18 15:11:55 -05:00
Noah Goldstein
6984ba7b94
[InstSimply] Add tests for simplify (fmul -x, +/-0); NFC
2024-03-18 15:11:55 -05:00
Matt Arsenault
07365f4a40
InstSimplify: Combine computeKnownFPClass calls and pass AssumptionCache
2023-05-18 23:29:47 +01:00
Matt Arsenault
c663b8c429
ValueTracking: Teach CannotBeOrderedLessThanZero about rounding intrinsics
...
These should obviously preserve the sign although the variety of these
always confuses me.
2023-01-15 09:44:45 -05:00
Matt Arsenault
7f4429c0e4
ValueTracking: Teach CannotBeOrderedLessThanZero about copysign
2022-12-06 09:01:39 -05:00
Matt Arsenault
dbca874faa
ValueTracking: Teach CannotBeOrderedLessThanZero about trivial ops
...
Handle canonicalize and arithmetic.fence
2022-12-05 08:39:07 -05:00
Sanjay Patel
c2c48f0c96
[InstSimplify] add test for fsub with inf operand; NFC
...
Verify that constant negation works with a partial undef vector.
Also, remove a bogus TODO comment on a related test.
2022-11-11 09:17:20 -05:00
Sanjay Patel
21f1b2da95
[InstSimplify] fold fsub nnan with Inf operand
...
Similar to fbc2c8f2fbbb, but if we have a non-canonical
fsub with constant operand 1, then flip the sign of the
Infinity:
https://alive2.llvm.org/ce/z/vKWfhW
If Infinity is operand 0, then the sign remains:
https://alive2.llvm.org/ce/z/73d97C
2022-11-11 08:42:44 -05:00
Sanjay Patel
fbc2c8f2fb
[InstSimplify] fold X +nnan Inf
...
If we exclude NaN (and therefore the opposite Inf),
anything plus Inf is Inf:
https://alive2.llvm.org/ce/z/og3dj9
2022-11-10 17:13:26 -05:00
Sanjay Patel
58167f67dc
[InstSimplify] add tests for fadd/fsub with inf constant operand; NFC
2022-11-10 17:13:26 -05:00
Sanjay Patel
0a1210e482
[InstSimplify] try harder to fold fmul with 0.0 operand
...
https://alive2.llvm.org/ce/z/oShzr3
This was noted as a missing fold in D134876 (with additional
examples based on issue #58046 ).
I'm assuming that fmul with a zero operand is rare enough
that the use of ValueTracking will not noticeably increase
compile-time.
This adjusts a PowerPC codegen test that was added with D88388
because it would get folded away and no longer provide coverage
for the bug fix.
2022-10-04 11:20:01 -04:00
Sanjay Patel
b794d72bf4
[InstSimplify] add tests for fmul with 0.0 operand; NFC
2022-10-04 10:29:53 -04:00
Sanjay Patel
ba7da14d83
Revert "[InstSimplify] reduce code duplication for fmul folds; NFC"
...
This reverts commit 7b7940f9da80de6aa0b8f28a0ef809dafe4cdffc.
This missed a test update.
2022-10-03 11:21:23 -04:00
Sanjay Patel
7b7940f9da
[InstSimplify] reduce code duplication for fmul folds; NFC
...
The constant is already commuted for an fmul opcode,
but this code can be called more directly for fma,
so we have to swap for that caller. There are tests
in InstSimplify and InstCombine to verify that this
works as expected.
2022-10-03 10:36:02 -04:00
Bjorn Pettersson
b280ee1dd7
[test] Use -passes=instsimplify instead of -instsimplify in a number of tests. NFC
...
Another step moving away from the deprecated syntax of specifying
pass pipeline in opt.
Differential Revision: https://reviews.llvm.org/D119080
2022-02-07 14:26:58 +01:00
Sanjay Patel
dae68fdf9e
[InstSimplify] add/move tests for fmin/fmax; NFC
...
The new tests are duplicated from the sibling patch for codegen:
D87571
2020-09-14 10:24:19 -04:00
Sanjay Patel
5df9cb5bc7
[InstSimplify] fix test comments; NFC
2020-09-14 10:07:54 -04:00
Sanjay Patel
7bb9a2f996
[InstSimplify] fix miscompiles with maximum/minimum intrinsics
...
As discussed in the sibling codegen functionality patch D87571,
this transform was created with D52766, but it is not correct.
The incorrect test diffs were missed during review, but the
'TODO' comment about this functionality was still in the code -
we need 'nnan' to enable this fold.
2020-09-14 09:06:41 -04:00
Sanjay Patel
34d35d4a42
[ValueTracking] fix miscompile in maxnum case of cannotBeOrderedLessThanZeroImpl (PR46627)
...
A miscompile with -0.0 is shown in:
http://bugs.llvm.org/PR46627
This is because maxnum(-0.0, +0.0) does not specify a fixed result:
http://llvm.org/docs/LangRef.html#llvm-maxnum-intrinsic
So we need to tighten the constraints for when it is ok to say the
result of maxnum is positive (including +0.0).
Differential Revision: https://reviews.llvm.org/D83601
2020-07-14 08:08:09 -04:00
Sanjay Patel
9cc669d22d
[InstCombine][InstSimplify] add tests for sign of maxnum; NFC
...
More coverage for D83601.
2020-07-14 08:08:09 -04:00
Sanjay Patel
351f2b3c0a
[InstSimplify] add tests for maxnum (PR46627); NFC
2020-07-10 20:20:38 -04:00
Cameron McInally
2d2a46db8e
[InstSimplify] Teach fsub -0.0, (fneg X) ==> X about unary fneg
...
Differential Revision: https://reviews.llvm.org/D62077
llvm-svn: 361151
2019-05-20 13:13:35 +00:00
Cameron McInally
12de5425c1
[NFC][InstSimplify] Add more unary fneg tests to floating-point-arithmetic.ll
...
llvm-svn: 361076
2019-05-17 21:10:11 +00:00
Cameron McInally
bebc7d6a4e
[NFC][InstSimplify] Precommit new unary fneg test
...
llvm-svn: 361060
2019-05-17 18:34:35 +00:00
Cameron McInally
19dc8c7280
[NFC][InstSImplify] Fix flip-flopped comments and test names
...
In test/Transforms/InstSimplify/floating-point-arithmetic.ll
Differential Revision: https://reviews.llvm.org/D62069
llvm-svn: 361057
2019-05-17 17:59:17 +00:00
Cameron McInally
c3167696bc
Add FNeg support to InstructionSimplify
...
Differential Revision: https://reviews.llvm.org/D61573
llvm-svn: 360053
2019-05-06 16:05:10 +00:00
Eric Christopher
cee313d288
Revert "Temporarily Revert "Add basic loop fusion pass.""
...
The reversion apparently deleted the test/Transforms directory.
Will be re-reverting again.
llvm-svn: 358552
2019-04-17 04:52:47 +00:00
Eric Christopher
a863435128
Temporarily Revert "Add basic loop fusion pass."
...
As it's causing some bot failures (and per request from kbarton).
This reverts commit r358543/ab70da07286e618016e78247e4a24fcb84077fda.
llvm-svn: 358546
2019-04-17 02:12:23 +00:00
Thomas Lively
c339250e12
[InstCombine] InstCombine and InstSimplify for minimum and maximum
...
Summary: Depends on D52765
Reviewers: aheejin, dschuff
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D52766
llvm-svn: 344799
2018-10-19 19:01:26 +00:00
Sanjay Patel
c6944f795d
[InstSimplify] move minnum/maxnum with Inf folds from instcombine
...
llvm-svn: 339396
2018-08-09 22:20:44 +00:00
Sanjay Patel
9b07347033
[InstSimplify] fold fsub+fadd with common operand
...
llvm-svn: 339176
2018-08-07 20:32:55 +00:00
Sanjay Patel
4364d604c2
[InstSimplify] fold fadd+fsub with common operand
...
llvm-svn: 339174
2018-08-07 20:23:49 +00:00
Sanjay Patel
f7a8fb2dee
[InstSimplify] fold fsub+fsub with common operand
...
llvm-svn: 339171
2018-08-07 20:14:27 +00:00
Sanjay Patel
50976393ed
[InstSimplify] add tests for fadd/fsub; NFC
...
Instcombine gets some, but not all, of these cases via
it's internal reassociation transforms. It fails in
all cases with vector types.
llvm-svn: 339168
2018-08-07 19:49:13 +00:00
Sanjay Patel
948ff87d7d
[InstSimplify] move minnum/maxnum with common op fold from instcombine
...
llvm-svn: 339144
2018-08-07 14:36:27 +00:00
Sanjay Patel
b06d283909
[InstSimplify] add tests for minnum/maxnum with shared op; NFC
...
llvm-svn: 339142
2018-08-07 14:13:40 +00:00
Sanjay Patel
b802d18df7
[InstSimplify] move misplaced minnum/maxnum tests; NFC
...
llvm-svn: 339141
2018-08-07 14:12:08 +00:00
Sanjay Patel
3f6e9a71f7
[InstSimplify] move minnum/maxnum with undef fold from instcombine
...
llvm-svn: 338719
2018-08-02 14:33:40 +00:00
Sanjay Patel
28c7e41c09
[InstSimplify] move minnum/maxnum with same arg fold from instcombine
...
llvm-svn: 338652
2018-08-01 23:05:55 +00:00
Sanjay Patel
92d0c1c129
[InstSimplify] fold minnum/maxnum with NaN arg
...
This fold is repeated/misplaced in instcombine, but I'm
not sure if it's safe to remove that yet because some
other folds appear to be asserting that the transform
has occurred within instcombine itself.
This isn't the best fix for PR37776, but it probably
hides the bug with the given code example:
https://bugs.llvm.org/show_bug.cgi?id=37776
We have another test to demonstrate the more general bug.
llvm-svn: 337127
2018-07-15 14:52:16 +00:00
Sanjay Patel
ef71b704c2
[InstSimplify] add tests for minnum/maxnum; NFC
...
This isn't the best fix for PR37776, but it probably
hides the bug with the given code example:
https://bugs.llvm.org/show_bug.cgi?id=37776
We have another test to demonstrate the more general
bug.
llvm-svn: 337126
2018-07-15 14:46:48 +00:00
Sanjay Patel
93e64dd9a1
[PatternMatch] allow undef elements when matching vector FP +0.0
...
This continues the FP constant pattern matching improvements from:
https://reviews.llvm.org/rL327627
https://reviews.llvm.org/rL327339
https://reviews.llvm.org/rL327307
Several integer constant matchers also have this ability. I'm
separating matching of integer/pointer null from FP positive zero
and renaming/commenting to make the functionality clearer.
llvm-svn: 328461
2018-03-25 21:16:33 +00:00
Sanjay Patel
c84b48ec29
[InstSimplify, InstCombine] add/update tests with FP +0.0 vector with undef; NFC
...
llvm-svn: 328455
2018-03-25 17:48:20 +00:00
Sanjay Patel
a0d8d127c6
[PatternMatch, InstSimplify] allow undef elements when matching vector -0.0
...
This is the FP equivalent of D42818. Use it for the few cases in InstSimplify
with -0.0 folds (that's the only current use of m_NegZero()).
Differential Revision: https://reviews.llvm.org/D43792
llvm-svn: 327307
2018-03-12 18:17:01 +00:00
Sanjay Patel
49b7dc2968
[InstSimplify] add test for m_NegZero with undef elt; NFC
...
llvm-svn: 327287
2018-03-12 15:47:32 +00:00
Craig Topper
301991080e
[ValueTracking] Teach cannotBeOrderedLessThanZeroImpl to look through ExtractElement.
...
This is similar to what's done in computeKnownBits and computeSignBits. Don't do anything fancy just collect information valid for any element.
Differential Revision: https://reviews.llvm.org/D43789
llvm-svn: 326237
2018-02-27 19:53:45 +00:00
Sanjay Patel
66911b16e6
[InstCombine, InstSimplify] add tests with undef elements in constant FP vectors; NFC
...
llvm-svn: 326148
2018-02-26 23:23:02 +00:00
Craig Topper
69c8972fd1
[ValueTracking] Teach cannotBeOrderedLessThanZeroImpl to handle vector constants.
...
Summary: This allows vector fabs to be removed in more cases.
Reviewers: spatel, arsenm, RKSimon
Reviewed By: spatel
Subscribers: wdng, llvm-commits
Differential Revision: https://reviews.llvm.org/D43739
llvm-svn: 326138
2018-02-26 22:33:17 +00:00
Craig Topper
aee341ef28
[InstSimplify] Add test cases for removal of vector fabs on known positive.
...
llvm-svn: 326050
2018-02-25 06:51:52 +00:00
Craig Topper
2b8f051aaa
[InstSimplify] Remove unused parameter from test cases.
...
llvm-svn: 326049
2018-02-25 06:51:51 +00:00