Lines Matching defs:Basis

179     Candidate *Basis = nullptr;
185 // Returns true if Basis is a basis for C, i.e., Basis dominates C and they
187 bool isBasisFor(const Candidate &Basis, const Candidate &C);
231 // Rewrites candidate C with respect to Basis.
232 void rewriteCandidateWithBasis(const Candidate &C, const Candidate &Basis);
240 // Emit code that computes the "bump" from Basis to C.
241 static Value *emitBump(const Candidate &Basis, const Candidate &C,
272 bool StraightLineStrengthReduce::isBasisFor(const Candidate &Basis,
274 return (Basis.Ins != C.Ins && // skip the same instruction
275 // They must have the same type too. Basis.Base == C.Base
277 Basis.Ins->getType() == C.Ins->getType() &&
278 // Basis must dominate C in order to rewrite C with respect to Basis.
279 DT->dominates(Basis.Ins->getParent(), C.Ins->getParent()) &&
281 Basis.Base == C.Base && Basis.Stride == C.Stride &&
282 Basis.CandidateKind == C.CandidateKind);
368 for (auto Basis = Candidates.rbegin();
369 Basis != Candidates.rend() && NumIterations < MaxNumIterations;
370 ++Basis, ++NumIterations) {
371 if (isBasisFor(*Basis, C)) {
372 C.Basis = &(*Basis);
579 Value *StraightLineStrengthReduce::emitBump(const Candidate &Basis,
583 APInt Idx = C.Index->getValue(), BasisIdx = Basis.Index->getValue();
587 // Compute Bump = C - Basis = (i' - i) * S.
598 IntegerType::get(Basis.Ins->getContext(), IndexOffset.getBitWidth());
616 const Candidate &C, const Candidate &Basis) {
620 assert(C.CandidateKind == Basis.CandidateKind && C.Base == Basis.Base &&
621 C.Stride == Basis.Stride);
624 assert(Basis.Ins->getParent() != nullptr && "the basis is unlinked");
634 Value *Bump = emitBump(Basis, C, Builder, DL);
639 // C = Basis + Bump
642 // If Bump is a neg instruction, emit C = Basis - (-Bump).
643 Reduced = Builder.CreateSub(Basis.Ins, NegBump);
657 Reduced = Builder.CreateAdd(Basis.Ins, Bump);
663 // C = (char *)Basis + Bump
664 Reduced = Builder.CreatePtrAdd(Basis.Ins, Bump, "", InBounds);
699 if (C.Basis != nullptr) {
700 rewriteCandidateWithBasis(C, *C.Basis);