Lines Matching defs:RA

110 static void printRefHeader(raw_ostream &OS, const Ref RA,
112 OS << Print(RA.Id, G) << '<' << Print(RA.Addr->getRegRef(G), G) << '>';
113 if (RA.Addr->getFlags() & NodeAttrs::Fixed)
788 Ref RA = NA;
789 RA.Addr->setReachingDef(0);
790 RA.Addr->setSibling(0);
1133 // Return the list of all reference nodes related to RA, including RA itself.
1135 NodeList DataFlowGraph::getRelatedRefs(Instr IA, Ref RA) const {
1136 assert(IA.Id != 0 && RA.Id != 0);
1139 NodeId Start = RA.Id;
1141 Refs.push_back(RA);
1142 RA = getNextRelated(IA, RA);
1143 } while (RA.Id != 0 && RA.Id != Start);
1157 // to RA. Conceptually, two reference nodes are related if they refer to the
1162 Ref DataFlowGraph::getNextRelated(Instr IA, Ref RA) const {
1163 assert(IA.Id != 0 && RA.Id != 0);
1165 auto IsRelated = [this, RA](Ref TA) -> bool {
1166 if (TA.Addr->getKind() != RA.Addr->getKind())
1169 RA.Addr->getRegRef(*this))) {
1175 RegisterRef RR = RA.Addr->getRegRef(*this);
1177 auto Cond = [&IsRelated, RA](Ref TA) -> bool {
1178 return IsRelated(TA) && &RA.Addr->getOp() == &TA.Addr->getOp();
1180 return RA.Addr->getNextRef(RR, Cond, true, *this);
1184 auto Cond = [&IsRelated, RA](Ref TA) -> bool {
1191 PhiUse(RA).Addr->getPredecessor();
1193 return RA.Addr->getNextRef(RR, Cond, true, *this);
1196 // Find the next node related to RA in IA that satisfies condition P.
1202 std::pair<Ref, Ref> DataFlowGraph::locateNextRef(Instr IA, Ref RA,
1204 assert(IA.Id != 0 && RA.Id != 0);
1207 NodeId Start = RA.Id;
1209 NA = getNextRelated(IA, RA);
1214 RA = NA;
1218 return std::make_pair(RA, NA);
1219 return std::make_pair(RA, Ref());
1222 // Get the next shadow node in IA corresponding to RA, and optionally create
1224 Ref DataFlowGraph::getNextShadow(Instr IA, Ref RA, bool Create) {
1225 assert(IA.Id != 0 && RA.Id != 0);
1227 uint16_t Flags = RA.Addr->getFlags() | NodeAttrs::Shadow;
1231 auto Loc = locateNextRef(IA, RA, IsShadow);
1235 // Create a copy of RA and mark is as shadow.
1236 Ref NA = cloneNode(RA);
1398 for (Ref RA : IA.Addr->members_if(IsDef, *this)) {
1399 RegisterRef RR = RA.Addr->getRegRef(*this);
1485 for (Ref RA : Refs) {
1486 if (NodeId RD = RA.Addr->getReachingDef()) {
1492 if (RA.Addr->isDef())
1493 unlinkDef(RA, true);
1495 unlinkUse(RA, true);
1554 for (Ref RA : SA.Addr->members_if(P, *this)) {
1555 uint16_t Kind = RA.Addr->getKind();
1557 RegisterRef RR = RA.Addr->getRegRef(*this);
1569 linkRefUp<UseNode *>(SA, RA, DS);
1571 linkRefUp<DefNode *>(SA, RA, DS);
1583 auto IsClobber = [](Ref RA) -> bool {
1584 return IsDef(RA) && (RA.Addr->getFlags() & NodeAttrs::Clobbering);
1586 auto IsNoClobber = [](Ref RA) -> bool {
1587 return IsDef(RA) && !(RA.Addr->getFlags() & NodeAttrs::Clobbering);
1637 Ref RA = IA.Addr->getFirstMember(*this);
1638 assert(RA.Id != 0);
1639 if (EHLiveIns.hasCoverOf(RA.Addr->getRegRef(*this)))
1711 auto RA = addr<RefNode *>(N);
1713 Res.push_back(RA);
1714 N = RA.Addr->getSibling();