Lines Matching refs: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
70 // Is domain available?
71 bool hasDomain(unsigned domain) const {
72 return AvailableDomains & (1u << domain);
75 // Mark domain as available.
76 void addDomain(unsigned domain) {
77 AvailableDomains |= 1u << domain;
80 // Restrict to a single domain available.
81 void setSingleDomain(unsigned domain) {
82 AvailableDomains = 1u << domain;
90 // First domain available.
134 return "SSE execution domain fixup";
142 DomainValue *Alloc(int domain = -1);
148 void Force(int rx, unsigned domain);
149 void Collapse(DomainValue *dv, unsigned domain);
155 void visitHardInstr(MachineInstr*, unsigned domain);
168 DomainValue *ExeDepsFix::Alloc(int domain) {
173 if (domain >= 0)
174 dv->addDomain(domain);
208 // the first available domain.
215 /// Force register rx into domain.
216 void ExeDepsFix::Force(int rx, unsigned domain) {
221 dv->addDomain(domain);
222 else if (dv->hasDomain(domain))
223 Collapse(dv, domain);
226 // force the new value into domain. This costs a domain crossing.
229 LiveRegs[rx]->addDomain(domain);
233 SetLiveReg(rx, Alloc(domain));
237 /// Collapse open DomainValue into given domain. If there are multiple
239 void ExeDepsFix::Collapse(DomainValue *dv, unsigned domain) {
240 assert(dv->hasDomain(domain) && "Cannot collapse");
244 TII->setExecutionDomain(dv->Instrs.pop_back_val(), domain);
245 dv->setSingleDomain(domain);
251 SetLiveReg(rx, Alloc(domain));
294 unsigned domain = LiveRegs[rx]->getFirstDomain();
295 if (!pdv->isCollapsed() && pdv->hasDomain(domain))
296 Collapse(pdv, domain);
309 // A hard instruction only works in one domain. All input registers will be
310 // forced into that domain.
311 void ExeDepsFix::visitHardInstr(MachineInstr *mi, unsigned domain) {
319 Force(rx, domain);
329 Force(rx, domain);
354 // If there are no common domains, we must pay the cross-domain
367 // If the collapsed operands force a single domain, propagate the collapse.
369 unsigned domain = CountTrailingZeros_32(available);
370 TII->setExecutionDomain(mi, domain);
371 visitHardInstr(mi, domain);