void CodeGenSubRegIndex::updateComponents(CodeGenRegBank &RegBank) { std::vector<Record*> Comps = TheDef->getValueAsListOfDefs("ComposedOf"); if (Comps.empty()) return; if (Comps.size() != 2) throw TGError(TheDef->getLoc(), "ComposedOf must have exactly two entries"); CodeGenSubRegIndex *A = RegBank.getSubRegIdx(Comps[0]); CodeGenSubRegIndex *B = RegBank.getSubRegIdx(Comps[1]); CodeGenSubRegIndex *X = A->addComposite(B, this); if (X) throw TGError(TheDef->getLoc(), "Ambiguous ComposedOf entries"); }
void CodeGenRegister::addSubRegsPreOrder(SetVector<const CodeGenRegister*> &OSet, CodeGenRegBank &RegBank) const { assert(SubRegsComplete && "Must precompute sub-registers"); std::vector<Record*> Indices = TheDef->getValueAsListOfDefs("SubRegIndices"); for (unsigned i = 0, e = Indices.size(); i != e; ++i) { CodeGenSubRegIndex *Idx = RegBank.getSubRegIdx(Indices[i]); CodeGenRegister *SR = SubRegs.find(Idx)->second; if (OSet.insert(SR)) SR->addSubRegsPreOrder(OSet, RegBank); } }