#
5aa6bbe7 |
| 25-May-2023 |
Jay Foad <jay.foad@amd.com> |
[KnownBits] Check functions that return zero for poison results
Differential Revision: https://reviews.llvm.org/D151456
|
#
d2502eb0 |
| 22-May-2023 |
Nikita Popov <npopov@redhat.com> |
[KnownBits] Add support for nuw/nsw on shifts
Implement precise nuw/nsw support in the KnownBits implementation, replacing the rather crude handling in ValueTracking.
Differential Revision: https:/
[KnownBits] Add support for nuw/nsw on shifts
Implement precise nuw/nsw support in the KnownBits implementation, replacing the rather crude handling in ValueTracking.
Differential Revision: https://reviews.llvm.org/D151208
show more ...
|
#
d4bfc144 |
| 24-May-2023 |
Nikita Popov <npopov@redhat.com> |
[KnownBits] Check for conflict-freedom in exhaustive tests
And make sure udiv() Exact does not produce conflicts.
|
#
5f50b180 |
| 23-May-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[KnownBits] Add implementations for saturating add/sub functions
These where previously missing. Even in the case where overflow is indeterminate we can still deduce some of the low/high bits.
Revi
[KnownBits] Add implementations for saturating add/sub functions
These where previously missing. Even in the case where overflow is indeterminate we can still deduce some of the low/high bits.
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D150102
show more ...
|
#
4fd3401e |
| 23-May-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[KnownBits] Improve implementation of `KnownBits::abs`
`abs` preserves the lowest set bit, so if we know the lowest set bit, set it in the output.
As well, implement the case where the operand is k
[KnownBits] Improve implementation of `KnownBits::abs`
`abs` preserves the lowest set bit, so if we know the lowest set bit, set it in the output.
As well, implement the case where the operand is known negative.
Reviewed By: foad, RKSimon
Differential Revision: https://reviews.llvm.org/D150100
show more ...
|
Revision tags: llvmorg-16.0.4 |
|
#
7d05ab99 |
| 07-May-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[KnownBits] Improve `KnownBits::udiv`
We can more precisely determine the upper bits doing `MaxNum / MinDenum` as opposed to only using the MSB.
As well, if the `exact` flag is set, we can sometime
[KnownBits] Improve `KnownBits::udiv`
We can more precisely determine the upper bits doing `MaxNum / MinDenum` as opposed to only using the MSB.
As well, if the `exact` flag is set, we can sometimes determine some of the low-bits.
Differential Revision: https://reviews.llvm.org/D150094
show more ...
|
#
8c569c92 |
| 07-May-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[KnownBits] Add implementation for `KnownBits::sdiv`
Can figure out some of the upper bits (similiar to `udiv`) if we know the sign of the inputs.
As well, if we have the `exact` flag we can someti
[KnownBits] Add implementation for `KnownBits::sdiv`
Can figure out some of the upper bits (similiar to `udiv`) if we know the sign of the inputs.
As well, if we have the `exact` flag we can sometimes determine some low-bits.
Differential Revision: https://reviews.llvm.org/D150093
show more ...
|
#
0b81ff3a |
| 16-May-2023 |
Nikita Popov <npopov@redhat.com> |
[KnownBits] Handle shifts over wide types
Do not assert if the bit width is larger than 64 bits. This case is currently hidden from the IR layer by other checks, but gets exposed with future changes.
|
#
9d73a8bd |
| 15-May-2023 |
Nikita Popov <npopov@redhat.com> |
[KnownBits] Make shl/lshr/ashr implementations optimal
The implementations for shifts were suboptimal in the case where the max shift amount was >= bitwidth. In that case we should still use the usu
[KnownBits] Make shl/lshr/ashr implementations optimal
The implementations for shifts were suboptimal in the case where the max shift amount was >= bitwidth. In that case we should still use the usual code clamped to BitWidth-1 rather than just giving up entirely.
Additionally, there was an implementation bug where the known zero bits for the individual shift amounts were not set in the shl/lshr implementations. I think after these changes, we'll be able to drop some of the code in ValueTracking which *also* evaluates all possible shift amounts and has been papering over this issue.
For the "all poison" case I've opted to return an unknown value for now. It would be better to return zero, but this has fairly substantial test fallout, so I figured it's best to not mix it into this change. (The "correct" return value would be a conflict, but given that a lot of our APIs assert conflict-freedom, that's probably not the best idea to actually return.)
Differential Revision: https://reviews.llvm.org/D150587
show more ...
|
#
3a867133 |
| 15-May-2023 |
Jay Foad <jay.foad@amd.com> |
[KnownBitsTest] Remove stray semicolons
|
#
0f1fb626 |
| 15-May-2023 |
Nikita Popov <npopov@redhat.com> |
[KnownBitsTest] Align with ConstantRange test infrastructure (NFC)
Align the way we perform exhaustive tests for KnownBits with what we do for ConstantRange. Test each case separately by specifying
[KnownBitsTest] Align with ConstantRange test infrastructure (NFC)
Align the way we perform exhaustive tests for KnownBits with what we do for ConstantRange. Test each case separately by specifying a function on KnownBits and one on APInts. Additionally, specify a callback that determines which cases are supposed to be optimal, rather than only correct. Unlike the ConstantRange case there is a well-defined, unique notion of optimality for KnownBits.
If a failure occurs, print out the inputs, computed result and exact result. Adjust the printing function to produce the output in a format that is meaningful for KnownBits, i.e. print the actual known bits, using ? to signify unknowns and ! to signify conflicts.
show more ...
|
Revision tags: llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1 |
|
#
6749d187 |
| 26-Jan-2023 |
Jay Foad <jay.foad@amd.com> |
[KnownBits] Add blsi and blsmsk
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D142519
|
Revision tags: llvmorg-17-init, llvmorg-15.0.7 |
|
#
2fa744e6 |
| 16-Dec-2022 |
Fangrui Song <i@maskray.me> |
std::optional::value => operator*/operator->
value() has undesired exception checking semantics and calls __throw_bad_optional_access in libc++. Moreover, the API is unavailable without _LIBCPP_NO_E
std::optional::value => operator*/operator->
value() has undesired exception checking semantics and calls __throw_bad_optional_access in libc++. Moreover, the API is unavailable without _LIBCPP_NO_EXCEPTIONS on older Mach-O platforms (see _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS).
This commit fixes LLVMAnalysis and its dependencies.
show more ...
|
#
b1df3a2c |
| 16-Dec-2022 |
Fangrui Song <i@maskray.me> |
[Support] llvm::Optional => std::optional
https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716
|
Revision tags: llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, working, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1 |
|
#
9082c131 |
| 29-Jul-2022 |
Simon Pilgrim <llvm-dev@redking.me.uk> |
[Support] Add KnownBits::concat method
Add a method for the various cases where we need to concatenate 2 KnownBits together (BUILD_PAIR and SHIFT_PARTS in particular) - uses the existing APInt::conc
[Support] Add KnownBits::concat method
Add a method for the various cases where we need to concatenate 2 KnownBits together (BUILD_PAIR and SHIFT_PARTS in particular) - uses the existing APInt::concat 'HiBits.concat(LoBits)' convention
Differential Revision: https://reviews.llvm.org/D130557
show more ...
|
Revision tags: llvmorg-16-init |
|
#
611ffcf4 |
| 14-Jul-2022 |
Kazu Hirata <kazu@google.com> |
[llvm] Use value instead of getValue (NFC)
|
#
3361a364 |
| 13-Jul-2022 |
Kazu Hirata <kazu@google.com> |
[llvm] Use has_value instead of hasValue (NFC)
|
#
3b7c3a65 |
| 25-Jun-2022 |
Kazu Hirata <kazu@google.com> |
Revert "Don't use Optional::hasValue (NFC)"
This reverts commit aa8feeefd3ac6c78ee8f67bf033976fc7d68bc6d.
|
#
aa8feeef |
| 25-Jun-2022 |
Kazu Hirata <kazu@google.com> |
Don't use Optional::hasValue (NFC)
|
Revision tags: llvmorg-14.0.6, llvmorg-14.0.5, llvmorg-14.0.4 |
|
#
a694546f |
| 16-May-2022 |
Nikita Popov <npopov@redhat.com> |
[KnownBits] Add operator==
Checking whether two KnownBits are the same is somewhat common, mainly in test code.
I don't think there is a lot of room for confusion with "determine what the KnownBits
[KnownBits] Add operator==
Checking whether two KnownBits are the same is somewhat common, mainly in test code.
I don't think there is a lot of room for confusion with "determine what the KnownBits for an icmp eq would be", as that has a different result type (this is what the eq() method implements, which returns Optional<bool>).
Differential Revision: https://reviews.llvm.org/D125692
show more ...
|
Revision tags: llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1, llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2, llvmorg-14.0.0-rc1, llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2 |
|
#
cbcbbd6a |
| 03-Jan-2022 |
Craig Topper <craig.topper@sifive.com> |
[ValueTracking][SelectionDAG] Rename ComputeMinSignedBits->ComputeMaxSignificantBits. NFC
This function returns an upper bound on the number of bits needed to represent the signed value. Use "Max" t
[ValueTracking][SelectionDAG] Rename ComputeMinSignedBits->ComputeMaxSignificantBits. NFC
This function returns an upper bound on the number of bits needed to represent the signed value. Use "Max" to match similar functions in KnownBits like countMaxActiveBits.
Rename APInt::getMinSignedBits->getSignificantBits. Keeping the old name around to keep this patch size down. Will do a bulk rename as follow up.
Rename KnownBits::countMaxSignedBits->countMaxSignificantBits.
Reviewed By: lebedev.ri, RKSimon, spatel
Differential Revision: https://reviews.llvm.org/D116522
show more ...
|
#
db81324c |
| 03-Jan-2022 |
Craig Topper <craig.topper@sifive.com> |
[Support] Add KnownBits::countMaxSignedBits(). Make KnownBits::countMinSignBits() always return at least 1.
Even if we don't have any known bits, we can assume that there is at least 1 sign bit. Thi
[Support] Add KnownBits::countMaxSignedBits(). Make KnownBits::countMinSignBits() always return at least 1.
Even if we don't have any known bits, we can assume that there is at least 1 sign bit. This is consistent with ComputeNumSignBits which always returns at least 1.
Add KnownBits::countMaxSignedBits() which computes the number of bits needed to represent all signed values with those known bits. This is the signed equivalent of countMaxActiveBits().
Split from D116469.
Reviewed By: lebedev.ri
Differential Revision: https://reviews.llvm.org/D116500
show more ...
|
Revision tags: llvmorg-13.0.1-rc1 |
|
#
684cbae8 |
| 11-Oct-2021 |
Roman Lebedev <lebedev.ri@gmail.com> |
[KnownBits] Introduce `countMaxActiveBits()` and use it in a few places
|
#
a9bceb2b |
| 30-Sep-2021 |
Jay Foad <jay.foad@amd.com> |
[APInt] Stop using soft-deprecated constructors and methods in llvm. NFC.
Stop using APInt constructors and methods that were soft-deprecated in D109483. This fixes all the uses I found in llvm, exc
[APInt] Stop using soft-deprecated constructors and methods in llvm. NFC.
Stop using APInt constructors and methods that were soft-deprecated in D109483. This fixes all the uses I found in llvm, except for the APInt unit tests which should still test the deprecated methods.
Differential Revision: https://reviews.llvm.org/D110807
show more ...
|
Revision tags: llvmorg-13.0.0, llvmorg-13.0.0-rc4, llvmorg-13.0.0-rc3 |
|
#
735f4671 |
| 09-Sep-2021 |
Chris Lattner <clattner@nondot.org> |
[APInt] Normalize naming on keep constructors / predicate methods.
This renames the primary methods for creating a zero value to `getZero` instead of `getNullValue` and renames predicates like `isAl
[APInt] Normalize naming on keep constructors / predicate methods.
This renames the primary methods for creating a zero value to `getZero` instead of `getNullValue` and renames predicates like `isAllOnesValue` to simply `isAllOnes`. This achieves two things:
1) This starts standardizing predicates across the LLVM codebase, following (in this case) ConstantInt. The word "Value" doesn't convey anything of merit, and is missing in some of the other things.
2) Calling an integer "null" doesn't make any sense. The original sin here is mine and I've regretted it for years. This moves us to calling it "zero" instead, which is correct!
APInt is widely used and I don't think anyone is keen to take massive source breakage on anything so core, at least not all in one go. As such, this doesn't actually delete any entrypoints, it "soft deprecates" them with a comment.
Included in this patch are changes to a bunch of the codebase, but there are more. We should normalize SelectionDAG and other APIs as well, which would make the API change more mechanical.
Differential Revision: https://reviews.llvm.org/D109483
show more ...
|