@@ -21464,26 +21464,22 @@ bool RISCVTargetLowering::lowerDeinterleaveIntrinsicToLoad(
2146421464
2146521465 const unsigned Factor = 2;
2146621466
21467- VectorType *VTy = cast<VectorType>(DI->getOperand(0)->getType());
2146821467 VectorType *ResVTy = cast<VectorType>(DI->getType()->getContainedType(0));
2146921468 const DataLayout &DL = LI->getDataLayout();
2147021469
2147121470 if (!isLegalInterleavedAccessType(ResVTy, Factor, LI->getAlign(),
2147221471 LI->getPointerAddressSpace(), DL))
2147321472 return false;
2147421473
21475- Function *VlsegNFunc;
21476- Value *VL, *Return;
21474+ Value *Return;
2147721475 Type *XLenTy = Type::getIntNTy(LI->getContext(), Subtarget.getXLen());
21478- SmallVector<Value *, 10> Ops;
2147921476
21480- if (auto *FVTy = dyn_cast<FixedVectorType>(VTy )) {
21481- VlsegNFunc = Intrinsic::getDeclaration(
21477+ if (auto *FVTy = dyn_cast<FixedVectorType>(ResVTy )) {
21478+ Function * VlsegNFunc = Intrinsic::getDeclaration(
2148221479 LI->getModule(), FixedVlsegIntrIds[Factor - 2],
2148321480 {ResVTy, LI->getPointerOperandType(), XLenTy});
21484- VL = ConstantInt::get(XLenTy, FVTy->getNumElements());
21485- Ops.append({LI->getPointerOperand(), VL});
21486- Return = Builder.CreateCall(VlsegNFunc, Ops);
21481+ Value *VL = ConstantInt::get(XLenTy, FVTy->getNumElements());
21482+ Return = Builder.CreateCall(VlsegNFunc, {LI->getPointerOperand(), VL});
2148721483 } else {
2148821484 static const Intrinsic::ID IntrIds[] = {
2148921485 Intrinsic::riscv_vlseg2, Intrinsic::riscv_vlseg3,
@@ -21499,13 +21495,13 @@ bool RISCVTargetLowering::lowerDeinterleaveIntrinsicToLoad(
2149921495 NumElts * SEW / 8),
2150021496 Factor);
2150121497
21502- VlsegNFunc = Intrinsic::getDeclaration(LI->getModule(), IntrIds[Factor - 2],
21503- {VecTupTy, XLenTy});
21504- VL = Constant::getAllOnesValue(XLenTy);
21498+ Function * VlsegNFunc = Intrinsic::getDeclaration(
21499+ LI->getModule(), IntrIds[Factor - 2], {VecTupTy, XLenTy});
21500+ Value * VL = Constant::getAllOnesValue(XLenTy);
2150521501
21506- Ops.append({PoisonValue::get(VecTupTy), LI->getPointerOperand(), VL,
21507- ConstantInt ::get(XLenTy, Log2_64(SEW))});
21508- Value *Vlseg = Builder.CreateCall(VlsegNFunc, Ops );
21502+ Value *Vlseg = Builder.CreateCall(
21503+ VlsegNFunc, {PoisonValue ::get(VecTupTy), LI->getPointerOperand(), VL,
21504+ ConstantInt::get(XLenTy, Log2_64(SEW))} );
2150921505
2151021506 SmallVector<Type *, 2> AggrTypes{Factor, ResVTy};
2151121507 Return = PoisonValue::get(StructType::get(LI->getContext(), AggrTypes));
@@ -21535,24 +21531,21 @@ bool RISCVTargetLowering::lowerInterleaveIntrinsicToStore(
2153521531
2153621532 const unsigned Factor = 2;
2153721533
21538- VectorType *VTy = cast<VectorType>(II->getType());
21539- VectorType *InVTy = cast<VectorType>(II->getOperand(0)->getType());
21534+ VectorType *InVTy = cast<VectorType>(II->getArgOperand(0)->getType());
2154021535 const DataLayout &DL = SI->getDataLayout();
2154121536
2154221537 if (!isLegalInterleavedAccessType(InVTy, Factor, SI->getAlign(),
2154321538 SI->getPointerAddressSpace(), DL))
2154421539 return false;
2154521540
21546- Function *VssegNFunc;
21547- Value *VL;
2154821541 Type *XLenTy = Type::getIntNTy(SI->getContext(), Subtarget.getXLen());
2154921542
21550- if (auto *FVTy = dyn_cast<FixedVectorType>(VTy )) {
21551- VssegNFunc = Intrinsic::getDeclaration(
21543+ if (auto *FVTy = dyn_cast<FixedVectorType>(InVTy )) {
21544+ Function * VssegNFunc = Intrinsic::getDeclaration(
2155221545 SI->getModule(), FixedVssegIntrIds[Factor - 2],
2155321546 {InVTy, SI->getPointerOperandType(), XLenTy});
21554- VL = ConstantInt::get(XLenTy, FVTy->getNumElements());
21555- Builder.CreateCall(VssegNFunc, {II->getOperand (0), II->getOperand (1),
21547+ Value * VL = ConstantInt::get(XLenTy, FVTy->getNumElements());
21548+ Builder.CreateCall(VssegNFunc, {II->getArgOperand (0), II->getArgOperand (1),
2155621549 SI->getPointerOperand(), VL});
2155721550 } else {
2155821551 static const Intrinsic::ID IntrIds[] = {
@@ -21569,17 +21562,18 @@ bool RISCVTargetLowering::lowerInterleaveIntrinsicToStore(
2156921562 NumElts * SEW / 8),
2157021563 Factor);
2157121564
21572- VssegNFunc = Intrinsic::getDeclaration(SI->getModule(), IntrIds[Factor - 2],
21573- {VecTupTy, XLenTy});
21565+ Function * VssegNFunc = Intrinsic::getDeclaration(
21566+ SI->getModule(), IntrIds[Factor - 2], {VecTupTy, XLenTy});
2157421567
21575- VL = Constant::getAllOnesValue(XLenTy);
21568+ Value * VL = Constant::getAllOnesValue(XLenTy);
2157621569
2157721570 Function *VecInsertFunc = Intrinsic::getDeclaration(
2157821571 SI->getModule(), Intrinsic::riscv_tuple_insert, {VecTupTy, InVTy});
2157921572 Value *StoredVal = PoisonValue::get(VecTupTy);
2158021573 for (unsigned i = 0; i < Factor; ++i)
21581- StoredVal = Builder.CreateCall(
21582- VecInsertFunc, {StoredVal, II->getOperand(i), Builder.getInt32(i)});
21574+ StoredVal =
21575+ Builder.CreateCall(VecInsertFunc, {StoredVal, II->getArgOperand(i),
21576+ Builder.getInt32(i)});
2158321577
2158421578 Builder.CreateCall(VssegNFunc, {StoredVal, SI->getPointerOperand(), VL,
2158521579 ConstantInt::get(XLenTy, Log2_64(SEW))});
0 commit comments