Roman Lebedev
c329a47d9e
[CVP] @llvm.abs() handling
...
Iff we know the sigdness domain of the argument,
we can either skip @llvm.abs, or do negation directly.
Notably, INT_MIN can belong to either domain:
* X u<= INT_MIN --> X is always fine
https://alive2.llvm.org/ce/z/QB8j-C https://alive2.llvm.org/ce/z/7sFKpS
* X s<= 0 --> -X is always fine
https://alive2.llvm.org/ce/z/QbGSyq https://alive2.llvm.org/ce/z/APsN84
If all else fails, try to inferr NSW flag:
https://alive2.llvm.org/ce/z/qCJfYm
2021-04-10 16:47:31 +03:00
Nikita Popov
01bde7310b
[CVP] Remove unnecessary block splits in tests (NFC)
...
These are no longer necessary since D69686.
2020-09-27 20:55:28 +02:00
Nikita Popov
9ebeac6788
[ConstantRange][CVP] Make use of abs poison flag
...
Pass the abs poison flag to the underlying ConstantRange
implementation, allowing CVP to simplify based on it.
Importantly, this recognizes that abs with poison flag is actually
non-negative...
2020-07-30 23:06:10 +02:00
Nikita Popov
d8a98a9c35
[ConstantRange][CVP] Compute min/max/abs intrinsic ranges
...
Wire up ConstantRange::intrinsic() to the existing primitives for
min, max and abs.
The poison flag on abs is not yet taken into account.
2020-07-30 22:21:34 +02:00
Nikita Popov
95d1e668ed
[CVP] Add tests for min/max/abs intrinsic comparisons (NFC)
2020-07-30 22:17:03 +02:00