[llvm-dev] Reasoning about results of min and max with a constant

Philip Reames via llvm-dev llvm-dev at lists.llvm.org
Mon Aug 1 17:44:27 PDT 2016


On 07/29/2016 07:08 PM, Carlos Liam via llvm-dev wrote:
> Hi all,
>
> Say we have this IR:
>
> %1 = icmp slt i16 %x, 0
> %.x = select i1 %1, i16 0, i16 %x
>
> This is the canonical form of what is effectively max(x, 0).
>
>  From what I can tell LLVM has no facilities to determine from this code that %.x >= 0, so (for example) an SExt on %.x will not be converted to a ZExt.
>
> I'm interested in seeing what sorts of changes would be needed to recognize this pattern in existing facilities (computeKnownBits, etc.) in order to more broadly apply optimizations that use those facilities.
LVI has a couple of special cases around select idioms.  This would be 
another reasonable one to add.  This would give range analysis (used in 
JumpThreading and CVP) for this idiom.  I thought we already had this 
one actually.
>
> Any insight would be appreciated. Thanks!
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev




More information about the llvm-dev mailing list