@@ -19642,28 +19642,30 @@ vector of boolean values with the same number of elements as the return type.
19642
19642
The third is the explicit vector length of the operation. The return type and
19643
19643
underlying type of the base pointer are the same vector types.
19644
19644
19645
+ The :ref:`align <attr_align>` parameter attribute can be provided for the first
19646
+ operand.
19647
+
19645
19648
Semantics:
19646
19649
""""""""""
19647
19650
19648
19651
The '``llvm.vp.load``' intrinsic reads a vector from memory in the same way as
19649
19652
the '``llvm.masked.load``' intrinsic, where the mask is taken from the
19650
- combination of the '``mask``' and '``evl``' operands in the usual VP way. Of
19651
- the '``llvm.masked.load``' operands not set by '``llvm.vp.load``': the
19652
- '``passthru``' operand is implicitly ``undef``; the '``alignment``' operand is
19653
- taken as the ABI alignment of the return type as specified by the
19654
- :ref:`datalayout string<langref_datalayout>`.
19653
+ combination of the '``mask``' and '``evl``' operands in the usual VP way.
19654
+ Certain '``llvm.masked.load``' operands do not have corresponding operands in
19655
+ '``llvm.vp.load``': the '``passthru``' operand is implicitly ``undef``; the
19656
+ '``alignment``' operand is taken as the ``align`` parameter attribute, if
19657
+ provided. The default alignment is taken as the ABI alignment of the return
19658
+ type as specified by the :ref:`datalayout string<langref_datalayout>`.
19655
19659
19656
19660
Examples:
19657
19661
"""""""""
19658
19662
19659
19663
.. code-block:: text
19660
19664
19661
- %r = call <8 x i8> @llvm.vp.load.v8i8.p0v8i8(<8 x i8>* %ptr, <8 x i1> %mask, i32 %evl)
19665
+ %r = call <8 x i8> @llvm.vp.load.v8i8.p0v8i8(<8 x i8>* align 2 %ptr, <8 x i1> %mask, i32 %evl)
19662
19666
;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
19663
- ;; Note that since the alignment is ultimately up to the data layout
19664
- ;; string, 8 (the default) is used as an example.
19665
19667
19666
- %also.r = call <8 x i8> @llvm.masked.load.v8i8.p0v8i8(<8 x i8>* %ptr, i32 8 , <8 x i1> %mask, <8 x i8> undef)
19668
+ %also.r = call <8 x i8> @llvm.masked.load.v8i8.p0v8i8(<8 x i8>* %ptr, i32 2 , <8 x i1> %mask, <8 x i8> undef)
19667
19669
19668
19670
19669
19671
.. _int_vp_store:
@@ -19697,28 +19699,30 @@ the value operand. The third operand is a vector of boolean values with the
19697
19699
same number of elements as the return type. The fourth is the explicit vector
19698
19700
length of the operation.
19699
19701
19702
+ The :ref:`align <attr_align>` parameter attribute can be provided for the
19703
+ second operand.
19704
+
19700
19705
Semantics:
19701
19706
""""""""""
19702
19707
19703
19708
The '``llvm.vp.store``' intrinsic reads a vector from memory in the same way as
19704
19709
the '``llvm.masked.store``' intrinsic, where the mask is taken from the
19705
19710
combination of the '``mask``' and '``evl``' operands in the usual VP way. The
19706
- '``alignment``' operand of the '``llvm.masked.store``' intrinsic is not set by
19707
- '``llvm.vp.store``': it is taken as the ABI alignment of the type of the
19711
+ alignment of the operation (corresponding to the '``alignment``' operand of
19712
+ '``llvm.masked.store``') is specified by the ``align`` parameter attribute (see
19713
+ above). If it is not provided then the ABI alignment of the type of the
19708
19714
'``value``' operand as specified by the :ref:`datalayout
19709
- string<langref_datalayout>`.
19715
+ string<langref_datalayout>` is used instead .
19710
19716
19711
19717
Examples:
19712
19718
"""""""""
19713
19719
19714
19720
.. code-block:: text
19715
19721
19716
- call void @llvm.vp.store.v8i8.p0v8i8(<8 x i8> %val, <8 x i8>* %ptr, <8 x i1> %mask, i32 %evl)
19722
+ call void @llvm.vp.store.v8i8.p0v8i8(<8 x i8> %val, <8 x i8>* align 4 %ptr, <8 x i1> %mask, i32 %evl)
19717
19723
;; For all lanes below %evl, the call above is lane-wise equivalent to the call below.
19718
- ;; Note that since the alignment is ultimately up to the data layout
19719
- ;; string, 8 (the default) is used as an example.
19720
19724
19721
- call void @llvm.masked.store.v8i8.p0v8i8(<8 x i8> %val, <8 x i8>* %ptr, i32 8 , <8 x i1> %mask)
19725
+ call void @llvm.masked.store.v8i8.p0v8i8(<8 x i8> %val, <8 x i8>* %ptr, i32 4 , <8 x i1> %mask)
19722
19726
19723
19727
19724
19728
.. _int_vp_gather:
0 commit comments