Lines Matching defs:CG

1 //===- LazyCallGraphTest.cpp - Unit tests for the lazy CG analysis --------===//
225 LazyCallGraph CG(M, GetTLI);
226 return CG;
232 LazyCallGraph CG = buildCG(*M);
237 auto I = CG.begin();
262 EXPECT_EQ(CG.end(), I);
322 CG.buildRefSCCs();
323 auto J = CG.postorder_ref_scc_begin();
339 EXPECT_EQ(&D, &*CG.postorder_ref_scc_begin());
355 EXPECT_EQ(&B, &*std::next(CG.postorder_ref_scc_begin()));
373 EXPECT_EQ(&C, &*std::next(CG.postorder_ref_scc_begin(), 2));
391 EXPECT_EQ(&A, &*std::next(CG.postorder_ref_scc_begin(), 3));
393 EXPECT_EQ(CG.postorder_ref_scc_end(), J);
394 EXPECT_EQ(J, std::next(CG.postorder_ref_scc_begin(), 4));
420 LazyCallGraph CG = buildCG(*M);
422 LazyCallGraph::Node &A = CG.get(lookupFunction(*M, "a"));
423 LazyCallGraph::Node &B = CG.get(lookupFunction(*M, "b"));
429 LazyCallGraph::Node &C = CG.get(lookupFunction(*M, "c"));
431 CG.insertEdge(B, C, LazyCallGraph::Edge::Call);
435 CG.insertEdge(C, B, LazyCallGraph::Edge::Call);
439 CG.insertEdge(C, C, LazyCallGraph::Edge::Call);
444 CG.removeEdge(C, B);
448 CG.removeEdge(C, C);
451 CG.removeEdge(B, C);
458 LazyCallGraph CG = buildCG(*M);
462 LazyCallGraph::Node &D1 = CG.get(lookupFunction(*M, "d1"));
463 LazyCallGraph::Node &A1 = CG.get(lookupFunction(*M, "a1"));
466 CG.insertEdge(D1, A1, LazyCallGraph::Edge::Ref);
473 CG.buildRefSCCs();
474 auto I = CG.postorder_ref_scc_begin();
476 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
555 LazyCallGraph CG = buildCG(*M);
558 CG.buildRefSCCs();
559 auto I = CG.postorder_ref_scc_begin();
561 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
563 LazyCallGraph::Node &N1 = *CG.lookup(lookupFunction(*M, "f1"));
564 LazyCallGraph::Node &N2 = *CG.lookup(lookupFunction(*M, "f2"));
565 LazyCallGraph::Node &N3 = *CG.lookup(lookupFunction(*M, "f3"));
566 LazyCallGraph::Node &N4 = *CG.lookup(lookupFunction(*M, "f4"));
567 LazyCallGraph::Node &N5 = *CG.lookup(lookupFunction(*M, "f4"));
568 EXPECT_EQ(&RC, CG.lookupRefSCC(N1));
569 EXPECT_EQ(&RC, CG.lookupRefSCC(N2));
570 EXPECT_EQ(&RC, CG.lookupRefSCC(N3));
571 EXPECT_EQ(&RC, CG.lookupRefSCC(N4));
572 EXPECT_EQ(&RC, CG.lookupRefSCC(N5));
577 EXPECT_EQ(&C, CG.lookupSCC(N1));
578 EXPECT_EQ(&C, CG.lookupSCC(N2));
579 EXPECT_EQ(&C, CG.lookupSCC(N3));
580 EXPECT_EQ(&C, CG.lookupSCC(N4));
581 EXPECT_EQ(&C, CG.lookupSCC(N5));
606 LazyCallGraph CG = buildCG(*M);
609 CG.buildRefSCCs();
610 for (LazyCallGraph::RefSCC &RC : CG.postorder_ref_sccs())
613 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
614 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
615 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
616 LazyCallGraph::Node &D = *CG.lookup(lookupFunction(*M, "d"));
617 LazyCallGraph::SCC &AC = *CG.lookupSCC(A);
618 LazyCallGraph::SCC &BC = *CG.lookupSCC(B);
619 LazyCallGraph::SCC &CC = *CG.lookupSCC(C);
620 LazyCallGraph::SCC &DC = *CG.lookupSCC(D);
621 LazyCallGraph::RefSCC &ARC = *CG.lookupRefSCC(A);
622 LazyCallGraph::RefSCC &BRC = *CG.lookupRefSCC(B);
623 LazyCallGraph::RefSCC &CRC = *CG.lookupRefSCC(C);
624 LazyCallGraph::RefSCC &DRC = *CG.lookupRefSCC(D);
660 EXPECT_EQ(&AC, CG.lookupSCC(A));
661 EXPECT_EQ(&BC, CG.lookupSCC(B));
662 EXPECT_EQ(&CC, CG.lookupSCC(C));
663 EXPECT_EQ(&DC, CG.lookupSCC(D));
664 EXPECT_EQ(&ARC, CG.lookupRefSCC(A));
665 EXPECT_EQ(&BRC, CG.lookupRefSCC(B));
666 EXPECT_EQ(&CRC, CG.lookupRefSCC(C));
667 EXPECT_EQ(&DRC, CG.lookupRefSCC(D));
681 EXPECT_EQ(&AC, CG.lookupSCC(A));
682 EXPECT_EQ(&BC, CG.lookupSCC(B));
683 EXPECT_EQ(&CC, CG.lookupSCC(C));
684 EXPECT_EQ(&DC, CG.lookupSCC(D));
685 EXPECT_EQ(&ARC, CG.lookupRefSCC(A));
686 EXPECT_EQ(&BRC, CG.lookupRefSCC(B));
687 EXPECT_EQ(&CRC, CG.lookupRefSCC(C));
688 EXPECT_EQ(&DRC, CG.lookupRefSCC(D));
702 EXPECT_EQ(&AC, CG.lookupSCC(A));
703 EXPECT_EQ(&BC, CG.lookupSCC(B));
704 EXPECT_EQ(&CC, CG.lookupSCC(C));
705 EXPECT_EQ(&DC, CG.lookupSCC(D));
706 EXPECT_EQ(&ARC, CG.lookupRefSCC(A));
707 EXPECT_EQ(&BRC, CG.lookupRefSCC(B));
708 EXPECT_EQ(&CRC, CG.lookupRefSCC(C));
709 EXPECT_EQ(&DRC, CG.lookupRefSCC(D));
723 EXPECT_EQ(&AC, CG.lookupSCC(A));
724 EXPECT_EQ(&BC, CG.lookupSCC(B));
725 EXPECT_EQ(&CC, CG.lookupSCC(C));
726 EXPECT_EQ(&DC, CG.lookupSCC(D));
727 EXPECT_EQ(&ARC, CG.lookupRefSCC(A));
728 EXPECT_EQ(&BRC, CG.lookupRefSCC(B));
729 EXPECT_EQ(&CRC, CG.lookupRefSCC(C));
730 EXPECT_EQ(&DRC, CG.lookupRefSCC(D));
752 LazyCallGraph CG = buildCG(*M);
755 CG.buildRefSCCs();
756 for (LazyCallGraph::RefSCC &RC : CG.postorder_ref_sccs())
759 LazyCallGraph::Node &A1 = *CG.lookup(lookupFunction(*M, "a1"));
760 LazyCallGraph::Node &A2 = *CG.lookup(lookupFunction(*M, "a2"));
761 LazyCallGraph::Node &A3 = *CG.lookup(lookupFunction(*M, "a3"));
762 LazyCallGraph::Node &B1 = *CG.lookup(lookupFunction(*M, "b1"));
763 LazyCallGraph::Node &B2 = *CG.lookup(lookupFunction(*M, "b2"));
764 LazyCallGraph::Node &B3 = *CG.lookup(lookupFunction(*M, "b3"));
765 LazyCallGraph::Node &C1 = *CG.lookup(lookupFunction(*M, "c1"));
766 LazyCallGraph::Node &C2 = *CG.lookup(lookupFunction(*M, "c2"));
767 LazyCallGraph::Node &C3 = *CG.lookup(lookupFunction(*M, "c3"));
768 LazyCallGraph::Node &D1 = *CG.lookup(lookupFunction(*M, "d1"));
769 LazyCallGraph::Node &D2 = *CG.lookup(lookupFunction(*M, "d2"));
770 LazyCallGraph::Node &D3 = *CG.lookup(lookupFunction(*M, "d3"));
771 LazyCallGraph::RefSCC &ARC = *CG.lookupRefSCC(A1);
772 LazyCallGraph::RefSCC &BRC = *CG.lookupRefSCC(B1);
773 LazyCallGraph::RefSCC &CRC = *CG.lookupRefSCC(C1);
774 LazyCallGraph::RefSCC &DRC = *CG.lookupRefSCC(D1);
775 ASSERT_EQ(&ARC, CG.lookupRefSCC(A2));
776 ASSERT_EQ(&ARC, CG.lookupRefSCC(A3));
777 ASSERT_EQ(&BRC, CG.lookupRefSCC(B2));
778 ASSERT_EQ(&BRC, CG.lookupRefSCC(B3));
779 ASSERT_EQ(&CRC, CG.lookupRefSCC(C2));
780 ASSERT_EQ(&CRC, CG.lookupRefSCC(C3));
781 ASSERT_EQ(&DRC, CG.lookupRefSCC(D2));
782 ASSERT_EQ(&DRC, CG.lookupRefSCC(D3));
810 EXPECT_EQ(&ARC, CG.lookupRefSCC(A1));
811 EXPECT_EQ(&ARC, CG.lookupRefSCC(A2));
812 EXPECT_EQ(&ARC, CG.lookupRefSCC(A3));
813 EXPECT_EQ(&BRC, CG.lookupRefSCC(B1));
814 EXPECT_EQ(&BRC, CG.lookupRefSCC(B2));
815 EXPECT_EQ(&BRC, CG.lookupRefSCC(B3));
816 EXPECT_EQ(&CRC, CG.lookupRefSCC(C1));
817 EXPECT_EQ(&CRC, CG.lookupRefSCC(C2));
818 EXPECT_EQ(&CRC, CG.lookupRefSCC(C3));
819 EXPECT_EQ(&CRC, CG.lookupRefSCC(D1));
820 EXPECT_EQ(&CRC, CG.lookupRefSCC(D2));
821 EXPECT_EQ(&CRC, CG.lookupRefSCC(D3));
828 auto I = CG.postorder_ref_scc_begin(), E = CG.postorder_ref_scc_end();
844 LazyCallGraph CG = buildCG(*M);
847 CG.buildRefSCCs();
848 for (LazyCallGraph::RefSCC &RC : CG.postorder_ref_sccs())
851 LazyCallGraph::Node &A1 = *CG.lookup(lookupFunction(*M, "a1"));
852 LazyCallGraph::Node &A2 = *CG.lookup(lookupFunction(*M, "a2"));
853 LazyCallGraph::Node &A3 = *CG.lookup(lookupFunction(*M, "a3"));
854 LazyCallGraph::Node &B1 = *CG.lookup(lookupFunction(*M, "b1"));
855 LazyCallGraph::Node &B2 = *CG.lookup(lookupFunction(*M, "b2"));
856 LazyCallGraph::Node &B3 = *CG.lookup(lookupFunction(*M, "b3"));
857 LazyCallGraph::Node &C1 = *CG.lookup(lookupFunction(*M, "c1"));
858 LazyCallGraph::Node &C2 = *CG.lookup(lookupFunction(*M, "c2"));
859 LazyCallGraph::Node &C3 = *CG.lookup(lookupFunction(*M, "c3"));
860 LazyCallGraph::Node &D1 = *CG.lookup(lookupFunction(*M, "d1"));
861 LazyCallGraph::Node &D2 = *CG.lookup(lookupFunction(*M, "d2"));
862 LazyCallGraph::Node &D3 = *CG.lookup(lookupFunction(*M, "d3"));
863 LazyCallGraph::RefSCC &ARC = *CG.lookupRefSCC(A1);
864 LazyCallGraph::RefSCC &BRC = *CG.lookupRefSCC(B1);
865 LazyCallGraph::RefSCC &CRC = *CG.lookupRefSCC(C1);
866 LazyCallGraph::RefSCC &DRC = *CG.lookupRefSCC(D1);
867 ASSERT_EQ(&ARC, CG.lookupRefSCC(A2));
868 ASSERT_EQ(&ARC, CG.lookupRefSCC(A3));
869 ASSERT_EQ(&BRC, CG.lookupRefSCC(B2));
870 ASSERT_EQ(&BRC, CG.lookupRefSCC(B3));
871 ASSERT_EQ(&CRC, CG.lookupRefSCC(C2));
872 ASSERT_EQ(&CRC, CG.lookupRefSCC(C3));
873 ASSERT_EQ(&DRC, CG.lookupRefSCC(D2));
874 ASSERT_EQ(&DRC, CG.lookupRefSCC(D3));
902 EXPECT_EQ(&ARC, CG.lookupRefSCC(A1));
903 EXPECT_EQ(&ARC, CG.lookupRefSCC(A2));
904 EXPECT_EQ(&ARC, CG.lookupRefSCC(A3));
905 EXPECT_EQ(&BRC, CG.lookupRefSCC(B1));
906 EXPECT_EQ(&BRC, CG.lookupRefSCC(B2));
907 EXPECT_EQ(&BRC, CG.lookupRefSCC(B3));
908 EXPECT_EQ(&CRC, CG.lookupRefSCC(C1));
909 EXPECT_EQ(&CRC, CG.lookupRefSCC(C2));
910 EXPECT_EQ(&CRC, CG.lookupRefSCC(C3));
911 EXPECT_EQ(&CRC, CG.lookupRefSCC(D1));
912 EXPECT_EQ(&CRC, CG.lookupRefSCC(D2));
913 EXPECT_EQ(&CRC, CG.lookupRefSCC(D3));
920 auto I = CG.postorder_ref_scc_begin(), E = CG.postorder_ref_scc_end();
951 LazyCallGraph CG = buildCG(*M);
954 CG.buildRefSCCs();
955 for (LazyCallGraph::RefSCC &RC : CG.postorder_ref_sccs())
958 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
959 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
960 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
961 LazyCallGraph::Node &D = *CG.lookup(lookupFunction(*M, "d"));
962 LazyCallGraph::SCC &AC = *CG.lookupSCC(A);
963 LazyCallGraph::SCC &BC = *CG.lookupSCC(B);
964 LazyCallGraph::SCC &CC = *CG.lookupSCC(C);
965 LazyCallGraph::SCC &DC = *CG.lookupSCC(D);
966 LazyCallGraph::RefSCC &ARC = *CG.lookupRefSCC(A);
967 LazyCallGraph::RefSCC &BRC = *CG.lookupRefSCC(B);
968 LazyCallGraph::RefSCC &CRC = *CG.lookupRefSCC(C);
969 LazyCallGraph::RefSCC &DRC = *CG.lookupRefSCC(D);
984 EXPECT_EQ(&ARC, CG.lookupRefSCC(A));
985 EXPECT_EQ(&ARC, CG.lookupRefSCC(B));
986 EXPECT_EQ(&ARC, CG.lookupRefSCC(C));
987 EXPECT_EQ(&ARC, CG.lookupRefSCC(D));
997 auto I = CG.postorder_ref_scc_begin(), E = CG.postorder_ref_scc_end();
1028 LazyCallGraph CG = buildCG(*M);
1031 CG.buildRefSCCs();
1032 for (LazyCallGraph::RefSCC &RC : CG.postorder_ref_sccs())
1035 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
1036 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
1037 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
1038 LazyCallGraph::Node &D = *CG.lookup(lookupFunction(*M, "d"));
1039 LazyCallGraph::RefSCC &ARC = *CG.lookupRefSCC(A);
1040 LazyCallGraph::RefSCC &BRC = *CG.lookupRefSCC(B);
1041 LazyCallGraph::RefSCC &CRC = *CG.lookupRefSCC(C);
1042 LazyCallGraph::RefSCC &DRC = *CG.lookupRefSCC(D);
1058 EXPECT_EQ(&ARC, CG.lookupRefSCC(A));
1059 EXPECT_EQ(&ARC, CG.lookupRefSCC(B));
1060 EXPECT_EQ(&ARC, CG.lookupRefSCC(C));
1061 EXPECT_EQ(&ARC, CG.lookupRefSCC(D));
1064 auto I = CG.postorder_ref_scc_begin(), End = CG.postorder_ref_scc_end();
1090 LazyCallGraph CG = buildCG(*M);
1093 CG.buildRefSCCs();
1094 for (LazyCallGraph::RefSCC &RC : CG.postorder_ref_sccs())
1097 LazyCallGraph::Node &A1 = *CG.lookup(lookupFunction(*M, "a1"));
1098 LazyCallGraph::Node &A2 = *CG.lookup(lookupFunction(*M, "a2"));
1099 LazyCallGraph::Node &A3 = *CG.lookup(lookupFunction(*M, "a3"));
1100 LazyCallGraph::Node &B1 = *CG.lookup(lookupFunction(*M, "b1"));
1101 LazyCallGraph::Node &B2 = *CG.lookup(lookupFunction(*M, "b2"));
1102 LazyCallGraph::Node &B3 = *CG.lookup(lookupFunction(*M, "b3"));
1103 LazyCallGraph::Node &C1 = *CG.lookup(lookupFunction(*M, "c1"));
1104 LazyCallGraph::Node &C2 = *CG.lookup(lookupFunction(*M, "c2"));
1105 LazyCallGraph::Node &C3 = *CG.lookup(lookupFunction(*M, "c3"));
1106 LazyCallGraph::Node &D1 = *CG.lookup(lookupFunction(*M, "d1"));
1107 LazyCallGraph::Node &D2 = *CG.lookup(lookupFunction(*M, "d2"));
1108 LazyCallGraph::Node &D3 = *CG.lookup(lookupFunction(*M, "d3"));
1109 LazyCallGraph::RefSCC &ARC = *CG.lookupRefSCC(A1);
1110 LazyCallGraph::RefSCC &BRC = *CG.lookupRefSCC(B1);
1111 LazyCallGraph::RefSCC &CRC = *CG.lookupRefSCC(C1);
1112 LazyCallGraph::RefSCC &DRC = *CG.lookupRefSCC(D1);
1113 ASSERT_EQ(&ARC, CG.lookupRefSCC(A2));
1114 ASSERT_EQ(&ARC, CG.lookupRefSCC(A3));
1115 ASSERT_EQ(&BRC, CG.lookupRefSCC(B2));
1116 ASSERT_EQ(&BRC, CG.lookupRefSCC(B3));
1117 ASSERT_EQ(&CRC, CG.lookupRefSCC(C2));
1118 ASSERT_EQ(&CRC, CG.lookupRefSCC(C3));
1119 ASSERT_EQ(&DRC, CG.lookupRefSCC(D2));
1120 ASSERT_EQ(&DRC, CG.lookupRefSCC(D3));
1165 LazyCallGraph::SCC &DC = *CG.lookupSCC(D2);
1167 EXPECT_EQ(&DC, CG.lookupSCC(D2));
1170 EXPECT_EQ(&NewDC, CG.lookupSCC(D1));
1171 EXPECT_EQ(&NewDC, CG.lookupSCC(D3));
1175 EXPECT_EQ(&NewDRC, CG.lookupRefSCC(D1));
1176 EXPECT_EQ(&NewDRC, CG.lookupRefSCC(D3));
1178 EXPECT_EQ(&D2RC, CG.lookupRefSCC(D2));
1189 CG.markDeadFunction(D2F);
1190 CG.removeDeadFunctions({&D2F});
1193 EXPECT_EQ(&ARC, CG.lookupRefSCC(A1));
1194 EXPECT_EQ(&ARC, CG.lookupRefSCC(A2));
1195 EXPECT_EQ(&ARC, CG.lookupRefSCC(A3));
1196 EXPECT_EQ(&BRC, CG.lookupRefSCC(B1));
1197 EXPECT_EQ(&BRC, CG.lookupRefSCC(B2));
1198 EXPECT_EQ(&BRC, CG.lookupRefSCC(B3));
1199 EXPECT_EQ(&CRC, CG.lookupRefSCC(C1));
1200 EXPECT_EQ(&CRC, CG.lookupRefSCC(C2));
1201 EXPECT_EQ(&CRC, CG.lookupRefSCC(C3));
1202 EXPECT_EQ(&NewDRC, CG.lookupRefSCC(D1));
1203 EXPECT_EQ(&NewDRC, CG.lookupRefSCC(D3));
1207 auto I = CG.postorder_ref_scc_begin(), E = CG.postorder_ref_scc_end();
1236 LazyCallGraph CG = buildCG(*M);
1239 CG.buildRefSCCs();
1240 auto I = CG.postorder_ref_scc_begin();
1242 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
1244 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
1245 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
1246 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
1247 EXPECT_EQ(&RC, CG.lookupRefSCC(A));
1248 EXPECT_EQ(&RC, CG.lookupRefSCC(B));
1249 EXPECT_EQ(&RC, CG.lookupRefSCC(C));
1251 EXPECT_EQ(&*RC.begin(), CG.lookupSCC(A));
1252 EXPECT_EQ(&*RC.begin(), CG.lookupSCC(B));
1253 EXPECT_EQ(&*RC.begin(), CG.lookupSCC(C));
1258 EXPECT_EQ(&RC, CG.lookupRefSCC(A));
1259 EXPECT_EQ(&RC, CG.lookupRefSCC(B));
1260 EXPECT_EQ(&RC, CG.lookupRefSCC(C));
1262 EXPECT_EQ(&*RC.begin(), CG.lookupSCC(A));
1263 EXPECT_EQ(&*RC.begin(), CG.lookupSCC(B));
1264 EXPECT_EQ(&*RC.begin(), CG.lookupSCC(C));
1270 EXPECT_EQ(&RC, CG.lookupRefSCC(A));
1271 EXPECT_EQ(&RC, CG.lookupRefSCC(B));
1272 EXPECT_EQ(&RC, CG.lookupRefSCC(C));
1277 EXPECT_EQ(&*J++, CG.lookupSCC(B));
1278 EXPECT_EQ(&*J++, CG.lookupSCC(A));
1279 EXPECT_EQ(&*J++, CG.lookupSCC(C));
1290 LazyCallGraph::SCC &AC = *CG.lookupSCC(A);
1291 LazyCallGraph::SCC &CC = *CG.lookupSCC(C);
1297 EXPECT_EQ(&CC, CG.lookupSCC(A));
1298 EXPECT_EQ(&CC, CG.lookupSCC(C));
1300 EXPECT_EQ(&*J++, CG.lookupSCC(B));
1301 EXPECT_EQ(&*J++, CG.lookupSCC(C));
1330 LazyCallGraph CG = buildCG(*M);
1333 CG.buildRefSCCs();
1334 auto I = CG.postorder_ref_scc_begin(), E = CG.postorder_ref_scc_end();
1338 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
1339 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
1340 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
1341 EXPECT_EQ(&RC, CG.lookupRefSCC(A));
1342 EXPECT_EQ(&RC, CG.lookupRefSCC(B));
1343 EXPECT_EQ(&RC, CG.lookupRefSCC(C));
1350 EXPECT_EQ(&RC, CG.lookupRefSCC(A));
1351 EXPECT_EQ(&RC, CG.lookupRefSCC(B));
1352 EXPECT_EQ(&RC, CG.lookupRefSCC(C));
1353 auto J = CG.postorder_ref_scc_begin();
1368 EXPECT_EQ(&ARC, CG.lookupRefSCC(A));
1370 EXPECT_EQ(&BCRC, CG.lookupRefSCC(B));
1371 EXPECT_EQ(&BCRC, CG.lookupRefSCC(C));
1372 J = CG.postorder_ref_scc_begin();
1408 LazyCallGraph CG = buildCG(*M);
1411 CG.buildRefSCCs();
1412 auto I = CG.postorder_ref_scc_begin(), E = CG.postorder_ref_scc_end();
1416 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
1417 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
1418 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
1419 EXPECT_EQ(&RC, CG.lookupRefSCC(A));
1420 EXPECT_EQ(&RC, CG.lookupRefSCC(B));
1421 EXPECT_EQ(&RC, CG.lookupRefSCC(C));
1434 EXPECT_EQ(&BRC, CG.lookupRefSCC(B));
1436 EXPECT_EQ(&ACRC, CG.lookupRefSCC(A));
1437 EXPECT_EQ(&ACRC, CG.lookupRefSCC(C));
1438 auto J = CG.postorder_ref_scc_begin();
1475 LazyCallGraph CG = buildCG(*M);
1478 CG.buildRefSCCs();
1479 auto I = CG.postorder_ref_scc_begin(), E = CG.postorder_ref_scc_end();
1486 LazyCallGraph::Node &AN = *CG.lookup(lookupFunction(*M, "a"));
1487 LazyCallGraph::Node &BN = *CG.lookup(lookupFunction(*M, "b"));
1488 LazyCallGraph::Node &CN = *CG.lookup(lookupFunction(*M, "c"));
1489 EXPECT_EQ(&RC, CG.lookupRefSCC(AN));
1490 EXPECT_EQ(&RC, CG.lookupRefSCC(BN));
1491 EXPECT_EQ(&RC, CG.lookupRefSCC(CN));
1492 EXPECT_EQ(&C, CG.lookupSCC(AN));
1493 EXPECT_EQ(&C, CG.lookupSCC(BN));
1494 EXPECT_EQ(&C, CG.lookupSCC(CN));
1500 EXPECT_EQ(&RC, CG.lookupRefSCC(AN));
1501 EXPECT_EQ(&RC, CG.lookupRefSCC(BN));
1502 EXPECT_EQ(&RC, CG.lookupRefSCC(CN));
1503 EXPECT_EQ(&C, CG.lookupSCC(AN));
1504 EXPECT_EQ(&C, CG.lookupSCC(BN));
1505 EXPECT_EQ(&C, CG.lookupSCC(CN));
1506 auto J = CG.postorder_ref_scc_begin();
1516 EXPECT_EQ(&RC, CG.lookupRefSCC(AN));
1517 EXPECT_EQ(&RC, CG.lookupRefSCC(BN));
1518 EXPECT_EQ(&RC, CG.lookupRefSCC(CN));
1519 EXPECT_EQ(&C, CG.lookupSCC(AN));
1520 EXPECT_EQ(&C, CG.lookupSCC(BN));
1521 EXPECT_EQ(&C, CG.lookupSCC(CN));
1522 J = CG.postorder_ref_scc_begin();
1552 LazyCallGraph CG = buildCG(*M);
1555 CG.buildRefSCCs();
1556 auto I = CG.postorder_ref_scc_begin();
1558 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
1563 LazyCallGraph::Node &AN = *CG.lookup(lookupFunction(*M, "a"));
1564 LazyCallGraph::Node &BN = *CG.lookup(lookupFunction(*M, "b"));
1565 LazyCallGraph::Node &CN = *CG.lookup(lookupFunction(*M, "c"));
1566 EXPECT_EQ(&AC, CG.lookupSCC(AN));
1567 EXPECT_EQ(&AC, CG.lookupSCC(BN));
1568 EXPECT_EQ(&AC, CG.lookupSCC(CN));
1576 EXPECT_EQ(&AC, CG.lookupSCC(AN));
1577 EXPECT_EQ(&AC, CG.lookupSCC(BN));
1578 EXPECT_EQ(&AC, CG.lookupSCC(CN));
1585 EXPECT_EQ(&AC, CG.lookupSCC(AN));
1586 LazyCallGraph::SCC &BC = *CG.lookupSCC(BN);
1588 EXPECT_EQ(&BC, CG.lookupSCC(CN));
1601 EXPECT_EQ(&AC, CG.lookupSCC(AN));
1602 EXPECT_EQ(&BC, CG.lookupSCC(BN));
1603 LazyCallGraph::SCC &CC = *CG.lookupSCC(CN);
1645 LazyCallGraph CG = buildCG(*M);
1648 CG.buildRefSCCs();
1649 auto I = CG.postorder_ref_scc_begin();
1651 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
1653 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
1654 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
1655 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
1656 LazyCallGraph::Node &D = *CG.lookup(lookupFunction(*M, "d"));
1657 LazyCallGraph::SCC &AC = *CG.lookupSCC(A);
1658 LazyCallGraph::SCC &BC = *CG.lookupSCC(B);
1659 LazyCallGraph::SCC &CC = *CG.lookupSCC(C);
1660 LazyCallGraph::SCC &DC = *CG.lookupSCC(D);
1698 EXPECT_EQ(&BC, CG.lookupSCC(B));
1699 EXPECT_EQ(&BC, CG.lookupSCC(C));
1757 LazyCallGraph CG = buildCG(*M);
1760 CG.buildRefSCCs();
1761 auto I = CG.postorder_ref_scc_begin();
1763 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
1765 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
1766 LazyCallGraph::Node &B1 = *CG.lookup(lookupFunction(*M, "b1"));
1767 LazyCallGraph::Node &B2 = *CG.lookup(lookupFunction(*M, "b2"));
1768 LazyCallGraph::Node &B3 = *CG.lookup(lookupFunction(*M, "b3"));
1769 LazyCallGraph::Node &C1 = *CG.lookup(lookupFunction(*M, "c1"));
1770 LazyCallGraph::Node &C2 = *CG.lookup(lookupFunction(*M, "c2"));
1771 LazyCallGraph::Node &C3 = *CG.lookup(lookupFunction(*M, "c3"));
1772 LazyCallGraph::Node &D = *CG.lookup(lookupFunction(*M, "d"));
1773 LazyCallGraph::SCC &AC = *CG.lookupSCC(A);
1774 LazyCallGraph::SCC &B1C = *CG.lookupSCC(B1);
1775 LazyCallGraph::SCC &B2C = *CG.lookupSCC(B2);
1776 LazyCallGraph::SCC &B3C = *CG.lookupSCC(B3);
1777 LazyCallGraph::SCC &C1C = *CG.lookupSCC(C1);
1778 LazyCallGraph::SCC &C2C = *CG.lookupSCC(C2);
1779 LazyCallGraph::SCC &C3C = *CG.lookupSCC(C3);
1780 LazyCallGraph::SCC &DC = *CG.lookupSCC(D);
1887 LazyCallGraph CG = buildCG(*M);
1890 CG.buildRefSCCs();
1891 auto I = CG.postorder_ref_scc_begin();
1893 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
1895 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
1896 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
1897 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
1898 LazyCallGraph::Node &D = *CG.lookup(lookupFunction(*M, "d"));
1899 LazyCallGraph::Node &E = *CG.lookup(lookupFunction(*M, "e"));
1900 LazyCallGraph::Node &F = *CG.lookup(lookupFunction(*M, "f"));
1901 LazyCallGraph::Node &G = *CG.lookup(lookupFunction(*M, "g"));
1902 LazyCallGraph::SCC &AC = *CG.lookupSCC(A);
1903 LazyCallGraph::SCC &BC = *CG.lookupSCC(B);
1904 LazyCallGraph::SCC &CC = *CG.lookupSCC(C);
1905 LazyCallGraph::SCC &DC = *CG.lookupSCC(D);
1906 LazyCallGraph::SCC &EC = *CG.lookupSCC(E);
1907 LazyCallGraph::SCC &FC = *CG.lookupSCC(F);
1908 LazyCallGraph::SCC &GC = *CG.lookupSCC(G);
1970 LazyCallGraph CG = buildCG(*M);
1972 CG.buildRefSCCs();
1973 auto I = CG.postorder_ref_scc_begin();
1976 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
1978 LazyCallGraph::Node &F = *CG.lookup(lookupFunction(*M, "f"));
1979 LazyCallGraph::Node &G = *CG.lookup(lookupFunction(*M, "g"));
1980 EXPECT_EQ(&FRC, CG.lookupRefSCC(F));
1981 EXPECT_EQ(&GRC, CG.lookupRefSCC(G));
1999 LazyCallGraph CG = buildCG(*M);
2001 CG.buildRefSCCs();
2002 auto I = CG.postorder_ref_scc_begin();
2005 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2007 LazyCallGraph::Node &F = *CG.lookup(lookupFunction(*M, "f"));
2008 LazyCallGraph::Node &G = *CG.lookup(lookupFunction(*M, "g"));
2009 EXPECT_EQ(&FRC, CG.lookupRefSCC(F));
2010 EXPECT_EQ(&GRC, CG.lookupRefSCC(G));
2048 LazyCallGraph CG = buildCG(*M);
2051 CG.buildRefSCCs();
2052 auto I = CG.postorder_ref_scc_begin();
2055 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2061 LazyCallGraph::Node &AN = *CG.lookup(lookupFunction(*M, "a"));
2062 LazyCallGraph::Node &BN = *CG.lookup(lookupFunction(*M, "b"));
2063 LazyCallGraph::Node &CN = *CG.lookup(lookupFunction(*M, "c"));
2064 LazyCallGraph::Node &DN = *CG.lookup(lookupFunction(*M, "d"));
2065 EXPECT_EQ(&C1, CG.lookupSCC(DN));
2066 EXPECT_EQ(&C1, CG.lookupSCC(CN));
2067 EXPECT_EQ(&C2, CG.lookupSCC(BN));
2068 EXPECT_EQ(&RC1, CG.lookupRefSCC(DN));
2069 EXPECT_EQ(&RC1, CG.lookupRefSCC(CN));
2070 EXPECT_EQ(&RC1, CG.lookupRefSCC(BN));
2071 EXPECT_EQ(&RC2, CG.lookupRefSCC(AN));
2126 LazyCallGraph CG = buildCG(*M);
2129 LazyCallGraph::Node &AN = CG.get(lookupFunction(*M, "a"));
2130 LazyCallGraph::Node &BN = CG.get(lookupFunction(*M, "b"));
2131 LazyCallGraph::Node &CN = CG.get(lookupFunction(*M, "c"));
2132 LazyCallGraph::Node &DN = CG.get(lookupFunction(*M, "d"));
2133 LazyCallGraph::Node &DeadN = CG.get(lookupFunction(*M, "dead"));
2139 CG.insertEdge(AN, DeadN, LazyCallGraph::Edge::Ref);
2140 CG.insertEdge(BN, DeadN, LazyCallGraph::Edge::Ref);
2141 CG.insertEdge(CN, DeadN, LazyCallGraph::Edge::Ref);
2142 CG.insertEdge(DN, DeadN, LazyCallGraph::Edge::Ref);
2145 CG.buildRefSCCs();
2146 auto I = CG.postorder_ref_scc_begin();
2150 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2156 EXPECT_EQ(&DeadRC, CG.lookupRefSCC(DeadN));
2157 EXPECT_EQ(&C1, CG.lookupSCC(DN));
2158 EXPECT_EQ(&C1, CG.lookupSCC(CN));
2159 EXPECT_EQ(&C2, CG.lookupSCC(BN));
2160 EXPECT_EQ(&RC1, CG.lookupRefSCC(DN));
2161 EXPECT_EQ(&RC1, CG.lookupRefSCC(CN));
2162 EXPECT_EQ(&RC1, CG.lookupRefSCC(BN));
2163 EXPECT_EQ(&RC2, CG.lookupRefSCC(AN));
2167 CG.markDeadFunction(DeadN.getFunction());
2168 CG.removeDeadFunctions({&DeadN.getFunction()});
2172 I = CG.postorder_ref_scc_begin();
2175 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2192 LazyCallGraph CG = buildCG(*M);
2194 LazyCallGraph::Node &AN = CG.get(lookupFunction(*M, "a"));
2195 LazyCallGraph::Node &BN = CG.get(lookupFunction(*M, "b"));
2196 LazyCallGraph::Node &CN = CG.get(lookupFunction(*M, "c"));
2201 CG.insertEdge(CN, AN, LazyCallGraph::Edge::Ref);
2204 CG.buildRefSCCs();
2205 auto I = CG.postorder_ref_scc_begin();
2207 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2211 EXPECT_EQ(&RC, CG.lookupRefSCC(AN));
2212 EXPECT_EQ(&RC, CG.lookupRefSCC(BN));
2213 EXPECT_EQ(&RC, CG.lookupRefSCC(CN));
2217 CG.markDeadFunction(AN.getFunction());
2218 CG.removeDeadFunctions({&AN.getFunction()});
2222 I = CG.postorder_ref_scc_begin();
2223 EXPECT_EQ(CG.lookupRefSCC(CN), &*I++);
2224 EXPECT_EQ(CG.lookupRefSCC(BN), &*I++);
2225 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2247 LazyCallGraph CG = buildCG(*M);
2249 LazyCallGraph::Node &AN = CG.get(lookupFunction(*M, "a"));
2250 LazyCallGraph::Node &BN = CG.get(lookupFunction(*M, "b"));
2251 LazyCallGraph::Node &CN = CG.get(lookupFunction(*M, "c"));
2252 LazyCallGraph::Node &DN = CG.get(lookupFunction(*M, "d"));
2258 CG.insertEdge(DN, AN, LazyCallGraph::Edge::Ref);
2261 CG.buildRefSCCs();
2262 auto I = CG.postorder_ref_scc_begin();
2264 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2268 EXPECT_EQ(&RC, CG.lookupRefSCC(AN));
2269 EXPECT_EQ(&RC, CG.lookupRefSCC(BN));
2270 EXPECT_EQ(&RC, CG.lookupRefSCC(CN));
2271 EXPECT_EQ(&RC, CG.lookupRefSCC(DN));
2275 CG.markDeadFunction(AN.getFunction());
2276 CG.removeDeadFunctions({&AN.getFunction()});
2280 I = CG.postorder_ref_scc_begin();
2281 EXPECT_EQ(CG.lookupRefSCC(DN), &*I++);
2282 EXPECT_EQ(CG.lookupRefSCC(CN), &*I);
2283 EXPECT_EQ(CG.lookupRefSCC(BN), &*I++);
2284 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2301 LazyCallGraph CG = buildCG(*M);
2303 LazyCallGraph::Node &AN = CG.get(lookupFunction(*M, "a"));
2304 LazyCallGraph::Node &BN = CG.get(lookupFunction(*M, "b"));
2305 LazyCallGraph::Node &CN = CG.get(lookupFunction(*M, "c"));
2310 CG.insertEdge(CN, AN, LazyCallGraph::Edge::Ref);
2311 CG.insertEdge(BN, AN, LazyCallGraph::Edge::Ref);
2314 CG.buildRefSCCs();
2315 auto I = CG.postorder_ref_scc_begin();
2317 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2321 EXPECT_EQ(&RC, CG.lookupRefSCC(AN));
2322 EXPECT_EQ(&RC, CG.lookupRefSCC(BN));
2323 EXPECT_EQ(&RC, CG.lookupRefSCC(CN));
2327 CG.markDeadFunction(AN.getFunction());
2328 CG.removeDeadFunctions({&AN.getFunction()});
2332 I = CG.postorder_ref_scc_begin();
2333 EXPECT_EQ(CG.lookupRefSCC(CN), &*I++);
2334 EXPECT_EQ(CG.lookupRefSCC(BN), &*I++);
2335 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2343 LazyCallGraph CG = buildCG(*M);
2346 LazyCallGraph::Node &FN = CG.get(F);
2349 CG.buildRefSCCs();
2350 auto I = CG.postorder_ref_scc_begin();
2352 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2364 CG.addSplitFunction(F, *G);
2366 LazyCallGraph::Node *GN = CG.lookup(*G);
2369 I = CG.postorder_ref_scc_begin();
2371 EXPECT_EQ(RC1, CG.lookupRefSCC(*GN));
2374 EXPECT_EQ(RC2, CG.lookupRefSCC(FN));
2375 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2383 LazyCallGraph CG = buildCG(*M);
2386 LazyCallGraph::Node &FN = CG.get(F);
2389 CG.buildRefSCCs();
2390 auto I = CG.postorder_ref_scc_begin();
2392 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2405 CG.addSplitFunction(F, *G);
2407 LazyCallGraph::Node *GN = CG.lookup(*G);
2410 I = CG.postorder_ref_scc_begin();
2412 EXPECT_EQ(RC1, CG.lookupRefSCC(*GN));
2415 EXPECT_EQ(RC2, CG.lookupRefSCC(FN));
2416 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2424 LazyCallGraph CG = buildCG(*M);
2427 LazyCallGraph::Node &FN = CG.get(F);
2430 CG.buildRefSCCs();
2431 auto I = CG.postorder_ref_scc_begin();
2433 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2448 CG.addSplitFunction(F, *G);
2450 LazyCallGraph::Node *GN = CG.lookup(*G);
2453 I = CG.postorder_ref_scc_begin();
2455 EXPECT_EQ(RC, CG.lookupRefSCC(*GN));
2457 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2460 EXPECT_EQ(CG.lookupSCC(*GN), &(*RC)[0]);
2461 EXPECT_EQ(CG.lookupSCC(FN), &(*RC)[1]);
2469 LazyCallGraph CG = buildCG(*M);
2472 LazyCallGraph::Node &FN = CG.get(F);
2475 CG.buildRefSCCs();
2476 auto I = CG.postorder_ref_scc_begin();
2478 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2494 CG.addSplitFunction(F, *G);
2496 LazyCallGraph::Node *GN = CG.lookup(*G);
2499 I = CG.postorder_ref_scc_begin();
2501 EXPECT_EQ(RC, CG.lookupRefSCC(*GN));
2503 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2507 EXPECT_EQ(&CG.lookupSCC(*GN)->getOuterRefSCC(), RC);
2508 EXPECT_EQ(&CG.lookupSCC(FN)->getOuterRefSCC(), RC);
2516 LazyCallGraph CG = buildCG(*M);
2519 LazyCallGraph::Node &FN = CG.get(F);
2522 CG.buildRefSCCs();
2523 auto I = CG.postorder_ref_scc_begin();
2525 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2540 CG.addSplitFunction(F, *G);
2542 LazyCallGraph::Node *GN = CG.lookup(*G);
2545 I = CG.postorder_ref_scc_begin();
2547 EXPECT_EQ(RC, CG.lookupRefSCC(*GN));
2549 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2552 EXPECT_EQ(CG.lookupSCC(FN), &(*RC)[0]);
2553 EXPECT_EQ(CG.lookupSCC(*GN), &(*RC)[1]);
2561 LazyCallGraph CG = buildCG(*M);
2564 LazyCallGraph::Node &FN = CG.get(F);
2567 CG.buildRefSCCs();
2568 auto I = CG.postorder_ref_scc_begin();
2570 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2584 CG.addSplitFunction(F, *G);
2586 LazyCallGraph::Node *GN = CG.lookup(*G);
2589 I = CG.postorder_ref_scc_begin();
2591 EXPECT_EQ(RC, CG.lookupRefSCC(*GN));
2593 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2596 EXPECT_EQ(CG.lookupSCC(FN), &(*RC)[0]);
2597 EXPECT_EQ(CG.lookupSCC(*GN), &(*RC)[0]);
2610 LazyCallGraph CG = buildCG(*M);
2613 LazyCallGraph::Node &FN = CG.get(F);
2615 LazyCallGraph::Node &F2N = CG.get(F2);
2618 CG.buildRefSCCs();
2619 auto I = CG.postorder_ref_scc_begin();
2621 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2635 CG.addSplitFunction(F, *G);
2637 LazyCallGraph::Node *GN = CG.lookup(*G);
2640 I = CG.postorder_ref_scc_begin();
2642 EXPECT_EQ(RC, CG.lookupRefSCC(*GN));
2644 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2647 EXPECT_EQ(CG.lookupSCC(FN), &(*RC)[0]);
2648 EXPECT_EQ(CG.lookupSCC(F2N), &(*RC)[0]);
2649 EXPECT_EQ(CG.lookupSCC(*GN), &(*RC)[0]);
2662 LazyCallGraph CG = buildCG(*M);
2665 LazyCallGraph::Node &FN = CG.get(F);
2667 LazyCallGraph::Node &F2N = CG.get(F2);
2670 CG.buildRefSCCs();
2671 auto I = CG.postorder_ref_scc_begin();
2673 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2688 CG.addSplitFunction(F, *G);
2690 LazyCallGraph::Node *GN = CG.lookup(*G);
2693 I = CG.postorder_ref_scc_begin();
2695 EXPECT_EQ(RC, CG.lookupRefSCC(*GN));
2697 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2700 EXPECT_EQ(CG.lookupSCC(FN), &(*RC)[0]);
2701 EXPECT_EQ(CG.lookupSCC(F2N), &(*RC)[0]);
2702 EXPECT_EQ(CG.lookupSCC(*GN), &(*RC)[1]);
2715 LazyCallGraph CG = buildCG(*M);
2718 LazyCallGraph::Node &FN = CG.get(F);
2720 LazyCallGraph::Node &F2N = CG.get(F2);
2723 CG.buildRefSCCs();
2724 auto I = CG.postorder_ref_scc_begin();
2726 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2741 CG.addSplitFunction(F, *G);
2743 LazyCallGraph::Node *GN = CG.lookup(*G);
2746 I = CG.postorder_ref_scc_begin();
2748 EXPECT_EQ(RC, CG.lookupRefSCC(*GN));
2750 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2753 EXPECT_EQ(CG.lookupSCC(*GN), &(*RC)[0]);
2754 EXPECT_EQ(CG.lookupSCC(FN), &(*RC)[1]);
2755 EXPECT_EQ(CG.lookupSCC(F2N), &(*RC)[1]);
2763 LazyCallGraph CG = buildCG(*M);
2766 LazyCallGraph::Node &FN = CG.get(F);
2769 CG.buildRefSCCs();
2770 auto I = CG.postorder_ref_scc_begin();
2772 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2785 CG.addSplitRefRecursiveFunctions(F, SmallVector<Function *, 1>({G}));
2787 LazyCallGraph::Node *GN = CG.lookup(*G);
2790 I = CG.postorder_ref_scc_begin();
2792 EXPECT_EQ(RC1, CG.lookupRefSCC(*GN));
2795 EXPECT_EQ(RC2, CG.lookupRefSCC(FN));
2796 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2804 LazyCallGraph CG = buildCG(*M);
2807 LazyCallGraph::Node &FN = CG.get(F);
2810 CG.buildRefSCCs();
2811 auto I = CG.postorder_ref_scc_begin();
2813 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2829 CG.addSplitRefRecursiveFunctions(F, SmallVector<Function *, 1>({G}));
2831 LazyCallGraph::Node *GN = CG.lookup(*G);
2834 I = CG.postorder_ref_scc_begin();
2836 EXPECT_EQ(RC, CG.lookupRefSCC(*GN));
2838 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2842 EXPECT_EQ(&CG.lookupSCC(*GN)->getOuterRefSCC(), RC);
2843 EXPECT_EQ(&CG.lookupSCC(FN)->getOuterRefSCC(), RC);
2851 LazyCallGraph CG = buildCG(*M);
2854 LazyCallGraph::Node &FN = CG.get(F);
2857 CG.buildRefSCCs();
2858 auto I = CG.postorder_ref_scc_begin();
2860 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2884 CG.addSplitRefRecursiveFunctions(F, SmallVector<Function *, 1>({G1, G2}));
2886 LazyCallGraph::Node *G1N = CG.lookup(*G1);
2888 LazyCallGraph::Node *G2N = CG.lookup(*G2);
2891 I = CG.postorder_ref_scc_begin();
2894 EXPECT_EQ(RC1, CG.lookupRefSCC(*G1N));
2895 EXPECT_EQ(RC1, CG.lookupRefSCC(*G2N));
2898 EXPECT_EQ(RC2, CG.lookupRefSCC(FN));
2899 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2907 LazyCallGraph CG = buildCG(*M);
2910 LazyCallGraph::Node &FN = CG.get(F);
2913 CG.buildRefSCCs();
2914 auto I = CG.postorder_ref_scc_begin();
2916 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2943 CG.addSplitRefRecursiveFunctions(F, SmallVector<Function *, 1>({G1, G2}));
2945 LazyCallGraph::Node *G1N = CG.lookup(*G1);
2947 LazyCallGraph::Node *G2N = CG.lookup(*G2);
2950 I = CG.postorder_ref_scc_begin();
2953 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2957 EXPECT_EQ(&CG.lookupSCC(FN)->getOuterRefSCC(), RC);
2958 EXPECT_EQ(&CG.lookupSCC(*G1N)->getOuterRefSCC(), RC);
2959 EXPECT_EQ(&CG.lookupSCC(*G2N)->getOuterRefSCC(), RC);
2960 EXPECT_EQ(RC, CG.lookupRefSCC(*G1N));
2961 EXPECT_EQ(RC, CG.lookupRefSCC(*G2N));
2975 LazyCallGraph CG = buildCG(*M);
2978 LazyCallGraph::Node &FN = CG.get(F);
2980 LazyCallGraph::Node &F2N = CG.get(F);
2983 CG.buildRefSCCs();
2984 auto I = CG.postorder_ref_scc_begin();
2986 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
3013 CG.addSplitRefRecursiveFunctions(F, SmallVector<Function *, 1>({G1, G2}));
3015 LazyCallGraph::Node *G1N = CG.lookup(*G1);
3017 LazyCallGraph::Node *G2N = CG.lookup(*G2);
3020 I = CG.postorder_ref_scc_begin();
3024 EXPECT_EQ(RC, CG.lookupRefSCC(*G1N));
3025 EXPECT_EQ(RC, CG.lookupRefSCC(*G2N));
3026 EXPECT_EQ(RC, CG.lookupRefSCC(FN));
3027 EXPECT_EQ(RC, CG.lookupRefSCC(F2N));
3028 EXPECT_EQ(CG.postorder_ref_scc_end(), I);