Lines Matching defs:SinkCandidate
135 VPSingleDefRecipe *SinkCandidate;
136 std::tie(SinkTo, SinkCandidate) = WorkList[I];
137 if (SinkCandidate->getParent() == SinkTo ||
138 SinkCandidate->mayHaveSideEffects() ||
139 SinkCandidate->mayReadOrWriteMemory())
141 if (auto *RepR = dyn_cast<VPReplicateRecipe>(SinkCandidate)) {
144 } else if (!isa<VPScalarIVStepsRecipe>(SinkCandidate))
151 // SinkCandidate.
153 SinkCandidate](VPUser *U) {
157 NeedsDuplicating = UI->onlyFirstLaneUsed(SinkCandidate);
159 return NeedsDuplicating && isa<VPReplicateRecipe>(SinkCandidate);
161 if (!all_of(SinkCandidate->users(), CanSinkWithUser))
167 Instruction *I = SinkCandidate->getUnderlyingInstr();
168 auto *Clone = new VPReplicateRecipe(I, SinkCandidate->operands(), true);
171 Clone->insertBefore(SinkCandidate);
172 SinkCandidate->replaceUsesWithIf(Clone, [SinkTo](VPUser &U, unsigned) {
176 SinkCandidate->moveBefore(*SinkTo, SinkTo->getFirstNonPhi());
177 for (VPValue *Op : SinkCandidate->operands())
1065 auto TryToPushSinkCandidate = [&](VPRecipeBase *SinkCandidate) {
1068 if (SinkCandidate == Previous)
1071 if (isa<VPHeaderPHIRecipe>(SinkCandidate) ||
1072 !Seen.insert(SinkCandidate).second ||
1073 VPDT.properlyDominates(Previous, SinkCandidate))
1076 if (SinkCandidate->mayHaveSideEffects())
1079 WorkList.push_back(SinkCandidate);
1102 for (VPRecipeBase *SinkCandidate : WorkList) {
1103 if (SinkCandidate == FOR)
1106 SinkCandidate->moveAfter(Previous);
1107 Previous = SinkCandidate;