================ @@ -404,6 +405,49 @@ Value *VPInstruction::generateInstruction(VPTransformState &State, Builder.GetInsertBlock()->getTerminator()->eraseFromParent(); return CondBr; } + case VPInstruction::CreateVectorPtr: { + // Calculate the pointer for the specific unroll-part. + Value *PartPtr = nullptr; + bool IsReverse = getNumOperands() > 1; + auto *MemR = cast<VPWidenMemoryInstructionRecipe>(*user_begin()); + Type *ScalarDataTy = + MemR->isStore() ? cast<StoreInst>(&MemR->getIngredient()) + ->getValueOperand() + ->getType() + : cast<LoadInst>(&MemR->getIngredient())->getType(); + // Use i32 for the gep index type when the value is constant, + // or query DataLayout for a more suitable index type otherwise. + const DataLayout &DL = + Builder.GetInsertBlock()->getModule()->getDataLayout(); + Type *IndexTy = State.VF.isScalable() && (IsReverse || Part > 0) + ? DL.getIndexType(ScalarDataTy->getPointerTo()) + : Builder.getInt32Ty(); + Value *Ptr = State.get(getOperand(0), VPIteration(0, 0)); + bool InBounds = false; + if (auto *gep = dyn_cast<GetElementPtrInst>(Ptr->stripPointerCasts())) ---------------- alexey-bataev wrote:
Gep https://github.com/llvm/llvm-project/pull/72164 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits