Example #1
0
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");
}
Example #2
0
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);
  }
}