Revision tags: llvmorg-15.0.0-rc3 |
|
#
f7ab70cf |
| 24-Aug-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] reduce disguised mul+add factorization
~(A * C1) + A --> (A * (1 - C1)) - 1
This is a non-obvious mix of bitwise logic and math: https://alive2.llvm.org/ce/z/U7ACVT
The pattern may b
[InstCombine] reduce disguised mul+add factorization
~(A * C1) + A --> (A * (1 - C1)) - 1
This is a non-obvious mix of bitwise logic and math: https://alive2.llvm.org/ce/z/U7ACVT
The pattern may be produced by Negator from the more typical code seen in issue #57255.
show more ...
|
#
2f217c12 |
| 24-Aug-2022 |
Simon Pilgrim <llvm-dev@redking.me.uk> |
[InstCombine] Canonicalize ((X & -X) - 1) --> ((X - 1) & ~X) (PR51784)
Enables the ctpop((x & -x ) - 1) -> cttz(x, false) fold
Alive2: https://alive2.llvm.org/ce/z/EDk4h7 (((X & -X) - 1) --> (~X &
[InstCombine] Canonicalize ((X & -X) - 1) --> ((X - 1) & ~X) (PR51784)
Enables the ctpop((x & -x ) - 1) -> cttz(x, false) fold
Alive2: https://alive2.llvm.org/ce/z/EDk4h7 (((X & -X) - 1) --> (~X & (X - 1)) )
Alive2: https://alive2.llvm.org/ce/z/8Yr3XG (CTPOP -> CTTZ)
Fixes #51126
Differential Revision: https://reviews.llvm.org/D110488
show more ...
|
#
80cc8f0f |
| 24-Aug-2022 |
Simon Pilgrim <llvm-dev@redking.me.uk> |
Revert rGc360955c4804e9b25017372cb4c6be7adcb216ce "[InstCombine] Canonicalize ((X & -X) - 1) --> (~X & (X - 1)) (PR51784)"
The test changes are failing on some buildbots (but not others.....).
|
#
c360955c |
| 24-Aug-2022 |
Simon Pilgrim <llvm-dev@redking.me.uk> |
[InstCombine] Canonicalize ((X & -X) - 1) --> (~X & (X - 1)) (PR51784)
Enables the ctpop((x & -x ) - 1) -> cttz(x, false) fold
Alive2: https://alive2.llvm.org/ce/z/EDk4h7 (((X & -X) - 1) --> (~X &
[InstCombine] Canonicalize ((X & -X) - 1) --> (~X & (X - 1)) (PR51784)
Enables the ctpop((x & -x ) - 1) -> cttz(x, false) fold
Alive2: https://alive2.llvm.org/ce/z/EDk4h7 (((X & -X) - 1) --> (~X & (X - 1)) )
Alive2: https://alive2.llvm.org/ce/z/8Yr3XG (CTPOP -> CTTZ)
Fixes #51126
Differential Revision: https://reviews.llvm.org/D110488
show more ...
|
Revision tags: llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init |
|
#
f82c55fa |
| 18-Jul-2022 |
Jay Foad <jay.foad@amd.com> |
[InstCombine] Change order of canonicalization of ADD and AND
Canonicalize ((x + C1) & C2) --> ((x & C2) + C1) for suitable constants C1 and C2, instead of the other way round. This should allow mor
[InstCombine] Change order of canonicalization of ADD and AND
Canonicalize ((x + C1) & C2) --> ((x & C2) + C1) for suitable constants C1 and C2, instead of the other way round. This should allow more constant ADDs to be matched as part of addressing modes for loads and stores.
Differential Revision: https://reviews.llvm.org/D130080
show more ...
|
#
fa68d93d |
| 11-Aug-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] fold reassociative fadd with negated operand
We manage to iteratively achieve this result with no extra uses, and the reassociate pass can also do this, but this pattern falls through
[InstCombine] fold reassociative fadd with negated operand
We manage to iteratively achieve this result with no extra uses, and the reassociate pass can also do this, but this pattern falls through the cracks in the example from issue #57053.
show more ...
|
#
5eaeeed8 |
| 29-Jul-2022 |
Nikita Popov <npopov@redhat.com> |
[InstCombine] Avoid ConstantExpr::getFNeg() calls (NFCI)
Instead call the constant folding API, which can fail. For now, this should be NFC, as we still allow the creation of fneg constant expressio
[InstCombine] Avoid ConstantExpr::getFNeg() calls (NFCI)
Instead call the constant folding API, which can fail. For now, this should be NFC, as we still allow the creation of fneg constant expressions.
show more ...
|
#
08091a99 |
| 22-Jul-2022 |
Sanjay Patel <spatel@rotateright.com> |
Revert "[InstCombine] enhance fold for subtract-from-constant -> xor"
This reverts commit 79bb915fb60b2cd220d89e3bb54f67abb8cdb7bd. This caused regressions because SCEV works better with sub.
|
#
fc18a882 |
| 08-Jul-2022 |
Nikita Popov <npopov@redhat.com> |
[InstCombine] Avoid creating float binop ConstantExprs
Replace ConstantExpr:getFAdd etc with call to ConstantFoldBinaryOpOperands(). I'm using the constant folding API rather than IRBuilder here to
[InstCombine] Avoid creating float binop ConstantExprs
Replace ConstantExpr:getFAdd etc with call to ConstantFoldBinaryOpOperands(). I'm using the constant folding API rather than IRBuilder here to ensure that this does actually constant fold. These transforms don't use m_ImmConstant(), so this would not otherwise be guaranteed (and apparently, they can't use m_ImmConstant because they want to handle scalable vector splats).
There is an opportunity here to further migrate these to the ConstantFoldFPInstOperands() API, which would respect the denormal mode. I've held off on doing so here, because some of this code explicitly checks for denormal results, and I don't want to touch it in a mostly NFC change.
show more ...
|
#
79bb915f |
| 08-Jul-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] enhance fold for subtract-from-constant -> xor
A low-bit mask is not required: https://alive2.llvm.org/ce/z/yPShss
This matches the SDAG implementation that was updated at: 8b75671314
[InstCombine] enhance fold for subtract-from-constant -> xor
A low-bit mask is not required: https://alive2.llvm.org/ce/z/yPShss
This matches the SDAG implementation that was updated at: 8b756713140f
show more ...
|
#
142aca77 |
| 04-Jul-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] fold sub of min/max of sub with common operand
x - max(x - y, 0) --> min(x, y) x - min(x - y, 0) --> max(x, y)
https://alive2.llvm.org/ce/z/2YkqFe
issue #55470
|
#
4276d00b |
| 04-Jul-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] add helper function for sub-of-min/max folds; NFC
The test diffs are cosmetic -- but improvements -- because we let instcombine handle replacement. Instead of dropping the old value na
[InstCombine] add helper function for sub-of-min/max folds; NFC
The test diffs are cosmetic -- but improvements -- because we let instcombine handle replacement. Instead of dropping the old value name, it propagates to the new instruction.
show more ...
|
Revision tags: llvmorg-14.0.6, llvmorg-14.0.5 |
|
#
b8c2781f |
| 09-Jun-2022 |
Simon Moll <moll@cs.uni-saarland.de> |
[NFC] format InstructionSimplify & lowerCaseFunctionNames
Clang-format InstructionSimplify and convert all "FunctionName"s to "functionName". This patch does touch a lot of files but gets done with
[NFC] format InstructionSimplify & lowerCaseFunctionNames
Clang-format InstructionSimplify and convert all "FunctionName"s to "functionName". This patch does touch a lot of files but gets done with the cleanup of InstructionSimplify in one commit.
This is the alternative to the less invasive clang-format only patch: D126783
Reviewed By: spatel, rengolin
Differential Revision: https://reviews.llvm.org/D126889
show more ...
|
Revision tags: llvmorg-14.0.4 |
|
#
e6e0eb3b |
| 24-May-2022 |
Nikita Popov <npopov@redhat.com> |
[InstCombine] Strip bitcasts in GEP diff fold
Bitcasts were stripped in one case, but not the other. Of course, this no longer really matters with opaque pointers, but as I went through the trouble
[InstCombine] Strip bitcasts in GEP diff fold
Bitcasts were stripped in one case, but not the other. Of course, this no longer really matters with opaque pointers, but as I went through the trouble of tracking this down, we may as well remove one typed vs opaque pointer optimization discrepancy.
show more ...
|
#
be7f09f7 |
| 16-May-2022 |
Sanjay Patel <spatel@rotateright.com> |
[IR] create and use helper functions that test the signbit; NFCI
|
#
2a0837aa |
| 13-May-2022 |
Chenbing Zheng <Chenbing.Zheng@streamcomputing.com> |
[InstCombine] fix sub(add(X,Y),umin(Y,Z)) --> add(X,usub.sat(Y,Z))
This patch fix bug left in D124503. We should do sub(add(X,Z),umin(Y,Z)) --> add(X,usub.sat(Z,Y)) instead of sub(add(X,Z),umin(Y,Z)
[InstCombine] fix sub(add(X,Y),umin(Y,Z)) --> add(X,usub.sat(Y,Z))
This patch fix bug left in D124503. We should do sub(add(X,Z),umin(Y,Z)) --> add(X,usub.sat(Z,Y)) instead of sub(add(X,Z),umin(Y,Z)) --> add(X,usub.sat(Y,Z)).
Reviewed By: spatel
Differential Revision: https://reviews.llvm.org/D125352
show more ...
|
#
394c683d |
| 07-May-2022 |
Chenbing Zheng <Chenbing.Zheng@streamcomputing.com> |
[InstCombine] sub(add(X,Y),umin(Y,Z)) --> add(X,usub.sat(Y,Z))
Alive2: https://alive2.llvm.org/ce/z/2UNVbp
Reviewed By: RKSimon, spatel
Differential Revision: https://reviews.llvm.org/D124503
|
Revision tags: llvmorg-14.0.3, llvmorg-14.0.2 |
|
#
ffe13960 |
| 22-Apr-2022 |
Simon Pilgrim <llvm-dev@redking.me.uk> |
[InstCombine] Fold (A & 2^C1) + A => A & (2^C1 - 1) iff bit C1 in A is a sign bit (PR21929)
Alive2: https://alive2.llvm.org/ce/z/Ygq26C
This is the final missing fold to handle the modulo2 simplifi
[InstCombine] Fold (A & 2^C1) + A => A & (2^C1 - 1) iff bit C1 in A is a sign bit (PR21929)
Alive2: https://alive2.llvm.org/ce/z/Ygq26C
This is the final missing fold to handle the modulo2 simplification: https://github.com/llvm/llvm-project/issues/22303
Fixes #22303
Differential Revision: https://reviews.llvm.org/D123374
show more ...
|
Revision tags: llvmorg-14.0.1 |
|
#
431e93f4 |
| 11-Apr-2022 |
Simon Pilgrim <llvm-dev@redking.me.uk> |
[InstCombine] Fold sub(add(x,y),min/max(x,y)) -> max/min(x,y) (PR38280)
As discussed on Issue #37628, we can flip a min/max node if we're subtracting from the sum of the node's operands
Alive2: htt
[InstCombine] Fold sub(add(x,y),min/max(x,y)) -> max/min(x,y) (PR38280)
As discussed on Issue #37628, we can flip a min/max node if we're subtracting from the sum of the node's operands
Alive2: https://alive2.llvm.org/ce/z/W_KXfy
Differential Revision: https://reviews.llvm.org/D123399
show more ...
|
#
4397504c |
| 24-Mar-2022 |
Dávid Bolvanský <david.bolvansky@gmail.com> |
[NFCI] Fix set-but-unused warning in InstCombineAddSub.cpp
|
#
598721f8 |
| 15-Mar-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] try harder to propagate 'nsz' through fneg-of-select
This can be viewed as swapping the select arms: https://alive2.llvm.org/ce/z/jUvFMJ ...so we don't have the 'nsz' problem with the
[InstCombine] try harder to propagate 'nsz' through fneg-of-select
This can be viewed as swapping the select arms: https://alive2.llvm.org/ce/z/jUvFMJ ...so we don't have the 'nsz' problem with the more general fold.
This unlocks other folds for the motivating fabs example. This was discussed in issue #38828.
show more ...
|
Revision tags: llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2 |
|
#
d5ea3b2f |
| 24-Feb-2022 |
Nikita Popov <npopov@redhat.com> |
[InstCombine] Remove sub of SPF min/max fold (NFCI)
This isn't necessary anymore, now that we canonicalize SPF min/max to intrinsics. Might not be strictly NFC due to worklist order changes.
|
#
5379f76e |
| 24-Feb-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] try harder to preserve 'nsz' in fneg-of-select transform
The corner case where 'nsz' needs to be removed is very narrow as discussed here: https://reviews.llvm.org/rG3cdd05e519dd
If t
[InstCombine] try harder to preserve 'nsz' in fneg-of-select transform
The corner case where 'nsz' needs to be removed is very narrow as discussed here: https://reviews.llvm.org/rG3cdd05e519dd
If the select condition is not undef, there's no problem with propagating 'nsz': https://alive2.llvm.org/ce/z/4GWJdq
show more ...
|
#
e2f627e5 |
| 23-Feb-2022 |
Nikita Popov <npopov@redhat.com> |
[InstCombine] Fold sub of umin to usub.sat
We were handling sub of umax, but not the conjugated umin case.
https://alive2.llvm.org/ce/z/4fdZfy https://alive2.llvm.org/ce/z/BhUQBM
|
Revision tags: llvmorg-14.0.0-rc1, llvmorg-15-init |
|
#
f15014ff |
| 26-Jan-2022 |
Benjamin Kramer <benny.kra@googlemail.com> |
Revert "Rename llvm::array_lengthof into llvm::size to match std::size from C++17"
This reverts commit ef8206320769ad31422a803a0d6de6077fd231d2.
- It conflicts with the existing llvm::size in STLEx
Revert "Rename llvm::array_lengthof into llvm::size to match std::size from C++17"
This reverts commit ef8206320769ad31422a803a0d6de6077fd231d2.
- It conflicts with the existing llvm::size in STLExtras, which will now never be called. - Calling it without llvm:: breaks C++17 compat
show more ...
|