Example #1
0
    CodeNodePtr findMultiplyReferenced(
        CodeNodePtr node,
        const ReferenceMap& refs
    ) {
        assert(node);

        ReferenceMap::const_iterator it = refs.find(node);

        if (REN_DYNAMIC_CAST_PTR(p, CallCodeNode, node)) {
            if (it != refs.end() && it->second.size() > 1) {
                return p;
            }
        } else if (REN_DYNAMIC_CAST_PTR(p, IfCodeNode, node)) {
            if (it != refs.end() && it->second.size() > 1) {
                return p;
            }
        } else if (REN_DYNAMIC_CAST_PTR(p, NameCodeNode, node)) {
            // Do nothing.
        } else {
            assert(!"Unknown code node type");
        }

        CodeNodeList args = node->getChildren();
        for (size_t i = 0; i < args.size(); ++i) {
            CodeNodePtr c = findMultiplyReferenced(args[i], refs);
            if (c) {
                return c;
            }
        }
        return CodeNodePtr();
    }
void HexagonExpandCondsets::addRefToMap(RegisterRef RR, ReferenceMap &Map,
      unsigned Exec) {
  unsigned Mask = getMaskForSub(RR.Sub) | Exec;
  ReferenceMap::iterator F = Map.find(RR.Reg);
  if (F == Map.end())
    Map.insert(std::make_pair(RR.Reg, Mask));
  else
    F->second |= Mask;
}
bool HexagonExpandCondsets::isRefInMap(RegisterRef RR, ReferenceMap &Map,
      unsigned Exec) {
  ReferenceMap::iterator F = Map.find(RR.Reg);
  if (F == Map.end())
    return false;
  unsigned Mask = getMaskForSub(RR.Sub) | Exec;
  if (Mask & F->second)
    return true;
  return false;
}