[PATCH] D93818: [LangRef] Update shufflevector's semantics to return poison if the mask is undef
Juneyoung Lee via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 7 22:10:10 PDT 2021
aqjune updated this revision to Diff 350490.
aqjune added a comment.
Update wordings
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D93818/new/
https://reviews.llvm.org/D93818
Files:
llvm/docs/LangRef.rst
Index: llvm/docs/LangRef.rst
===================================================================
--- llvm/docs/LangRef.rst
+++ llvm/docs/LangRef.rst
@@ -9380,6 +9380,10 @@
is an index indicating the position at which to insert the value. The
index may be a variable of any integer type.
+``poison`` vector is used for ``val`` if the input is a don't-care vector.
+using ``undef`` for ``val`` is not recommended because it prohibits
+optimizations to '``shufflevector``' with ``poison`` masks.
+
Semantics:
""""""""""
@@ -9423,7 +9427,7 @@
The first two operands of a '``shufflevector``' instruction are vectors
with the same type. The third argument is a shuffle mask vector constant
whose element type is ``i32``. The mask vector elements must be constant
-integers or ``undef`` values. The result of the instruction is a vector
+integers or ``poison`` values. The result of the instruction is a vector
whose length is the same as the shuffle mask and whose element type is the
same as the element type of the first two operands.
@@ -9436,15 +9440,13 @@
to the result. Non-negative elements in the mask represent an index
into the concatenated pair of input vectors.
-If the shuffle mask is undefined, the result vector is undefined. If
-the shuffle mask selects an undefined element from one of the input
-vectors, the resulting element is undefined. An undefined element
-in the mask vector specifies that the resulting element is undefined.
-An undefined element in the mask vector prevents a poisoned vector
-element from propagating.
+If the shuffle mask is poison, the result vector is poison. If
+the shuffle mask selects a poison element from one of the input
+vectors, the resulting element is poison. A poison element
+in the mask vector specifies that the resulting element is poison.
For scalable vectors, the only valid mask values at present are
-``zeroinitializer`` and ``undef``, since we cannot write all indices as
+``zeroinitializer`` and ``poison``, since we cannot write all indices as
literals for a vector with a length unknown at compile time.
Example:
@@ -9454,9 +9456,9 @@
<result> = shufflevector <4 x i32> %v1, <4 x i32> %v2,
<4 x i32> <i32 0, i32 4, i32 1, i32 5> ; yields <4 x i32>
- <result> = shufflevector <4 x i32> %v1, <4 x i32> undef,
+ <result> = shufflevector <4 x i32> %v1, <4 x i32> poison,
<4 x i32> <i32 0, i32 1, i32 2, i32 3> ; yields <4 x i32> - Identity shuffle.
- <result> = shufflevector <8 x i32> %v1, <8 x i32> undef,
+ <result> = shufflevector <8 x i32> %v1, <8 x i32> poison,
<4 x i32> <i32 0, i32 1, i32 2, i32 3> ; yields <4 x i32>
<result> = shufflevector <4 x i32> %v1, <4 x i32> %v2,
<8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7 > ; yields <8 x i32>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D93818.350490.patch
Type: text/x-patch
Size: 2919 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210608/fcd41fbc/attachment.bin>
More information about the llvm-commits
mailing list