@@ -766,7 +766,7 @@ multiclass RVVUnitStridedSegLoadTuple<string op> {
766766 IntrinsicTypes = {ResultType, Ops[0]->getType(), Ops.back()->getType()};
767767 else
768768 IntrinsicTypes = {ResultType, Ops.back()->getType()};
769- SmallVector<llvm::Value*, 12 > Operands;
769+ SmallVector<llvm::Value*, 6 > Operands;
770770
771771 bool NoPassthru =
772772 (IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) |
@@ -836,7 +836,7 @@ multiclass RVVUnitStridedSegStoreTuple<string op> {
836836 // Intrinsic: (tuple, ptr, vl)
837837 unsigned Offset = IsMasked ? 1 : 0;
838838
839- SmallVector<llvm::Value*, 12 > Operands;
839+ SmallVector<llvm::Value*, 5 > Operands;
840840 Operands.push_back(Ops[Offset + 1]); // tuple
841841 Operands.push_back(Ops[Offset]); // Ptr
842842 if (IsMasked)
@@ -886,7 +886,7 @@ multiclass RVVUnitStridedSegLoadFFTuple<string op> {
886886 IntrinsicTypes = {ResultType, Ops.back()->getType(), Ops[0]->getType()};
887887 else
888888 IntrinsicTypes = {ResultType, Ops.back()->getType()};
889- SmallVector<llvm::Value*, 12 > Operands;
889+ SmallVector<llvm::Value*, 6 > Operands;
890890
891891 bool NoPassthru =
892892 (IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) |
@@ -961,7 +961,7 @@ multiclass RVVStridedSegLoadTuple<string op> {
961961 IntrinsicTypes = {ResultType, Ops.back()->getType(), Ops[0]->getType()};
962962 else
963963 IntrinsicTypes = {ResultType, Ops.back()->getType()};
964- SmallVector<llvm::Value*, 12 > Operands;
964+ SmallVector<llvm::Value*, 7 > Operands;
965965
966966 bool NoPassthru =
967967 (IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) |
@@ -1033,7 +1033,7 @@ multiclass RVVStridedSegStoreTuple<string op> {
10331033 // Intrinsic: (tuple, ptr, stride, vl)
10341034 unsigned Offset = IsMasked ? 1 : 0;
10351035
1036- SmallVector<llvm::Value*, 12 > Operands;
1036+ SmallVector<llvm::Value*, 6 > Operands;
10371037 Operands.push_back(Ops[Offset + 2]); // tuple
10381038 Operands.push_back(Ops[Offset]); // Ptr
10391039 Operands.push_back(Ops[Offset + 1]); // Stride
@@ -1075,7 +1075,7 @@ multiclass RVVIndexedSegLoadTuple<string op> {
10751075 []<string>)),
10761076 ManualCodegen = [{
10771077 {
1078- SmallVector<llvm::Value*, 12 > Operands;
1078+ SmallVector<llvm::Value*, 7 > Operands;
10791079
10801080 bool NoPassthru =
10811081 (IsMasked && (PolicyAttrs & RVV_VTA) && (PolicyAttrs & RVV_VMA)) |
@@ -1150,7 +1150,7 @@ multiclass RVVIndexedSegStoreTuple<string op> {
11501150 // Intrinsic: (tuple, ptr, index, vl)
11511151 unsigned Offset = IsMasked ? 1 : 0;
11521152
1153- SmallVector<llvm::Value*, 12 > Operands;
1153+ SmallVector<llvm::Value*, 6 > Operands;
11541154 Operands.push_back(Ops[Offset + 2]); // tuple
11551155 Operands.push_back(Ops[Offset]); // Ptr
11561156 Operands.push_back(Ops[Offset + 1]); // Idx
@@ -2536,24 +2536,22 @@ let HasMasked = false, HasVL = false, IRName = "" in {
25362536 ManualCodegen = [{
25372537 {
25382538 auto *VecTy = cast<ScalableVectorType>(ResultType);
2539- // Mask to only valid indices.
2540- Ops[1] = Builder.CreateZExt(Ops[1], Builder.getInt64Ty());
25412539 if (auto *OpVecTy = dyn_cast<ScalableVectorType>(Ops[0]->getType())) {
25422540 unsigned MaxIndex = OpVecTy->getMinNumElements() / VecTy->getMinNumElements();
25432541 assert(isPowerOf2_32(MaxIndex));
2542+ // Mask to only valid indices.
2543+ Ops[1] = Builder.CreateZExt(Ops[1], Builder.getInt64Ty());
25442544 Ops[1] = Builder.CreateAnd(Ops[1], MaxIndex - 1);
25452545 Ops[1] = Builder.CreateMul(Ops[1],
25462546 ConstantInt::get(Ops[1]->getType(),
25472547 VecTy->getMinNumElements()));
25482548 return Builder.CreateExtractVector(ResultType, Ops[0], Ops[1]);
25492549 }
25502550
2551- bool IsRISCV64 = getTarget().getTriple().isRISCV64();
2552- llvm::Type *XLenTy = IsRISCV64 ? Builder.getInt64Ty() :
2553- Builder.getInt32Ty();
25542551 return Builder.CreateIntrinsic(Intrinsic::riscv_vector_extract,
2555- {ResultType, Ops[0]->getType(), XLenTy},
2556- {Ops[0], Ops[1]});
2552+ {ResultType, Ops[0]->getType()},
2553+ {Ops[0], Builder.CreateZExt(Ops[1],
2554+ Builder.getInt32Ty())});
25572555 }
25582556 }] in {
25592557 foreach dst_lmul = ["(SFixedLog2LMUL:0)", "(SFixedLog2LMUL:1)", "(SFixedLog2LMUL:2)"] in {
@@ -2574,25 +2572,23 @@ let HasMasked = false, HasVL = false, IRName = "" in {
25742572 let Name = "vset_v", MaskedPolicyScheme = NonePolicy,
25752573 ManualCodegen = [{
25762574 {
2577- auto *VecTy = cast<ScalableVectorType>(Ops[2]->getType());
2578- // Mask to only valid indices.
2579- Ops[1] = Builder.CreateZExt(Ops[1], Builder.getInt64Ty());
25802575 if (auto *ResVecTy = dyn_cast<ScalableVectorType>(ResultType)) {
2576+ auto *VecTy = cast<ScalableVectorType>(Ops[2]->getType());
25812577 unsigned MaxIndex = ResVecTy->getMinNumElements() / VecTy->getMinNumElements();
25822578 assert(isPowerOf2_32(MaxIndex));
2579+ // Mask to only valid indices.
2580+ Ops[1] = Builder.CreateZExt(Ops[1], Builder.getInt64Ty());
25832581 Ops[1] = Builder.CreateAnd(Ops[1], MaxIndex - 1);
25842582 Ops[1] = Builder.CreateMul(Ops[1],
25852583 ConstantInt::get(Ops[1]->getType(),
25862584 VecTy->getMinNumElements()));
25872585 return Builder.CreateInsertVector(ResultType, Ops[0], Ops[2], Ops[1]);
25882586 }
25892587
2590- bool IsRISCV64 = getTarget().getTriple().isRISCV64();
2591- llvm::Type *XLenTy = IsRISCV64 ? Builder.getInt64Ty() :
2592- Builder.getInt32Ty();
25932588 return Builder.CreateIntrinsic(Intrinsic::riscv_vector_insert,
2594- {ResultType, Ops[2]->getType(), XLenTy},
2595- {Ops[0], Ops[2], Ops[1]});
2589+ {ResultType, Ops[2]->getType()},
2590+ {Ops[0], Ops[2],
2591+ Builder.CreateZExt(Ops[1],Builder.getInt32Ty())});
25962592 }
25972593 }] in {
25982594 foreach dst_lmul = ["(LFixedLog2LMUL:1)", "(LFixedLog2LMUL:2)", "(LFixedLog2LMUL:3)"] in {
@@ -2618,23 +2614,19 @@ let HasMasked = false, HasVL = false, IRName = "" in {
26182614 {
26192615 llvm::Value *ReturnVector = llvm::PoisonValue::get(ResultType);
26202616 auto *VecTy = cast<ScalableVectorType>(Ops[0]->getType());
2621- bool IsRISCV64 = getTarget().getTriple().isRISCV64();
2622- llvm::Type *XLenTy = IsRISCV64 ? Builder.getInt64Ty() :
2623- Builder.getInt32Ty();
26242617 for (unsigned I = 0, N = Ops.size(); I < N; ++I) {
2625- llvm::Value *Idx =
2626- ConstantInt::get(Builder.getInt64Ty(),
2627- isa<ScalableVectorType>(ResultType) ?
2628- VecTy->getMinNumElements() * I : I);
2629-
2630- if (isa<ScalableVectorType>(ResultType))
2618+ if (isa<ScalableVectorType>(ResultType)) {
2619+ llvm::Value *Idx = ConstantInt::get(Builder.getInt64Ty(),
2620+ VecTy->getMinNumElements() * I);
26312621 ReturnVector =
26322622 Builder.CreateInsertVector(ResultType, ReturnVector, Ops[I], Idx);
2633- else
2623+ } else {
2624+ llvm::Value *Idx = ConstantInt::get(Builder.getInt32Ty(), I);
26342625 ReturnVector =
26352626 Builder.CreateIntrinsic(Intrinsic::riscv_vector_insert,
2636- {ResultType, Ops[I]->getType(), XLenTy },
2627+ {ResultType, Ops[I]->getType()},
26372628 {ReturnVector, Ops[I], Idx});
2629+ }
26382630
26392631 }
26402632 return ReturnVector;
0 commit comments