[InstCombine] fold signed absolute diff patterns
authorSanjay Patel <spatel@rotateright.com>
Mon, 6 Mar 2023 15:22:58 +0000 (10:22 -0500)
committerSanjay Patel <spatel@rotateright.com>
Mon, 6 Mar 2023 18:49:48 +0000 (13:49 -0500)
commit74a58499b7c0995b782a2f851b8a6c44b2bc5361
tree7e03ddf457af2ddad8936b50d768d9becac1274e
parent870e6b6e6527bf8b9f56f1310e30c2d785585d2e
[InstCombine] fold signed absolute diff patterns

This overlaps partially with the codegen patch D144789. This needs no-wrap
for correctness, and I'm not sure if there's an unsigned equivalent:
https://alive2.llvm.org/ce/z/ErmQ-9
https://alive2.llvm.org/ce/z/mr-c_A

This is obviously an improvement in IR, and it looks like a codegen win
for all targets and data types that I sampled.

The 'nabs' case is left as a potential follow-up (and seems less likely
to occur in real code).

Differential Revision: https://reviews.llvm.org/D145073
llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
llvm/test/Transforms/InstCombine/abs-1.ll