Lines Matching defs:Candidate
137 struct Candidate {
145 Candidate() = default;
146 Candidate(Kind CT, const SCEV *B, ConstantInt *Idx, Value *S,
179 Candidate *Basis = nullptr;
187 bool isBasisFor(const Candidate &Basis, const Candidate &C);
190 bool isFoldable(const Candidate &C, TargetTransformInfo *TTI,
195 bool isSimplestForm(const Candidate &C);
227 void allocateCandidatesAndFindBasis(Candidate::Kind CT, const SCEV *B,
232 void rewriteCandidateWithBasis(const Candidate &C, const Candidate &Basis);
241 static Value *emitBump(const Candidate &Basis, const Candidate &C,
248 std::list<Candidate> Candidates;
272 bool StraightLineStrengthReduce::isBasisFor(const Candidate &Basis,
273 const Candidate &C) {
301 bool StraightLineStrengthReduce::isFoldable(const Candidate &C,
304 if (C.CandidateKind == Candidate::Add)
306 if (C.CandidateKind == Candidate::GEP)
322 bool StraightLineStrengthReduce::isSimplestForm(const Candidate &C) {
323 if (C.CandidateKind == Candidate::Add) {
327 if (C.CandidateKind == Candidate::Mul) {
331 if (C.CandidateKind == Candidate::GEP) {
347 Candidate::Kind CT, const SCEV *B, ConstantInt *Idx, Value *S,
349 Candidate C(CT, B, Idx, S, I);
416 allocateCandidatesAndFindBasis(Candidate::Add, SE->getSCEV(LHS), Idx, S, I);
421 allocateCandidatesAndFindBasis(Candidate::Add, SE->getSCEV(LHS), Idx, S, I);
425 allocateCandidatesAndFindBasis(Candidate::Add, SE->getSCEV(LHS), One, RHS,
447 allocateCandidatesAndFindBasis(Candidate::Mul, SE->getSCEV(B), Idx, RHS, I);
453 allocateCandidatesAndFindBasis(Candidate::Mul, SE->getSCEV(B), Idx, RHS, I);
457 allocateCandidatesAndFindBasis(Candidate::Mul, SE->getSCEV(LHS), Zero, RHS,
488 allocateCandidatesAndFindBasis(Candidate::GEP, B, ScaledIdx, S, I);
579 Value *StraightLineStrengthReduce::emitBump(const Candidate &Basis,
580 const Candidate &C,
616 const Candidate &C, const Candidate &Basis) {
637 case Candidate::Add:
638 case Candidate::Mul: {
661 case Candidate::GEP: {
698 const Candidate &C = Candidates.back();