[InstCombine] fold abs of select with negated op (PR39474)
authorSanjay Patel <spatel@rotateright.com>
Sun, 23 Aug 2020 18:58:29 +0000 (14:58 -0400)
committerSanjay Patel <spatel@rotateright.com>
Mon, 24 Aug 2020 11:37:55 +0000 (07:37 -0400)
commit6a44edb8da335bba355cd180a3f43564d14cd1be
tree43a97b7dc3f48b5d7aee4d8bca114ca809392388
parent52df6cac204a866d1797dad844c1e587a1b4b075
[InstCombine] fold abs of select with negated op (PR39474)

Similar to the existing transform - peek through a select
to match a value and its negation.

https://alive2.llvm.org/ce/z/MXi5KG

  define i8 @src(i1 %b, i8 %x) {
  %0:
    %neg = sub i8 0, %x
    %sel = select i1 %b, i8 %x, i8 %neg
    %abs = abs i8 %sel, 1
    ret i8 %abs
  }
  =>
  define i8 @tgt(i1 %b, i8 %x) {
  %0:
    %abs = abs i8 %x, 1
    ret i8 %abs
  }
  Transformation seems to be correct!
llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
llvm/test/Transforms/InstCombine/abs-intrinsic.ll