diff options
Diffstat (limited to 'llvm/docs/LangRef.rst')
| -rw-r--r-- | llvm/docs/LangRef.rst | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst index c7ceb73da37..a609722d80e 100644 --- a/llvm/docs/LangRef.rst +++ b/llvm/docs/LangRef.rst @@ -10920,16 +10920,19 @@ This is an overloaded intrinsic. The loaded data is a vector of any integer bit Overview: """"""""" -The ``llvm.uabsdiff`` intrinsic returns a vector result of the absolute difference of -the two operands, treating them both as unsigned integers. +The ``llvm.uabsdiff`` intrinsic returns a vector result of the absolute difference +of the two operands, treating them both as unsigned integers. The intermediate +calculations are computed using infinitely precise unsigned arithmetic. The final +result will be truncated to the given type. The ``llvm.sabsdiff`` intrinsic returns a vector result of the absolute difference of -the two operands, treating them both as signed integers. +the two operands, treating them both as signed integers. If the result overflows, the +behavior is undefined. .. note:: These intrinsics are primarily used during the code generation stage of compilation. - They are generated by compiler passes such as the Loop and SLP vectorizers.it is not + They are generated by compiler passes such as the Loop and SLP vectorizers. It is not recommended for users to create them manually. Arguments: @@ -10946,19 +10949,19 @@ The expression:: is equivalent to:: - %sub = sub <4 x i32> %a, %b - %ispos = icmp ugt <4 x i32> %sub, <i32 -1, i32 -1, i32 -1, i32 -1> - %neg = sub <4 x i32> zeroinitializer, %sub - %1 = select <4 x i1> %ispos, <4 x i32> %sub, <4 x i32> %neg + %1 = zext <4 x i32> %a to <4 x i64> + %2 = zext <4 x i32> %b to <4 x i64> + %sub = sub <4 x i64> %1, %2 + %trunc = trunc <4 x i64> to <4 x i32> -Similarly the expression:: +and the expression:: call <4 x i32> @llvm.sabsdiff.v4i32(<4 x i32> %a, <4 x i32> %b) is equivalent to:: %sub = sub nsw <4 x i32> %a, %b - %ispos = icmp sgt <4 x i32> %sub, <i32 -1, i32 -1, i32 -1, i32 -1> + %ispos = icmp sge <4 x i32> %sub, zeroinitializer %neg = sub nsw <4 x i32> zeroinitializer, %sub %1 = select <4 x i1> %ispos, <4 x i32> %sub, <4 x i32> %neg |

