Skip to content

Commit bfc0317

Browse files
authored
Move several vector intrinsics out of experimental namespace (llvm#88748)
This patch is moving out following intrinsics: * vector.interleave2/deinterleave2 * vector.reverse * vector.splice from the experimental namespace. All these intrinsics exist in LLVM for more than a year now, and are widely used, so should not be considered as experimental.
1 parent 16bd10a commit bfc0317

File tree

102 files changed

+2642
-2544
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+2642
-2544
lines changed

clang/lib/CodeGen/CGExprScalar.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2330,7 +2330,7 @@ Value *ScalarExprEmitter::VisitCastExpr(CastExpr *CE) {
23302330
}
23312331

23322332
// Perform VLAT <-> VLST bitcast through memory.
2333-
// TODO: since the llvm.experimental.vector.{insert,extract} intrinsics
2333+
// TODO: since the llvm.vector.{insert,extract} intrinsics
23342334
// require the element types of the vectors to be the same, we
23352335
// need to keep this around for bitcasts between VLAT <-> VLST where
23362336
// the element types of the vectors are not the same, until we figure

llvm/docs/LangRef.rst

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18805,7 +18805,7 @@ runtime, then the result vector is a :ref:`poison value <poisonvalues>`. The
1880518805
``idx`` parameter must be a vector index constant type (for most targets this
1880618806
will be an integer pointer type).
1880718807

18808-
'``llvm.experimental.vector.reverse``' Intrinsic
18808+
'``llvm.vector.reverse``' Intrinsic
1880918809
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1881018810

1881118811
Syntax:
@@ -18814,25 +18814,26 @@ This is an overloaded intrinsic.
1881418814

1881518815
::
1881618816

18817-
declare <2 x i8> @llvm.experimental.vector.reverse.v2i8(<2 x i8> %a)
18818-
declare <vscale x 4 x i32> @llvm.experimental.vector.reverse.nxv4i32(<vscale x 4 x i32> %a)
18817+
declare <2 x i8> @llvm.vector.reverse.v2i8(<2 x i8> %a)
18818+
declare <vscale x 4 x i32> @llvm.vector.reverse.nxv4i32(<vscale x 4 x i32> %a)
1881918819

1882018820
Overview:
1882118821
"""""""""
1882218822

18823-
The '``llvm.experimental.vector.reverse.*``' intrinsics reverse a vector.
18823+
The '``llvm.vector.reverse.*``' intrinsics reverse a vector.
1882418824
The intrinsic takes a single vector and returns a vector of matching type but
1882518825
with the original lane order reversed. These intrinsics work for both fixed
18826-
and scalable vectors. While this intrinsic is marked as experimental the
18827-
recommended way to express reverse operations for fixed-width vectors is still
18828-
to use a shufflevector, as that may allow for more optimization opportunities.
18826+
and scalable vectors. While this intrinsic supports all vector types
18827+
the recommended way to express this operation for fixed-width vectors is
18828+
still to use a shufflevector, as that may allow for more optimization
18829+
opportunities.
1882918830

1883018831
Arguments:
1883118832
""""""""""
1883218833

1883318834
The argument to this intrinsic must be a vector.
1883418835

18835-
'``llvm.experimental.vector.deinterleave2``' Intrinsic
18836+
'``llvm.vector.deinterleave2``' Intrinsic
1883618837
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1883718838

1883818839
Syntax:
@@ -18841,13 +18842,13 @@ This is an overloaded intrinsic.
1884118842

1884218843
::
1884318844

18844-
declare {<2 x double>, <2 x double>} @llvm.experimental.vector.deinterleave2.v4f64(<4 x double> %vec1)
18845-
declare {<vscale x 4 x i32>, <vscale x 4 x i32>} @llvm.experimental.vector.deinterleave2.nxv8i32(<vscale x 8 x i32> %vec1)
18845+
declare {<2 x double>, <2 x double>} @llvm.vector.deinterleave2.v4f64(<4 x double> %vec1)
18846+
declare {<vscale x 4 x i32>, <vscale x 4 x i32>} @llvm.vector.deinterleave2.nxv8i32(<vscale x 8 x i32> %vec1)
1884618847

1884718848
Overview:
1884818849
"""""""""
1884918850

18850-
The '``llvm.experimental.vector.deinterleave2``' intrinsic constructs two
18851+
The '``llvm.vector.deinterleave2``' intrinsic constructs two
1885118852
vectors by deinterleaving the even and odd lanes of the input vector.
1885218853

1885318854
This intrinsic works for both fixed and scalable vectors. While this intrinsic
@@ -18859,15 +18860,15 @@ For example:
1885918860

1886018861
.. code-block:: text
1886118862

18862-
{<2 x i64>, <2 x i64>} llvm.experimental.vector.deinterleave2.v4i64(<4 x i64> <i64 0, i64 1, i64 2, i64 3>); ==> {<2 x i64> <i64 0, i64 2>, <2 x i64> <i64 1, i64 3>}
18863+
{<2 x i64>, <2 x i64>} llvm.vector.deinterleave2.v4i64(<4 x i64> <i64 0, i64 1, i64 2, i64 3>); ==> {<2 x i64> <i64 0, i64 2>, <2 x i64> <i64 1, i64 3>}
1886318864

1886418865
Arguments:
1886518866
""""""""""
1886618867

1886718868
The argument is a vector whose type corresponds to the logical concatenation of
1886818869
the two result types.
1886918870

18870-
'``llvm.experimental.vector.interleave2``' Intrinsic
18871+
'``llvm.vector.interleave2``' Intrinsic
1887118872
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1887218873

1887318874
Syntax:
@@ -18876,13 +18877,13 @@ This is an overloaded intrinsic.
1887618877

1887718878
::
1887818879

18879-
declare <4 x double> @llvm.experimental.vector.interleave2.v4f64(<2 x double> %vec1, <2 x double> %vec2)
18880-
declare <vscale x 8 x i32> @llvm.experimental.vector.interleave2.nxv8i32(<vscale x 4 x i32> %vec1, <vscale x 4 x i32> %vec2)
18880+
declare <4 x double> @llvm.vector.interleave2.v4f64(<2 x double> %vec1, <2 x double> %vec2)
18881+
declare <vscale x 8 x i32> @llvm.vector.interleave2.nxv8i32(<vscale x 4 x i32> %vec1, <vscale x 4 x i32> %vec2)
1888118882

1888218883
Overview:
1888318884
"""""""""
1888418885

18885-
The '``llvm.experimental.vector.interleave2``' intrinsic constructs a vector
18886+
The '``llvm.vector.interleave2``' intrinsic constructs a vector
1888618887
by interleaving two input vectors.
1888718888

1888818889
This intrinsic works for both fixed and scalable vectors. While this intrinsic
@@ -18894,7 +18895,7 @@ For example:
1889418895

1889518896
.. code-block:: text
1889618897

18897-
<4 x i64> llvm.experimental.vector.interleave2.v4i64(<2 x i64> <i64 0, i64 2>, <2 x i64> <i64 1, i64 3>); ==> <4 x i64> <i64 0, i64 1, i64 2, i64 3>
18898+
<4 x i64> llvm.vector.interleave2.v4i64(<2 x i64> <i64 0, i64 2>, <2 x i64> <i64 1, i64 3>); ==> <4 x i64> <i64 0, i64 1, i64 2, i64 3>
1889818899

1889918900
Arguments:
1890018901
""""""""""
@@ -18940,7 +18941,7 @@ The '``llvm.experimental.cttz.elts``' intrinsic counts the trailing (least
1894018941
significant) zero elements in a vector. If ``src == 0`` the result is the
1894118942
number of elements in the input vector.
1894218943

18943-
'``llvm.experimental.vector.splice``' Intrinsic
18944+
'``llvm.vector.splice``' Intrinsic
1894418945
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1894518946

1894618947
Syntax:
@@ -18949,13 +18950,13 @@ This is an overloaded intrinsic.
1894918950

1895018951
::
1895118952

18952-
declare <2 x double> @llvm.experimental.vector.splice.v2f64(<2 x double> %vec1, <2 x double> %vec2, i32 %imm)
18953-
declare <vscale x 4 x i32> @llvm.experimental.vector.splice.nxv4i32(<vscale x 4 x i32> %vec1, <vscale x 4 x i32> %vec2, i32 %imm)
18953+
declare <2 x double> @llvm.vector.splice.v2f64(<2 x double> %vec1, <2 x double> %vec2, i32 %imm)
18954+
declare <vscale x 4 x i32> @llvm.vector.splice.nxv4i32(<vscale x 4 x i32> %vec1, <vscale x 4 x i32> %vec2, i32 %imm)
1895418955

1895518956
Overview:
1895618957
"""""""""
1895718958

18958-
The '``llvm.experimental.vector.splice.*``' intrinsics construct a vector by
18959+
The '``llvm.vector.splice.*``' intrinsics construct a vector by
1895918960
concatenating elements from the first input vector with elements of the second
1896018961
input vector, returning a vector of the same type as the input vectors. The
1896118962
signed immediate, modulo the number of elements in the vector, is the index
@@ -18966,16 +18967,16 @@ immediate, it extracts ``-imm`` trailing elements from the first vector, and
1896618967
the remaining elements from ``%vec2``.
1896718968

1896818969
These intrinsics work for both fixed and scalable vectors. While this intrinsic
18969-
is marked as experimental, the recommended way to express this operation for
18970+
supports all vector types the recommended way to express this operation for
1897018971
fixed-width vectors is still to use a shufflevector, as that may allow for more
1897118972
optimization opportunities.
1897218973

1897318974
For example:
1897418975

1897518976
.. code-block:: text
1897618977

18977-
llvm.experimental.vector.splice(<A,B,C,D>, <E,F,G,H>, 1); ==> <B, C, D, E> index
18978-
llvm.experimental.vector.splice(<A,B,C,D>, <E,F,G,H>, -3); ==> <B, C, D, E> trailing elements
18978+
llvm.vector.splice(<A,B,C,D>, <E,F,G,H>, 1); ==> <B, C, D, E> index
18979+
llvm.vector.splice(<A,B,C,D>, <E,F,G,H>, -3); ==> <B, C, D, E> trailing elements
1897918980

1898018981

1898118982
Arguments:
@@ -22198,7 +22199,7 @@ Overview:
2219822199
"""""""""
2219922200

2220022201
The '``llvm.experimental.vp.splice.*``' intrinsic is the vector length
22201-
predicated version of the '``llvm.experimental.vector.splice.*``' intrinsic.
22202+
predicated version of the '``llvm.vector.splice.*``' intrinsic.
2220222203

2220322204
Arguments:
2220422205
""""""""""
@@ -22257,7 +22258,7 @@ Overview:
2225722258
"""""""""
2225822259

2225922260
The '``llvm.experimental.vp.reverse.*``' intrinsic is the vector length
22260-
predicated version of the '``llvm.experimental.vector.reverse.*``' intrinsic.
22261+
predicated version of the '``llvm.vector.reverse.*``' intrinsic.
2226122262

2226222263
Arguments:
2226322264
""""""""""

llvm/docs/ReleaseNotes.rst

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,11 @@ Update on required toolchains to build LLVM
5050
Changes to the LLVM IR
5151
----------------------
5252

53-
- Added Memory Model Relaxation Annotations (MMRAs).
53+
* Added Memory Model Relaxation Annotations (MMRAs).
54+
* Renamed ``llvm.experimental.vector.reverse`` intrinsic to ``llvm.vector.reverse``.
55+
* Renamed ``llvm.experimental.vector.splice`` intrinsic to ``llvm.vector.splice``.
56+
* Renamed ``llvm.experimental.vector.interleave2`` intrinsic to ``llvm.vector.interleave2``.
57+
* Renamed ``llvm.experimental.vector.deinterleave2`` intrinsic to ``llvm.vector.deinterleave2``.
5458

5559
Changes to LLVM infrastructure
5660
------------------------------

llvm/include/llvm/CodeGen/BasicTTIImpl.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1662,12 +1662,12 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
16621662
TTI::SK_InsertSubvector, cast<VectorType>(Args[0]->getType()),
16631663
std::nullopt, CostKind, Index, cast<VectorType>(Args[1]->getType()));
16641664
}
1665-
case Intrinsic::experimental_vector_reverse: {
1665+
case Intrinsic::vector_reverse: {
16661666
return thisT()->getShuffleCost(
16671667
TTI::SK_Reverse, cast<VectorType>(Args[0]->getType()), std::nullopt,
16681668
CostKind, 0, cast<VectorType>(RetTy));
16691669
}
1670-
case Intrinsic::experimental_vector_splice: {
1670+
case Intrinsic::vector_splice: {
16711671
unsigned Index = cast<ConstantInt>(Args[2])->getZExtValue();
16721672
return thisT()->getShuffleCost(
16731673
TTI::SK_Splice, cast<VectorType>(Args[0]->getType()), std::nullopt,

llvm/include/llvm/CodeGen/GlobalISel/IRTranslator.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,8 @@ class IRTranslator : public MachineFunctionPass {
247247
bool translateTrap(const CallInst &U, MachineIRBuilder &MIRBuilder,
248248
unsigned Opcode);
249249

250-
// Translate @llvm.experimental.vector.interleave2 and
251-
// @llvm.experimental.vector.deinterleave2 intrinsics for fixed-width vector
250+
// Translate @llvm.vector.interleave2 and
251+
// @llvm.vector.deinterleave2 intrinsics for fixed-width vector
252252
// types into vector shuffles.
253253
bool translateVectorInterleave2Intrinsic(const CallInst &CI,
254254
MachineIRBuilder &MIRBuilder);

llvm/include/llvm/CodeGen/TargetLowering.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3146,7 +3146,7 @@ class TargetLoweringBase {
31463146

31473147
/// Lower a deinterleave intrinsic to a target specific load intrinsic.
31483148
/// Return true on success. Currently only supports
3149-
/// llvm.experimental.vector.deinterleave2
3149+
/// llvm.vector.deinterleave2
31503150
///
31513151
/// \p DI is the deinterleave intrinsic.
31523152
/// \p LI is the accompanying load instruction
@@ -3157,7 +3157,7 @@ class TargetLoweringBase {
31573157

31583158
/// Lower an interleave intrinsic to a target specific store intrinsic.
31593159
/// Return true on success. Currently only supports
3160-
/// llvm.experimental.vector.interleave2
3160+
/// llvm.vector.interleave2
31613161
///
31623162
/// \p II is the interleave intrinsic.
31633163
/// \p SI is the accompanying store instruction

llvm/include/llvm/IR/Intrinsics.td

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2577,15 +2577,15 @@ def int_preserve_static_offset : DefaultAttrsIntrinsic<[llvm_ptr_ty],
25772577

25782578
//===------------ Intrinsics to perform common vector shuffles ------------===//
25792579

2580-
def int_experimental_vector_reverse : DefaultAttrsIntrinsic<[llvm_anyvector_ty],
2581-
[LLVMMatchType<0>],
2582-
[IntrNoMem]>;
2580+
def int_vector_reverse : DefaultAttrsIntrinsic<[llvm_anyvector_ty],
2581+
[LLVMMatchType<0>],
2582+
[IntrNoMem]>;
25832583

2584-
def int_experimental_vector_splice : DefaultAttrsIntrinsic<[llvm_anyvector_ty],
2585-
[LLVMMatchType<0>,
2586-
LLVMMatchType<0>,
2587-
llvm_i32_ty],
2588-
[IntrNoMem, ImmArg<ArgIndex<2>>]>;
2584+
def int_vector_splice : DefaultAttrsIntrinsic<[llvm_anyvector_ty],
2585+
[LLVMMatchType<0>,
2586+
LLVMMatchType<0>,
2587+
llvm_i32_ty],
2588+
[IntrNoMem, ImmArg<ArgIndex<2>>]>;
25892589

25902590
//===---------- Intrinsics to query properties of scalable vectors --------===//
25912591
def int_vscale : DefaultAttrsIntrinsic<[llvm_anyint_ty], [], [IntrNoMem]>;
@@ -2600,15 +2600,15 @@ def int_vector_extract : DefaultAttrsIntrinsic<[llvm_anyvector_ty],
26002600
[IntrNoMem, IntrSpeculatable, ImmArg<ArgIndex<1>>]>;
26012601

26022602

2603-
def int_experimental_vector_interleave2 : DefaultAttrsIntrinsic<[llvm_anyvector_ty],
2604-
[LLVMHalfElementsVectorType<0>,
2605-
LLVMHalfElementsVectorType<0>],
2606-
[IntrNoMem]>;
2603+
def int_vector_interleave2 : DefaultAttrsIntrinsic<[llvm_anyvector_ty],
2604+
[LLVMHalfElementsVectorType<0>,
2605+
LLVMHalfElementsVectorType<0>],
2606+
[IntrNoMem]>;
26072607

2608-
def int_experimental_vector_deinterleave2 : DefaultAttrsIntrinsic<[LLVMHalfElementsVectorType<0>,
2609-
LLVMHalfElementsVectorType<0>],
2610-
[llvm_anyvector_ty],
2611-
[IntrNoMem]>;
2608+
def int_vector_deinterleave2 : DefaultAttrsIntrinsic<[LLVMHalfElementsVectorType<0>,
2609+
LLVMHalfElementsVectorType<0>],
2610+
[llvm_anyvector_ty],
2611+
[IntrNoMem]>;
26122612

26132613
//===----------------- Pointer Authentication Intrinsics ------------------===//
26142614
//

llvm/include/llvm/IR/PatternMatch.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2513,7 +2513,7 @@ inline typename m_Intrinsic_Ty<Opnd0, Opnd1>::Ty m_CopySign(const Opnd0 &Op0,
25132513

25142514
template <typename Opnd0>
25152515
inline typename m_Intrinsic_Ty<Opnd0>::Ty m_VecReverse(const Opnd0 &Op0) {
2516-
return m_Intrinsic<Intrinsic::experimental_vector_reverse>(Op0);
2516+
return m_Intrinsic<Intrinsic::vector_reverse>(Op0);
25172517
}
25182518

25192519
//===----------------------------------------------------------------------===//

llvm/lib/Analysis/InstructionSimplify.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6281,11 +6281,11 @@ static Value *simplifyUnaryIntrinsic(Function *F, Value *Op0,
62816281
m_Intrinsic<Intrinsic::pow>(m_SpecificFP(10.0), m_Value(X)))))
62826282
return X;
62836283
break;
6284-
case Intrinsic::experimental_vector_reverse:
6285-
// experimental.vector.reverse(experimental.vector.reverse(x)) -> x
6284+
case Intrinsic::vector_reverse:
6285+
// vector.reverse(vector.reverse(x)) -> x
62866286
if (match(Op0, m_VecReverse(m_Value(X))))
62876287
return X;
6288-
// experimental.vector.reverse(splat(X)) -> splat(X)
6288+
// vector.reverse(splat(X)) -> splat(X)
62896289
if (isSplatValue(Op0))
62906290
return Op0;
62916291
break;

llvm/lib/CodeGen/ComplexDeinterleavingPass.cpp

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1639,8 +1639,7 @@ bool ComplexDeinterleavingGraph::checkNodes() {
16391639
ComplexDeinterleavingGraph::NodePtr
16401640
ComplexDeinterleavingGraph::identifyRoot(Instruction *RootI) {
16411641
if (auto *Intrinsic = dyn_cast<IntrinsicInst>(RootI)) {
1642-
if (Intrinsic->getIntrinsicID() !=
1643-
Intrinsic::experimental_vector_interleave2)
1642+
if (Intrinsic->getIntrinsicID() != Intrinsic::vector_interleave2)
16441643
return nullptr;
16451644

16461645
auto *Real = dyn_cast<Instruction>(Intrinsic->getOperand(0));
@@ -1675,7 +1674,7 @@ ComplexDeinterleavingGraph::identifyDeinterleave(Instruction *Real,
16751674
Value *FinalValue = nullptr;
16761675
if (match(Real, m_ExtractValue<0>(m_Instruction(I))) &&
16771676
match(Imag, m_ExtractValue<1>(m_Specific(I))) &&
1678-
match(I, m_Intrinsic<Intrinsic::experimental_vector_deinterleave2>(
1677+
match(I, m_Intrinsic<Intrinsic::vector_deinterleave2>(
16791678
m_Value(FinalValue)))) {
16801679
NodePtr PlaceholderNode = prepareCompositeNode(
16811680
llvm::ComplexDeinterleavingOperation::Deinterleave, Real, Imag);
@@ -1960,13 +1959,11 @@ Value *ComplexDeinterleavingGraph::replaceNode(IRBuilderBase &Builder,
19601959
// Splats that are not constant are interleaved where they are located
19611960
Instruction *InsertPoint = (I->comesBefore(R) ? R : I)->getNextNode();
19621961
IRBuilder<> IRB(InsertPoint);
1963-
ReplacementNode =
1964-
IRB.CreateIntrinsic(Intrinsic::experimental_vector_interleave2, NewTy,
1965-
{Node->Real, Node->Imag});
1962+
ReplacementNode = IRB.CreateIntrinsic(Intrinsic::vector_interleave2,
1963+
NewTy, {Node->Real, Node->Imag});
19661964
} else {
1967-
ReplacementNode =
1968-
Builder.CreateIntrinsic(Intrinsic::experimental_vector_interleave2,
1969-
NewTy, {Node->Real, Node->Imag});
1965+
ReplacementNode = Builder.CreateIntrinsic(
1966+
Intrinsic::vector_interleave2, NewTy, {Node->Real, Node->Imag});
19701967
}
19711968
break;
19721969
}
@@ -1991,9 +1988,8 @@ Value *ComplexDeinterleavingGraph::replaceNode(IRBuilderBase &Builder,
19911988
auto *B = replaceNode(Builder, Node->Operands[1]);
19921989
auto *NewMaskTy = VectorType::getDoubleElementsVectorType(
19931990
cast<VectorType>(MaskReal->getType()));
1994-
auto *NewMask =
1995-
Builder.CreateIntrinsic(Intrinsic::experimental_vector_interleave2,
1996-
NewMaskTy, {MaskReal, MaskImag});
1991+
auto *NewMask = Builder.CreateIntrinsic(Intrinsic::vector_interleave2,
1992+
NewMaskTy, {MaskReal, MaskImag});
19971993
ReplacementNode = Builder.CreateSelect(NewMask, A, B);
19981994
break;
19991995
}
@@ -2021,8 +2017,8 @@ void ComplexDeinterleavingGraph::processReductionOperation(
20212017
Value *InitImag = OldPHIImag->getIncomingValueForBlock(Incoming);
20222018

20232019
IRBuilder<> Builder(Incoming->getTerminator());
2024-
auto *NewInit = Builder.CreateIntrinsic(
2025-
Intrinsic::experimental_vector_interleave2, NewVTy, {InitReal, InitImag});
2020+
auto *NewInit = Builder.CreateIntrinsic(Intrinsic::vector_interleave2, NewVTy,
2021+
{InitReal, InitImag});
20262022

20272023
NewPHI->addIncoming(NewInit, Incoming);
20282024
NewPHI->addIncoming(OperationReplacement, BackEdge);
@@ -2034,9 +2030,9 @@ void ComplexDeinterleavingGraph::processReductionOperation(
20342030

20352031
Builder.SetInsertPoint(
20362032
&*FinalReductionReal->getParent()->getFirstInsertionPt());
2037-
auto *Deinterleave = Builder.CreateIntrinsic(
2038-
Intrinsic::experimental_vector_deinterleave2,
2039-
OperationReplacement->getType(), OperationReplacement);
2033+
auto *Deinterleave = Builder.CreateIntrinsic(Intrinsic::vector_deinterleave2,
2034+
OperationReplacement->getType(),
2035+
OperationReplacement);
20402036

20412037
auto *NewReal = Builder.CreateExtractValue(Deinterleave, (uint64_t)0);
20422038
FinalReductionReal->replaceUsesOfWith(Real, NewReal);

0 commit comments

Comments
 (0)