[llvm-dev] [RFC] Canonicalization of unsigned subtraction with saturation

Friedman, Eli via llvm-dev llvm-dev at lists.llvm.org
Tue May 16 11:18:57 PDT 2017


On 5/16/2017 6:30 AM, Sanjay Patel wrote:
> Thanks for posting this question, Julia.
>
> I had a similar question about a signed min/max variant here:
> http://lists.llvm.org/pipermail/llvm-dev/2016-November/106868.html
>
> The 2nd version in each case contains a canonical max/min 
> representation in IR, and this could enable more IR analysis.
> A secondary advantage is that the backend recognizes the max/min in 
> the second IR form when creating DAG nodes,
> and this directly affects isel for many targets.

This seems important.  And pattern-matching max(x,y)-y to a saturating 
subtract seems easy in the backend.

> A possibly important difference between the earlier example and the 
> current unsigned case:
> is a select with a zero constant operand easier to reason about in IR 
> than the canonical min/max?

It might be in some cases... maybe?  I mean, it might be easier to 
analyze in ComputeMaskedBits or something, but we don't really do much 
to optimize selects involving zero.

-Eli

> On Tue, May 16, 2017 at 5:30 AM, Koval, Julia <julia.koval at intel.com 
> <mailto:julia.koval at intel.com>> wrote:
>
>     (1.16)
>     %cmp = icmp ugt i16 %x, %y
>     %sub2 = sub i16 %y, %x
>     %res = select i1 %cmp, i16 0, i16 %sub2
>
>     or
>
>     (2.16)
>     %cmp = icmp ugt i16 %x, %y
>     %sel = select i1 %cmp, i16 %x, i16 %y
>     %sub = sub i16 %sel, %x
>
>     Which of these versions is canonical? I think first version is
>     better, because it can be converted to unsigned saturation
>     instruction(i.e. PSUBUS), using existing backend code.
>
>

-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170516/2346d49b/attachment.html>


More information about the llvm-dev mailing list