================ @@ -2778,6 +2808,60 @@ void VPWidenPointerInductionRecipe::print(raw_ostream &O, const Twine &Indent, } #endif +void VPAliasLaneMaskRecipe::execute(VPTransformState &State) { + IRBuilderBase Builder = State.Builder; + Value *SinkValue = State.get(getSinkValue(), 0, true); + Value *SourceValue = State.get(getSourceValue(), 0, true); + + unsigned ElementSize = 0; + auto *ReadInsn = cast<Instruction>(SourceValue); + auto *ReadCast = dyn_cast<CastInst>(SourceValue); + if (ReadInsn->getOpcode() == Instruction::Add) + ReadCast = dyn_cast<CastInst>(ReadInsn->getOperand(0)); + + if (ReadCast && ReadCast->getOpcode() == Instruction::PtrToInt) { + Value *Ptr = ReadCast->getOperand(0); + for (auto *Use : Ptr->users()) { + if (auto *GEP = dyn_cast<GetElementPtrInst>(Use)) { + auto *EltVT = GEP->getSourceElementType(); + if (EltVT->isArrayTy()) + ElementSize = EltVT->getArrayElementType()->getScalarSizeInBits() * + EltVT->getArrayNumElements(); + else + ElementSize = GEP->getSourceElementType()->getScalarSizeInBits() / 8; + break; + } + } + } + assert(ElementSize > 0 && "Couldn't get element size from pointer"); ---------------- SamTebbs33 wrote:
Thanks Graham, I've had a deeper look and `PointerDiffInfo` provides an `AccessSize` which corresponds to what we want, so I'm using that now. https://github.com/llvm/llvm-project/pull/100579 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits