Lines Matching defs:TryCand
346 SchedCandidate TryCand(ZonePolicy);
347 initCandidate(TryCand, SU, Zone.isTop(), RPTracker, SRI, SGPRPressure,
350 SchedBoundary *ZoneArg = Cand.AtTop == TryCand.AtTop ? &Zone : nullptr;
351 tryCandidate(Cand, TryCand, ZoneArg);
352 if (TryCand.Reason != NoCand) {
354 if (TryCand.ResDelta == SchedResourceDelta())
355 TryCand.initResourceDelta(Zone.DAG, SchedModel);
356 Cand.setBest(TryCand);
541 SchedCandidate &TryCand,
545 TryCand.Reason = NodeOrder;
551 tryPressure(TryCand.RPDelta.Excess, Cand.RPDelta.Excess, TryCand, Cand,
553 return TryCand.Reason != NoCand;
556 if (tryGreater(biasPhysReg(TryCand.SU, TryCand.AtTop),
557 biasPhysReg(Cand.SU, Cand.AtTop), TryCand, Cand, PhysReg))
558 return TryCand.Reason != NoCand;
563 if (tryLess(Zone->getLatencyStallCycles(TryCand.SU),
564 Zone->getLatencyStallCycles(Cand.SU), TryCand, Cand, Stall))
565 return TryCand.Reason != NoCand;
568 TryCand.initResourceDelta(DAG, SchedModel);
569 if (tryLess(TryCand.ResDelta.CritResources, Cand.ResDelta.CritResources,
570 TryCand, Cand, ResourceReduce))
571 return TryCand.Reason != NoCand;
572 if (tryGreater(TryCand.ResDelta.DemandedResources,
573 Cand.ResDelta.DemandedResources, TryCand, Cand,
575 return TryCand.Reason != NoCand;
578 if (tryLatency(TryCand, Cand, *Zone))
579 return TryCand.Reason != NoCand;
582 if (tryLess(getWeakLeft(TryCand.SU, TryCand.AtTop),
583 getWeakLeft(Cand.SU, Cand.AtTop), TryCand, Cand, Weak))
584 return TryCand.Reason != NoCand;
596 TryCand.AtTop ? DAG->getNextClusterSucc() : DAG->getNextClusterPred();
597 if (tryGreater(TryCand.SU == TryCandNextClusterSU,
598 Cand.SU == CandNextClusterSU, TryCand, Cand, Cluster))
599 return TryCand.Reason != NoCand;
603 tryPressure(TryCand.RPDelta.CriticalMax, Cand.RPDelta.CriticalMax,
604 TryCand, Cand, RegCritical, TRI, DAG->MF))
605 return TryCand.Reason != NoCand;
609 tryPressure(TryCand.RPDelta.CurrentMax, Cand.RPDelta.CurrentMax, TryCand,
611 return TryCand.Reason != NoCand;
615 if ((Zone->isTop() && TryCand.SU->NodeNum < Cand.SU->NodeNum) ||
616 (!Zone->isTop() && TryCand.SU->NodeNum > Cand.SU->NodeNum)) {
617 TryCand.Reason = NodeOrder;
636 /// \param TryCand refers to the next SUnit candidate, otherwise uninitialized.
638 /// if Cand is from a different zone than TryCand.
639 /// \return \c true if TryCand is better than Cand (Reason is NOT NoCand)
641 SchedCandidate &TryCand,
645 TryCand.Reason = NodeOrder;
650 if (tryGreater(biasPhysReg(TryCand.SU, TryCand.AtTop),
651 biasPhysReg(Cand.SU, Cand.AtTop), TryCand, Cand, PhysReg))
652 return TryCand.Reason != NoCand;
656 if (tryPressure(TryCand.RPDelta.Excess, Cand.RPDelta.Excess, TryCand, Cand,
658 return TryCand.Reason != NoCand;
661 if (tryPressure(TryCand.RPDelta.CriticalMax, Cand.RPDelta.CriticalMax,
662 TryCand, Cand, RegCritical, TRI, DAG->MF))
663 return TryCand.Reason != NoCand;
671 TryCand.AtTop ? DAG->getNextClusterSucc() : DAG->getNextClusterPred();
672 if (tryGreater(TryCand.SU == TryCandNextClusterSU,
673 Cand.SU == CandNextClusterSU, TryCand, Cand, Cluster))
674 return TryCand.Reason != NoCand;
687 tryLatency(TryCand, Cand, *Zone))
688 return TryCand.Reason != NoCand;
695 TryCand.SU->isInstr() && TryCand.SU->getInstr()->mayLoad();
700 TryCand.SU->Latency > 10 * Cand.SU->Latency && TryMayLoad;
702 10 * TryCand.SU->Latency < Cand.SU->Latency && CandMayLoad;
705 Zone->isTop() ? CandLongLatency : TryLongLatency, TryCand,
707 return TryCand.Reason != NoCand;
710 if (tryLess(Zone->getLatencyStallCycles(TryCand.SU),
711 Zone->getLatencyStallCycles(Cand.SU), TryCand, Cand, Stall))
712 return TryCand.Reason != NoCand;
717 if (tryLess(getWeakLeft(TryCand.SU, TryCand.AtTop),
718 getWeakLeft(Cand.SU, Cand.AtTop), TryCand, Cand, Weak))
719 return TryCand.Reason != NoCand;
724 tryPressure(TryCand.RPDelta.CurrentMax, Cand.RPDelta.CurrentMax, TryCand,
726 return TryCand.Reason != NoCand;
730 TryCand.initResourceDelta(DAG, SchedModel);
731 if (tryLess(TryCand.ResDelta.CritResources, Cand.ResDelta.CritResources,
732 TryCand, Cand, ResourceReduce))
733 return TryCand.Reason != NoCand;
734 if (tryGreater(TryCand.ResDelta.DemandedResources,
735 Cand.ResDelta.DemandedResources, TryCand, Cand,
737 return TryCand.Reason != NoCand;
741 if (!RegionPolicy.DisableLatencyHeuristic && TryCand.Policy.ReduceLatency &&
742 !Rem.IsAcyclicLatencyLimited && tryLatency(TryCand, Cand, *Zone))
743 return TryCand.Reason != NoCand;
746 if (Zone->isTop() == (TryCand.SU->NodeNum < Cand.SU->NodeNum)) {
747 assert(TryCand.SU->NodeNum != Cand.SU->NodeNum);
748 TryCand.Reason = NodeOrder;