[llvm-bugs] [Bug 35834] New: [ValueTracking] recognize 'not' variant of min-of-min

via llvm-bugs llvm-bugs at lists.llvm.org
Fri Jan 5 06:46:24 PST 2018


https://bugs.llvm.org/show_bug.cgi?id=35834

            Bug ID: 35834
           Summary: [ValueTracking] recognize 'not' variant of min-of-min
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Scalar Optimizations
          Assignee: unassignedbugs at nondot.org
          Reporter: spatel+llvm at rotateright.com
                CC: llvm-bugs at lists.llvm.org

Forking this off from bug 35717:

We have a pixel component min/max pattern in C as:

    for (int i = 0; i < I; i++) {
      xc = *A++;
      xm = *A++;
      xy = *A++;

      xc = 255-xc;
      xm = 255-xm;
      xy = 255-xy;

      if (xc < xm)
        xk = xc < xy ? xc : xy;
      else
        xk = xm < xy ? xm : xy;

      *B++ = xk;
    }

----------------------------------------------------------------------------

Which currently optimizes to this IR:

define i8 @test(i8 %xc, i8 %xm, i8 %xy) {
  %c0 = xor i8 %xc, -1
  %m1 = xor i8 %xm, -1
  %y2 = xor i8 %xy, -1
  %cmp = icmp ult i8 %xm, %xc
  %cmp13 = icmp ult i8 %c0, %y2
  %cond = select i1 %cmp13, i8 %c0, i8 %y2
  %cmp20 = icmp ult i8 %m1, %y2
  %cond27 = select i1 %cmp20, i8 %m1, i8 %y2
  %xk.0.in = select i1 %cmp, i8 %cond, i8 %cond27
  ret i8 %xk.0.in
}

----------------------------------------------------------------------------

The 'not' of the compared ops is preventing recognition (and potential
simplification via https://reviews.llvm.org/D41603 ) of this chain of min/max.

We matched the simpler sequence with:
https://reviews.llvm.org/rL321672

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20180105/f79e7642/attachment.html>


More information about the llvm-bugs mailing list