[all-commits] [llvm/llvm-project] 07b60d: [InstCombine] add tests for min/max intrinsics wit...

RotateRight via All-commits all-commits at lists.llvm.org
Mon Jan 25 04:58:41 PST 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 07b60d0060688dea121be36b46de859bafcec29b
      https://github.com/llvm/llvm-project/commit/07b60d0060688dea121be36b46de859bafcec29b
  Author: Sanjay Patel <spatel at rotateright.com>
  Date:   2021-01-25 (Mon, 25 Jan 2021)

  Changed paths:
    M llvm/test/Transforms/InstCombine/minmax-intrinsics.ll

  Log Message:
  -----------
  [InstCombine] add tests for min/max intrinsics with extended values; NFC


  Commit: 09a136bcc6947128df86492d88f1733bdff745d1
      https://github.com/llvm/llvm-project/commit/09a136bcc6947128df86492d88f1733bdff745d1
  Author: Sanjay Patel <spatel at rotateright.com>
  Date:   2021-01-25 (Mon, 25 Jan 2021)

  Changed paths:
    M llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
    M llvm/test/Transforms/InstCombine/minmax-intrinsics.ll

  Log Message:
  -----------
  [InstCombine] narrow min/max intrinsics with extended inputs

We can sink extends after min/max if they match and would
not change the sign-interpreted compare. The only combo
that doesn't work is zext+smin/smax because the zexts
could change a negative number into positive:
https://alive2.llvm.org/ce/z/D6sz6J

Sext+umax/umin works:

  define i32 @src(i8 %x, i8 %y) {
  %0:
    %sx = sext i8 %x to i32
    %sy = sext i8 %y to i32
    %m = umax i32 %sx, %sy
    ret i32 %m
  }
  =>
  define i32 @tgt(i8 %x, i8 %y) {
  %0:
    %m = umax i8 %x, %y
    %r = sext i8 %m to i32
    ret i32 %r
  }
  Transformation seems to be correct!


Compare: https://github.com/llvm/llvm-project/compare/b16fb1ffc3ce...09a136bcc694


More information about the All-commits mailing list