Home | History | Annotate | Download | only in CodeGen

Lines Matching defs:Domain

19 // This pass changes the variant instructions to minimize domain crossings.
39 /// execution domain. Multiple registers may refer to the same open
41 /// domain.
47 /// domain, but if we were forced to pay the penalty of a domain crossing, we
72 // Is domain available?
73 bool hasDomain(unsigned domain) const {
74 return AvailableDomains & (1u << domain);
77 // Mark domain as available.
78 void addDomain(unsigned domain) {
79 AvailableDomains |= 1u << domain;
82 // Restrict to a single domain available.
83 void setSingleDomain(unsigned domain) {
84 AvailableDomains = 1u << domain;
92 // First domain available.
167 DomainValue *alloc(int domain = -1);
178 void force(int rx, unsigned domain);
179 void collapse(DomainValue *dv, unsigned domain);
187 void visitHardInstr(MachineInstr*, unsigned domain);
200 DomainValue *ExeDepsFix::alloc(int domain) {
204 if (domain >= 0)
205 dv->addDomain(domain);
272 /// Force register rx into domain.
273 void ExeDepsFix::force(int rx, unsigned domain) {
278 dv->addDomain(domain);
279 else if (dv->hasDomain(domain))
280 collapse(dv, domain);
283 // force the new value into domain. This costs a domain crossing.
286 LiveRegs[rx].Value->addDomain(domain);
290 setLiveReg(rx, alloc(domain));
294 /// Collapse open DomainValue into given domain. If there are multiple
296 void ExeDepsFix::collapse(DomainValue *dv, unsigned domain) {
297 assert(dv->hasDomain(domain) && "Cannot collapse");
301 TII->setExecutionDomain(dv->Instrs.pop_back_val(), domain);
302 dv->setSingleDomain(domain);
308 setLiveReg(rx, alloc(domain));
395 unsigned Domain = LiveRegs[rx].Value->getFirstDomain();
396 if (!pdv->isCollapsed() && pdv->hasDomain(Domain))
397 collapse(pdv, Domain);
507 // A hard instruction only works in one domain. All input registers will be
508 // forced into that domain.
509 void ExeDepsFix::visitHardInstr(MachineInstr *mi, unsigned domain) {
517 force(rx, domain);
527 force(rx, domain);
552 // If there are no common domains, we must pay the cross-domain
565 // If the collapsed operands force a single domain, propagate the collapse.
567 unsigned domain = CountTrailingZeros_32(available);
568 TII->setExecutionDomain(mi, domain);
569 visitHardInstr(mi, domain);
605 assert(dv->AvailableDomains && "Domain should have been filtered");