Skip to content

Commit e63a47d

Browse files
authored
[RISCV][llvm] Handle INSERT_VECTOR_ELT, EXTRACT_VECTOR_ELT codegen for zvfbfa (llvm#167819)
1 parent ea16f7d commit e63a47d

File tree

4 files changed

+852
-160
lines changed

4 files changed

+852
-160
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1264,11 +1264,11 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
12641264
Custom);
12651265
setOperationAction(ISD::SELECT_CC, VT, Expand);
12661266
setOperationAction({ISD::VP_SINT_TO_FP, ISD::VP_UINT_TO_FP}, VT, Custom);
1267-
setOperationAction({ISD::INSERT_VECTOR_ELT, ISD::CONCAT_VECTORS,
1268-
ISD::INSERT_SUBVECTOR, ISD::EXTRACT_SUBVECTOR,
1269-
ISD::VECTOR_DEINTERLEAVE, ISD::VECTOR_INTERLEAVE,
1270-
ISD::VECTOR_REVERSE, ISD::VECTOR_SPLICE,
1271-
ISD::VECTOR_COMPRESS},
1267+
setOperationAction({ISD::INSERT_VECTOR_ELT, ISD::EXTRACT_VECTOR_ELT,
1268+
ISD::CONCAT_VECTORS, ISD::INSERT_SUBVECTOR,
1269+
ISD::EXTRACT_SUBVECTOR, ISD::VECTOR_DEINTERLEAVE,
1270+
ISD::VECTOR_INTERLEAVE, ISD::VECTOR_REVERSE,
1271+
ISD::VECTOR_SPLICE, ISD::VECTOR_COMPRESS},
12721272
VT, Custom);
12731273
setOperationAction(ISD::EXPERIMENTAL_VP_SPLICE, VT, Custom);
12741274
setOperationAction(ISD::EXPERIMENTAL_VP_REVERSE, VT, Custom);
@@ -1278,9 +1278,8 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
12781278

12791279
MVT EltVT = VT.getVectorElementType();
12801280
if (isTypeLegal(EltVT))
1281-
setOperationAction({ISD::SPLAT_VECTOR, ISD::EXPERIMENTAL_VP_SPLAT,
1282-
ISD::EXTRACT_VECTOR_ELT},
1283-
VT, Custom);
1281+
setOperationAction({ISD::SPLAT_VECTOR, ISD::EXPERIMENTAL_VP_SPLAT}, VT,
1282+
Custom);
12841283
else
12851284
setOperationAction({ISD::SPLAT_VECTOR, ISD::EXPERIMENTAL_VP_SPLAT},
12861285
EltVT, Custom);
@@ -10356,7 +10355,7 @@ SDValue RISCVTargetLowering::lowerINSERT_VECTOR_ELT(SDValue Op,
1035610355
}
1035710356

1035810357
if ((ValVT == MVT::f16 && !Subtarget.hasVInstructionsF16()) ||
10359-
ValVT == MVT::bf16) {
10358+
(ValVT == MVT::bf16 && !Subtarget.hasVInstructionsBF16())) {
1036010359
// If we don't have vfmv.s.f for f16/bf16, use fmv.x.h first.
1036110360
MVT IntVT = VecVT.changeTypeToInteger();
1036210361
SDValue IntInsert = DAG.getNode(
@@ -10593,7 +10592,7 @@ SDValue RISCVTargetLowering::lowerEXTRACT_VECTOR_ELT(SDValue Op,
1059310592
}
1059410593

1059510594
if ((EltVT == MVT::f16 && !Subtarget.hasVInstructionsF16()) ||
10596-
EltVT == MVT::bf16) {
10595+
(EltVT == MVT::bf16 && !Subtarget.hasVInstructionsBF16())) {
1059710596
// If we don't have vfmv.f.s for f16/bf16, extract to a gpr then use fmv.h.x
1059810597
MVT IntVT = VecVT.changeTypeToInteger();
1059910598
SDValue IntVec = DAG.getBitcast(IntVT, Vec);

0 commit comments

Comments
 (0)