Skip to content

Commit 725dfad

Browse files
committed
fixup! Address review comments
1 parent 16915c9 commit 725dfad

File tree

2 files changed

+17
-19
lines changed

2 files changed

+17
-19
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22572,6 +22572,9 @@ static bool isMultipleOfN(const Value *V, const DataLayout &DL, unsigned N) {
2257222572
///
2257322573
/// NOTE: the deinterleave2 intrinsic won't be touched and is expected to be
2257422574
/// removed by the caller
22575+
/// TODO: We probably can loosen the dependency on matching extractvalue when
22576+
/// dealing with factor of 2 (extractvalue is still required for most of other
22577+
/// factors though).
2257522578
bool RISCVTargetLowering::lowerDeinterleavedIntrinsicToVPLoad(
2257622579
VPIntrinsic *Load, Value *Mask,
2257722580
ArrayRef<Value *> DeinterleaveResults) const {
@@ -22608,7 +22611,7 @@ bool RISCVTargetLowering::lowerDeinterleavedIntrinsicToVPLoad(
2260822611
return false;
2260922612

2261022613
auto *XLenTy = Type::getIntNTy(Load->getContext(), Subtarget.getXLen());
22611-
Value *EVL = Builder.CreateZExtOrTrunc(
22614+
Value *EVL = Builder.CreateZExt(
2261222615
Builder.CreateUDiv(WideEVL, ConstantInt::get(WideEVL->getType(), Factor)),
2261322616
XLenTy);
2261422617

@@ -22715,7 +22718,7 @@ bool RISCVTargetLowering::lowerInterleavedIntrinsicToVPStore(
2271522718
return false;
2271622719

2271722720
auto *XLenTy = Type::getIntNTy(Store->getContext(), Subtarget.getXLen());
22718-
Value *EVL = Builder.CreateZExtOrTrunc(
22721+
Value *EVL = Builder.CreateZExt(
2271922722
Builder.CreateUDiv(WideEVL, ConstantInt::get(WideEVL->getType(), Factor)),
2272022723
XLenTy);
2272122724

@@ -22741,17 +22744,12 @@ bool RISCVTargetLowering::lowerInterleavedIntrinsicToVPStore(
2274122744
StoredVal = Builder.CreateCall(
2274222745
VecInsertFunc, {StoredVal, InterleaveOperands[i], Builder.getInt32(i)});
2274322746

22744-
SmallVector<Value *, 5> Operands;
22745-
Operands.push_back(StoredVal);
22746-
Operands.push_back(Store->getArgOperand(1));
22747-
2274822747
Function *VssegNFunc = Intrinsic::getOrInsertDeclaration(
2274922748
Store->getModule(), IntrMaskIds[Factor - 2],
2275022749
{VecTupTy, Mask->getType(), EVL->getType()});
2275122750

22752-
Operands.push_back(Mask);
22753-
Operands.push_back(EVL);
22754-
Operands.push_back(ConstantInt::get(XLenTy, Log2_64(SEW)));
22751+
Value *Operands[] = {StoredVal, Store->getArgOperand(1), Mask, EVL,
22752+
ConstantInt::get(XLenTy, Log2_64(SEW))};
2275522753

2275622754
Builder.CreateCall(VssegNFunc, Operands);
2275722755
return true;

llvm/test/CodeGen/RISCV/rvv/vp-vector-interleaved-access.ll

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ define {<vscale x 2 x i32>, <vscale x 2 x i32>} @load_factor2_v2(ptr %ptr, i32 %
2323
%deinterleaved.results = call { <vscale x 2 x i32>, <vscale x 2 x i32> } @llvm.vector.deinterleave2.nxv4i32(<vscale x 4 x i32> %wide.masked.load)
2424
%t0 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %deinterleaved.results, 0
2525
%t1 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %deinterleaved.results, 1
26-
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } undef, <vscale x 2 x i32> %t0, 0
26+
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } poison, <vscale x 2 x i32> %t0, 0
2727
%res1 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %res0, <vscale x 2 x i32> %t1, 1
2828
ret { <vscale x 2 x i32>, <vscale x 2 x i32> } %res1
2929
}
@@ -56,7 +56,7 @@ define {<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2
5656
%t1 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %d2, 0
5757
%t3 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %d2, 1
5858

59-
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } undef, <vscale x 2 x i32> %t0, 0
59+
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } poison, <vscale x 2 x i32> %t0, 0
6060
%res1 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } %res0, <vscale x 2 x i32> %t1, 1
6161
%res2 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } %res1, <vscale x 2 x i32> %t2, 2
6262
%res3 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } %res2, <vscale x 2 x i32> %t3, 3
@@ -104,7 +104,7 @@ define {<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2
104104
%t3 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %d6, 0
105105
%t7 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %d6, 1
106106

107-
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } undef, <vscale x 2 x i32> %t0, 0
107+
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } poison, <vscale x 2 x i32> %t0, 0
108108
%res1 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } %res0, <vscale x 2 x i32> %t1, 1
109109
%res2 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } %res1, <vscale x 2 x i32> %t2, 2
110110
%res3 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } %res2, <vscale x 2 x i32> %t3, 3
@@ -227,7 +227,7 @@ define {<vscale x 2 x i32>, <vscale x 2 x i32>} @masked_load_factor2_v2(<vscale
227227
%deinterleaved.results = tail call { <vscale x 2 x i32>, <vscale x 2 x i32> } @llvm.vector.deinterleave2.nxv16i32(<vscale x 4 x i32> %wide.masked.load)
228228
%t0 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %deinterleaved.results, 0
229229
%t1 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %deinterleaved.results, 1
230-
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } undef, <vscale x 2 x i32> %t0, 0
230+
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } poison, <vscale x 2 x i32> %t0, 0
231231
%res1 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %res0, <vscale x 2 x i32> %t1, 1
232232
ret { <vscale x 2 x i32>, <vscale x 2 x i32> } %res1
233233
}
@@ -263,7 +263,7 @@ define {<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2
263263
%t1 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %d2, 0
264264
%t3 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %d2, 1
265265

266-
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } undef, <vscale x 2 x i32> %t0, 0
266+
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } poison, <vscale x 2 x i32> %t0, 0
267267
%res1 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } %res0, <vscale x 2 x i32> %t1, 1
268268
%res2 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } %res1, <vscale x 2 x i32> %t2, 2
269269
%res3 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } %res2, <vscale x 2 x i32> %t3, 3
@@ -498,7 +498,7 @@ define {<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2
498498
%t1 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %d2, 1
499499
%t3 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %d2, 1
500500

501-
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } undef, <vscale x 2 x i32> %t0, 0
501+
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } poison, <vscale x 2 x i32> %t0, 0
502502
%res1 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } %res0, <vscale x 2 x i32> %t1, 1
503503
%res2 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } %res1, <vscale x 2 x i32> %t2, 2
504504
%res3 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } %res2, <vscale x 2 x i32> %t3, 3
@@ -553,7 +553,7 @@ define {<vscale x 4 x i32>, <vscale x 2 x i32>, <vscale x 1 x i32>, <vscale x 1
553553
%t2 = extractvalue { <vscale x 1 x i32>, <vscale x 1 x i32> } %d2, 0
554554
%t3 = extractvalue { <vscale x 1 x i32>, <vscale x 1 x i32> } %d2, 1
555555

556-
%res0 = insertvalue { <vscale x 4 x i32>, <vscale x 2 x i32>, <vscale x 1 x i32>, <vscale x 1 x i32> } undef, <vscale x 4 x i32> %t0, 0
556+
%res0 = insertvalue { <vscale x 4 x i32>, <vscale x 2 x i32>, <vscale x 1 x i32>, <vscale x 1 x i32> } poison, <vscale x 4 x i32> %t0, 0
557557
%res1 = insertvalue { <vscale x 4 x i32>, <vscale x 2 x i32>, <vscale x 1 x i32>, <vscale x 1 x i32> } %res0, <vscale x 2 x i32> %t1, 1
558558
%res2 = insertvalue { <vscale x 4 x i32>, <vscale x 2 x i32>, <vscale x 1 x i32>, <vscale x 1 x i32> } %res1, <vscale x 1 x i32> %t2, 2
559559
%res3 = insertvalue { <vscale x 4 x i32>, <vscale x 2 x i32>, <vscale x 1 x i32>, <vscale x 1 x i32> } %res2, <vscale x 1 x i32> %t3, 3
@@ -663,7 +663,7 @@ define {<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>} @not_scalable_vectors(ptr %p
663663
%t1 = extractvalue { <2 x i32>, <2 x i32> } %d2, 0
664664
%t3 = extractvalue { <2 x i32>, <2 x i32> } %d2, 1
665665

666-
%res0 = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } undef, <2 x i32> %t0, 0
666+
%res0 = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } poison, <2 x i32> %t0, 0
667667
%res1 = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %res0, <2 x i32> %t1, 1
668668
%res2 = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %res1, <2 x i32> %t2, 2
669669
%res3 = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %res2, <2 x i32> %t3, 3
@@ -753,7 +753,7 @@ define {<vscale x 2 x i32>, <vscale x 2 x i32>} @not_same_mask(<vscale x 2 x i1>
753753
%deinterleaved.results = tail call { <vscale x 2 x i32>, <vscale x 2 x i32> } @llvm.vector.deinterleave2.nxv16i32(<vscale x 4 x i32> %wide.masked.load)
754754
%t0 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %deinterleaved.results, 0
755755
%t1 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %deinterleaved.results, 1
756-
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } undef, <vscale x 2 x i32> %t0, 0
756+
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } poison, <vscale x 2 x i32> %t0, 0
757757
%res1 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %res0, <vscale x 2 x i32> %t1, 1
758758
ret { <vscale x 2 x i32>, <vscale x 2 x i32> } %res1
759759
}
@@ -805,7 +805,7 @@ define {<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2
805805
%t1 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %d2, 0
806806
%t3 = extractvalue { <vscale x 2 x i32>, <vscale x 2 x i32> } %d2, 1
807807

808-
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } undef, <vscale x 2 x i32> %t0, 0
808+
%res0 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } poison, <vscale x 2 x i32> %t0, 0
809809
%res1 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } %res0, <vscale x 2 x i32> %t1, 1
810810
%res2 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } %res1, <vscale x 2 x i32> %t2, 2
811811
%res3 = insertvalue { <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32> } %res2, <vscale x 2 x i32> %t3, 3

0 commit comments

Comments
 (0)