Home | History | Annotate | Download | only in CodeGen

Lines Matching refs:domain

19 // This pass changes the variant instructions to minimize domain crossings.
43 /// execution domain. Multiple registers may refer to the same open
45 /// domain.
51 /// domain, but if we were forced to pay the penalty of a domain crossing, we
76 // Is domain available?
77 bool hasDomain(unsigned domain) const {
78 assert(domain <
81 return AvailableDomains & (1u << domain);
84 // Mark domain as available.
85 void addDomain(unsigned domain) {
86 AvailableDomains |= 1u << domain;
89 // Restrict to a single domain available.
90 void setSingleDomain(unsigned domain) {
91 AvailableDomains = 1u << domain;
99 // First domain available.
185 DomainValue *alloc(int domain = -1);
196 void force(int rx, unsigned domain);
197 void collapse(DomainValue *dv, unsigned domain);
205 void visitHardInstr(MachineInstr*, unsigned domain);
222 DomainValue *ExeDepsFix::alloc(int domain) {
226 if (domain >= 0)
227 dv->addDomain(domain);
294 /// Force register rx into domain.
295 void ExeDepsFix::force(int rx, unsigned domain) {
300 dv->addDomain(domain);
301 else if (dv->hasDomain(domain))
302 collapse(dv, domain);
305 // force the new value into domain. This costs a domain crossing.
308 LiveRegs[rx].Value->addDomain(domain);
312 setLiveReg(rx, alloc(domain));
316 /// Collapse open DomainValue into given domain. If there are multiple
318 void ExeDepsFix::collapse(DomainValue *dv, unsigned domain) {
319 assert(dv->hasDomain(domain) && "Cannot collapse");
323 TII->setExecutionDomain(*dv->Instrs.pop_back_val(), domain);
324 dv->setSingleDomain(domain);
330 setLiveReg(rx, alloc(domain));
420 unsigned Domain = LiveRegs[rx].Value->getFirstDomain();
421 if (!pdv->isCollapsed() && pdv->hasDomain(Domain))
422 collapse(pdv, Domain);
586 // A hard instruction only works in one domain. All input registers will be
587 // forced into that domain.
588 void ExeDepsFix::visitHardInstr(MachineInstr *mi, unsigned domain) {
595 force(rx, domain);
605 force(rx, domain);
632 // If there are no common domains, we must pay the cross-domain
645 // If the collapsed operands force a single domain, propagate the collapse.
647 unsigned domain = countTrailingZeros(available);
648 TII->setExecutionDomain(*mi, domain);
649 visitHardInstr(mi, domain);
686 assert(dv->AvailableDomains && "Domain should have been filtered");