Lines Matching defs:RA
111 static void printRefHeader(raw_ostream &OS, const Ref RA,
113 OS << Print(RA.Id, G) << '<' << Print(RA.Addr->getRegRef(G), G) << '>';
114 if (RA.Addr->getFlags() & NodeAttrs::Fixed)
789 Ref RA = NA;
790 RA.Addr->setReachingDef(0);
791 RA.Addr->setSibling(0);
1134 // Return the list of all reference nodes related to RA, including RA itself.
1136 NodeList DataFlowGraph::getRelatedRefs(Instr IA, Ref RA) const {
1137 assert(IA.Id != 0 && RA.Id != 0);
1140 NodeId Start = RA.Id;
1142 Refs.push_back(RA);
1143 RA = getNextRelated(IA, RA);
1144 } while (RA.Id != 0 && RA.Id != Start);
1158 // to RA. Conceptually, two reference nodes are related if they refer to the
1163 Ref DataFlowGraph::getNextRelated(Instr IA, Ref RA) const {
1164 assert(IA.Id != 0 && RA.Id != 0);
1166 auto IsRelated = [this, RA](Ref TA) -> bool {
1167 if (TA.Addr->getKind() != RA.Addr->getKind())
1170 RA.Addr->getRegRef(*this))) {
1176 RegisterRef RR = RA.Addr->getRegRef(*this);
1178 auto Cond = [&IsRelated, RA](Ref TA) -> bool {
1179 return IsRelated(TA) && &RA.Addr->getOp() == &TA.Addr->getOp();
1181 return RA.Addr->getNextRef(RR, Cond, true, *this);
1185 auto Cond = [&IsRelated, RA](Ref TA) -> bool {
1192 PhiUse(RA).Addr->getPredecessor();
1194 return RA.Addr->getNextRef(RR, Cond, true, *this);
1197 // Find the next node related to RA in IA that satisfies condition P.
1203 std::pair<Ref, Ref> DataFlowGraph::locateNextRef(Instr IA, Ref RA,
1205 assert(IA.Id != 0 && RA.Id != 0);
1208 NodeId Start = RA.Id;
1210 NA = getNextRelated(IA, RA);
1215 RA = NA;
1219 return std::make_pair(RA, NA);
1220 return std::make_pair(RA, Ref());
1223 // Get the next shadow node in IA corresponding to RA, and optionally create
1225 Ref DataFlowGraph::getNextShadow(Instr IA, Ref RA, bool Create) {
1226 assert(IA.Id != 0 && RA.Id != 0);
1228 uint16_t Flags = RA.Addr->getFlags() | NodeAttrs::Shadow;
1232 auto Loc = locateNextRef(IA, RA, IsShadow);
1236 // Create a copy of RA and mark is as shadow.
1237 Ref NA = cloneNode(RA);
1399 for (Ref RA : IA.Addr->members_if(IsDef, *this)) {
1400 RegisterRef RR = RA.Addr->getRegRef(*this);
1486 for (Ref RA : Refs) {
1487 if (NodeId RD = RA.Addr->getReachingDef()) {
1493 if (RA.Addr->isDef())
1494 unlinkDef(RA, true);
1496 unlinkUse(RA, true);
1557 for (Ref RA : SA.Addr->members_if(P, *this)) {
1558 uint16_t Kind = RA.Addr->getKind();
1560 RegisterRef RR = RA.Addr->getRegRef(*this);
1572 linkRefUp<UseNode *>(SA, RA, DS);
1574 linkRefUp<DefNode *>(SA, RA, DS);
1586 auto IsClobber = [](Ref RA) -> bool {
1587 return IsDef(RA) && (RA.Addr->getFlags() & NodeAttrs::Clobbering);
1589 auto IsNoClobber = [](Ref RA) -> bool {
1590 return IsDef(RA) && !(RA.Addr->getFlags() & NodeAttrs::Clobbering);
1640 Ref RA = IA.Addr->getFirstMember(*this);
1641 assert(RA.Id != 0);
1642 if (EHLiveIns.hasCoverOf(RA.Addr->getRegRef(*this)))
1714 auto RA = addr<RefNode *>(N);
1716 Res.push_back(RA);
1717 N = RA.Addr->getSibling();