[LLVMdev] [RFC] Integer Saturation Intrinsics
Philip Reames
listmail at philipreames.com
Wed Jan 14 15:42:15 PST 2015
At a very high level, why do we need these intrinsics?
What is the use case? What are typical values for N?
Have you looked at just generating the conditional IR and then pattern
matching late? What's the performance trade off involved?
My default position is that we shouldn't add these unless there is a
compelling use case. We *still* haven't gotten the *.with.overflow
intrinsics piped through everywhere in the optimizer. I'm reluctant to
keep adding new ones.
Philip
On 01/14/2015 02:08 PM, Ahmed Bougacha wrote:
> Hi all,
>
> The patches linked below introduce a new family of intrinsics, for
> integer saturation: @llvm.usat, and @llvm.ssat (unsigned/signed).
> Quoting the added documentation:
>
> %r = call i32 @llvm.ssat.i32(i32 %x, i32 %n)
>
> is equivalent to the expression min(max(x, -2^(n-1)), 2^(n-1)-1), itself
> implementable as the following IR:
>
> %min_sint_n = i32 ... ; the min. signed integer of bitwidth n, -2^(n-1)
> %max_sint_n = i32 ... ; the max. signed integer of bitwidth n, 2^(n-1)-1
> %0 = icmp slt i32 %x, %min_sint_n
> %1 = select i1 %0, i32 %min_sint_n, i32 %x
> %2 = icmp sgt i32 %1, %max_sint_n
> %r = select i1 %2, i32 %max_sint_n, i32 %1
>
>
> As a starting point, here are two patches:
> - http://reviews.llvm.org/D6976 Add Integer Saturation Intrinsics.
> - http://reviews.llvm.org/D6977 [CodeGen] Add legalization for
> Integer Saturation Intrinsics.
>
> From there, we can generate several new instructions, more efficient
> than their expanded counterpart. Locally, I have worked on:
> - ARM: the SSAT/USAT instructions (scalar)
> - AArch64: the SQ/UQ ADD/SUB AArch64 instructions (vector/scalar
> saturating arithmetic)
> - X86: PACK SS/US (vector, saturate+truncate)
> - X86: PADD/SUB S/US (vector, saturating arithmetic)
>
> Anyway, let's first agree on the intrinsics, so that further
> development is done on trunk.
>
> Thanks!
> -Ahmed
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list