Lines Matching defs:Start
122 static std::pair<Value *, Value *> matchStridedStart(Value *Start,
125 auto *StartC = dyn_cast<Constant>(Start);
130 if (match(Start, m_Intrinsic<Intrinsic::experimental_stepvector>())) {
131 auto *Ty = Start->getType()->getScalarType();
137 auto *BO = dyn_cast<BinaryOperator>(Start);
159 std::tie(Start, Stride) = matchStridedStart(BO->getOperand(OtherIndex),
161 if (!Start)
176 Start = Builder.CreateAdd(Start, Splat);
179 Start = Builder.CreateMul(Start, Splat);
183 Start = Builder.CreateShl(Start, Splat);
188 return std::make_pair(Start, Stride);
207 Value *Step, *Start;
208 if (!matchSimpleRecurrence(Phi, Inc, Start, Step) ||
225 std::tie(Start, Stride) = matchStridedStart(Start, Builder);
226 if (!Start)
232 PHINode::Create(Start->getType(), 2, Phi->getName() + ".scalar", Phi->getIterator());
235 BasePtr->addIncoming(Start, Phi->getIncomingBlock(1 - IncrementingBlock));
292 // Locate the Step and Start values from the recurrence.
296 Value *Start = BasePtr->getOperand(StartBlock);
310 Start = Builder.CreateAdd(Start, SplatOp, "start");
314 Start = Builder.CreateMul(Start, SplatOp, "start");
320 Start = Builder.CreateShl(Start, SplatOp, "start");
328 BasePtr->setIncomingValue(StartBlock, Start);
423 auto [Start, Stride] = matchStridedStart(VecIndex, Builder);
424 if (Start) {
429 Ops[*VecOperand] = Start;