diff options
| author | Mohammad Shahid <Asghar-ahmad.Shahid@amd.com> | 2015-09-24 10:35:03 +0000 |
|---|---|---|
| committer | Mohammad Shahid <Asghar-ahmad.Shahid@amd.com> | 2015-09-24 10:35:03 +0000 |
| commit | 13f1dfdf2eada3edd62f2bda6d1387e41f1e2c81 (patch) | |
| tree | 4d0367b3a58579274413c8627eba0af7cffa4e7a /llvm/docs | |
| parent | 2720593ab4518012af619c90b45f60ccc4ae4f29 (diff) | |
| download | bcm5719-llvm-13f1dfdf2eada3edd62f2bda6d1387e41f1e2c81.tar.gz bcm5719-llvm-13f1dfdf2eada3edd62f2bda6d1387e41f1e2c81.zip | |
Codegen: Fix llvm.*absdiff semantic.
Fixes the overflow case of llvm.*absdiff intrinsic also updats the tests and LangRef.rst accordingly.
Differential Revision: http://reviews.llvm.org/D11678
llvm-svn: 248483
Diffstat (limited to 'llvm/docs')
| -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 |

