Skip to content

Commit f8f1d98

Browse files
committed
fixup! resolve comments
1 parent 63194c2 commit f8f1d98

File tree

5 files changed

+76
-22
lines changed

5 files changed

+76
-22
lines changed

llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1046,8 +1046,8 @@ void RISCVDAGToDAGISel::Select(SDNode *Node) {
10461046
if (!isInt<32>(Imm) && isUInt<32>(Imm) && hasAllWUsers(Node))
10471047
Imm = SignExtend64<32>(Imm);
10481048

1049-
if (hasAllWUsers(Node) && isApplicableToPLI(Imm) &&
1050-
Subtarget->enablePExtCodeGen()) {
1049+
if (Subtarget->enablePExtCodeGen() && isApplicableToPLI(Imm) &&
1050+
hasAllWUsers(Node)) {
10511051
// If its 4 packed 8-bit integers or 2 packed signed 16-bit integers, we
10521052
// can simply copy lower 32 bits to higher 32 bits to make it able to
10531053
// rematerialize to PLI_B or PLI_H
@@ -2675,12 +2675,19 @@ void RISCVDAGToDAGISel::Select(SDNode *Node) {
26752675
return;
26762676
}
26772677
if (Subtarget->enablePExtCodeGen()) {
2678-
if (((VT == MVT::v4i16 || VT == MVT::v8i8) && SrcVT == MVT::i64) ||
2679-
((SrcVT == MVT::v4i16 || SrcVT == MVT::v8i8) && VT == MVT::i64)) {
2678+
bool Is32BitCast =
2679+
(VT == MVT::i32 && (SrcVT == MVT::v4i8 || SrcVT == MVT::v2i16)) ||
2680+
(SrcVT == MVT::i32 && (VT == MVT::v4i8 || VT == MVT::v2i16));
2681+
bool Is64BitCast =
2682+
(VT == MVT::i64 && (SrcVT == MVT::v8i8 || SrcVT == MVT::v4i16 ||
2683+
SrcVT == MVT::v2i32)) ||
2684+
(SrcVT == MVT::i64 &&
2685+
(VT == MVT::v8i8 || VT == MVT::v4i16 || VT == MVT::v2i32));
2686+
if (Is32BitCast || Is64BitCast) {
26802687
ReplaceUses(SDValue(Node, 0), Node->getOperand(0));
26812688
CurDAG->RemoveDeadNode(Node);
2689+
return;
26822690
}
2683-
return;
26842691
}
26852692
break;
26862693
}

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10536,18 +10536,9 @@ SDValue RISCVTargetLowering::lowerEXTRACT_VECTOR_ELT(SDValue Op,
1053610536
return SDValue();
1053710537
SDValue Extracted = DAG.getBitcast(XLenVT, Vec);
1053810538
unsigned ElemWidth = EltVT.getSizeInBits();
10539-
if (auto *IdxC = dyn_cast<ConstantSDNode>(Idx)) {
10540-
unsigned Idx = IdxC->getZExtValue();
10541-
unsigned Shamt = Idx * ElemWidth;
10542-
if (Shamt > 0)
10543-
Extracted = DAG.getNode(ISD::SRL, DL, XLenVT,
10544-
DAG.getConstant(Shamt, DL, XLenVT));
10545-
} else {
10546-
SDValue Shamt = DAG.getNode(ISD::MUL, DL, XLenVT, Idx,
10547-
DAG.getConstant(ElemWidth, DL, XLenVT));
10548-
Extracted = DAG.getNode(ISD::SRL, DL, XLenVT, Shamt);
10549-
}
10550-
return DAG.getNode(ISD::TRUNCATE, DL, EltVT, Extracted);
10539+
SDValue Shamt = DAG.getNode(ISD::MUL, DL, XLenVT, Idx,
10540+
DAG.getConstant(ElemWidth, DL, XLenVT));
10541+
return DAG.getNode(ISD::SRL, DL, XLenVT, Extracted, Shamt);
1055110542
}
1055210543

1055310544
// If this is a fixed vector, we need to convert it to a scalable vector.

llvm/lib/Target/RISCV/RISCVInstrInfoP.td

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1472,11 +1472,7 @@ def SDT_RISCVPASUB : SDTypeProfile<1, 2, [SDTCisVec<0>,
14721472
SDTCisSameAs<0, 1>,
14731473
SDTCisSameAs<0, 2>]>;
14741474
def riscv_pasub : RVSDNode<"PASUB", SDT_RISCVPASUB>;
1475-
def SDT_RISCVPASUBU : SDTypeProfile<1, 2, [SDTCisVec<0>,
1476-
SDTCisInt<0>,
1477-
SDTCisSameAs<0, 1>,
1478-
SDTCisSameAs<0, 2>]>;
1479-
def riscv_pasubu : RVSDNode<"PASUBU", SDT_RISCVPASUBU>;
1475+
def riscv_pasubu : RVSDNode<"PASUBU", SDT_RISCVPASUB>;
14801476

14811477
let Predicates = [HasStdExtP] in {
14821478
def : PatGpr<abs, ABS>;

llvm/test/CodeGen/RISCV/rvp-ext-rv32.ll

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,30 @@ define void @test_pli_b_negative(ptr %ret_ptr) {
472472
ret void
473473
}
474474

475+
define void @test_extract_vector_16(ptr %ret_ptr, ptr %a_ptr) {
476+
; CHECK-LABEL: test_extract_vector_16:
477+
; CHECK: # %bb.0:
478+
; CHECK-NEXT: lw a1, 0(a1)
479+
; CHECK-NEXT: sh a1, 0(a0)
480+
; CHECK-NEXT: ret
481+
%a = load <2 x i16>, ptr %a_ptr
482+
%extracted = extractelement <2 x i16> %a, i32 0
483+
store i16 %extracted, ptr %ret_ptr
484+
ret void
485+
}
486+
487+
define void @test_extract_vector_8(ptr %ret_ptr, ptr %a_ptr) {
488+
; CHECK-LABEL: test_extract_vector_8:
489+
; CHECK: # %bb.0:
490+
; CHECK-NEXT: lw a1, 0(a1)
491+
; CHECK-NEXT: sb a1, 0(a0)
492+
; CHECK-NEXT: ret
493+
%a = load <4 x i8>, ptr %a_ptr
494+
%extracted = extractelement <4 x i8> %a, i32 0
495+
store i8 %extracted, ptr %ret_ptr
496+
ret void
497+
}
498+
475499
; Intrinsic declarations
476500
declare <2 x i16> @llvm.sadd.sat.v2i16(<2 x i16>, <2 x i16>)
477501
declare <2 x i16> @llvm.uadd.sat.v2i16(<2 x i16>, <2 x i16>)

llvm/test/CodeGen/RISCV/rvp-ext-rv64.ll

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,42 @@ define void @test_pli_w(ptr %ret_ptr) {
459459
ret void
460460
}
461461

462+
define void @test_extract_vector_16(ptr %ret_ptr, ptr %a_ptr) {
463+
; CHECK-LABEL: test_extract_vector_16:
464+
; CHECK: # %bb.0:
465+
; CHECK-NEXT: ld a1, 0(a1)
466+
; CHECK-NEXT: sh a1, 0(a0)
467+
; CHECK-NEXT: ret
468+
%a = load <4 x i16>, ptr %a_ptr
469+
%extracted = extractelement <4 x i16> %a, i32 0
470+
store i16 %extracted, ptr %ret_ptr
471+
ret void
472+
}
473+
474+
define void @test_extract_vector_8(ptr %ret_ptr, ptr %a_ptr) {
475+
; CHECK-LABEL: test_extract_vector_8:
476+
; CHECK: # %bb.0:
477+
; CHECK-NEXT: ld a1, 0(a1)
478+
; CHECK-NEXT: sb a1, 0(a0)
479+
; CHECK-NEXT: ret
480+
%a = load <8 x i8>, ptr %a_ptr
481+
%extracted = extractelement <8 x i8> %a, i32 0
482+
store i8 %extracted, ptr %ret_ptr
483+
ret void
484+
}
485+
486+
define void @test_extract_vector_32(ptr %ret_ptr, ptr %a_ptr) {
487+
; CHECK-LABEL: test_extract_vector_32:
488+
; CHECK: # %bb.0:
489+
; CHECK-NEXT: ld a1, 0(a1)
490+
; CHECK-NEXT: sw a1, 0(a0)
491+
; CHECK-NEXT: ret
492+
%a = load <2 x i32>, ptr %a_ptr
493+
%extracted = extractelement <2 x i32> %a, i32 0
494+
store i32 %extracted, ptr %ret_ptr
495+
ret void
496+
}
497+
462498
; Intrinsic declarations
463499
declare <4 x i16> @llvm.sadd.sat.v4i16(<4 x i16>, <4 x i16>)
464500
declare <4 x i16> @llvm.uadd.sat.v4i16(<4 x i16>, <4 x i16>)

0 commit comments

Comments
 (0)