diff options
author | Pierre van Houtryve <pierre.vanhoutryve@amd.com> | 2023-01-06 08:33:49 -0500 |
---|---|---|
committer | Pierre van Houtryve <pierre.vanhoutryve@amd.com> | 2023-01-10 03:37:23 -0500 |
commit | b3fdb7b0cba49e7f24fd8207c677b0541045755c (patch) | |
tree | 248a6c8aa57fca54125afb406b8a58c4975e4fdb /lldb/source/Commands/CommandObjectMemory.cpp | |
parent | 4e78f88561af26c74b4b7fa2a017cd836a9f9bf4 (diff) | |
download | llvm-b3fdb7b0cba49e7f24fd8207c677b0541045755c.zip llvm-b3fdb7b0cba49e7f24fd8207c677b0541045755c.tar.gz llvm-b3fdb7b0cba49e7f24fd8207c677b0541045755c.tar.bz2 |
[InstCombine] Combine lshr of add -> (a + b < a)
Tries to perform
(lshr (add (zext X), (zext Y)), K)
-> (icmp ult (add X, Y), X)
where
- The add's operands are zexts from a K-bits integer to a bigger type.
- The add is only used by the shr, or by iK (or narrower) truncates.
- The lshr type has more than 2 bits (other types are boolean math).
- K > 1
This seems to be a pattern that just comes from OpenCL front-ends, so adding DAG/GISel combines doesn't seem to be worth the complexity.
Original patch D107552 by @abinavpp - adapted to use (a + b < a) instead of uaddo following discussion on the review.
See this issue https://github.com/RadeonOpenCompute/ROCm/issues/488
Reviewed By: spatel
Differential Revision: https://reviews.llvm.org/D138814
Diffstat (limited to 'lldb/source/Commands/CommandObjectMemory.cpp')
0 files changed, 0 insertions, 0 deletions