Home | History | Annotate | Download | only in Analysis

Lines Matching refs:CG

1 //===- LazyCallGraphTest.cpp - Unit tests for the lazy CG analysis --------===//
222 LazyCallGraph CG(M, TLI);
223 return CG;
229 LazyCallGraph CG = buildCG(*M);
234 auto I = CG.begin();
259 EXPECT_EQ(CG.end(), I);
319 CG.buildRefSCCs();
320 auto J = CG.postorder_ref_scc_begin();
336 EXPECT_EQ(&D, &*CG.postorder_ref_scc_begin());
352 EXPECT_EQ(&C, &*std::next(CG.postorder_ref_scc_begin()));
370 EXPECT_EQ(&B, &*std::next(CG.postorder_ref_scc_begin(), 2));
388 EXPECT_EQ(&A, &*std::next(CG.postorder_ref_scc_begin(), 3));
390 EXPECT_EQ(CG.postorder_ref_scc_end(), J);
391 EXPECT_EQ(J, std::next(CG.postorder_ref_scc_begin(), 4));
417 LazyCallGraph CG = buildCG(*M);
419 LazyCallGraph::Node &A = CG.get(lookupFunction(*M, "a"));
420 LazyCallGraph::Node &B = CG.get(lookupFunction(*M, "b"));
426 LazyCallGraph::Node &C = CG.get(lookupFunction(*M, "c"));
428 CG.insertEdge(B, C, LazyCallGraph::Edge::Call);
432 CG.insertEdge(C, B, LazyCallGraph::Edge::Call);
436 CG.insertEdge(C, C, LazyCallGraph::Edge::Call);
441 CG.removeEdge(C, B);
445 CG.removeEdge(C, C);
448 CG.removeEdge(B, C);
455 LazyCallGraph CG = buildCG(*M);
459 LazyCallGraph::Node &D1 = CG.get(lookupFunction(*M, "d1"));
460 LazyCallGraph::Node &A1 = CG.get(lookupFunction(*M, "a1"));
463 CG.insertEdge(D1, A1, LazyCallGraph::Edge::Ref);
470 CG.buildRefSCCs();
471 auto I = CG.postorder_ref_scc_begin();
473 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
552 LazyCallGraph CG = buildCG(*M);
555 CG.buildRefSCCs();
556 auto I = CG.postorder_ref_scc_begin();
558 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
560 LazyCallGraph::Node &N1 = *CG.lookup(lookupFunction(*M, "f1"));
561 LazyCallGraph::Node &N2 = *CG.lookup(lookupFunction(*M, "f2"));
562 LazyCallGraph::Node &N3 = *CG.lookup(lookupFunction(*M, "f3"));
563 LazyCallGraph::Node &N4 = *CG.lookup(lookupFunction(*M, "f4"));
564 LazyCallGraph::Node &N5 = *CG.lookup(lookupFunction(*M, "f4"));
565 EXPECT_EQ(&RC, CG.lookupRefSCC(N1));
566 EXPECT_EQ(&RC, CG.lookupRefSCC(N2));
567 EXPECT_EQ(&RC, CG.lookupRefSCC(N3));
568 EXPECT_EQ(&RC, CG.lookupRefSCC(N4));
569 EXPECT_EQ(&RC, CG.lookupRefSCC(N5));
574 EXPECT_EQ(&C, CG.lookupSCC(N1));
575 EXPECT_EQ(&C, CG.lookupSCC(N2));
576 EXPECT_EQ(&C, CG.lookupSCC(N3));
577 EXPECT_EQ(&C, CG.lookupSCC(N4));
578 EXPECT_EQ(&C, CG.lookupSCC(N5));
603 LazyCallGraph CG = buildCG(*M);
606 CG.buildRefSCCs();
607 for (LazyCallGraph::RefSCC &RC : CG.postorder_ref_sccs())
610 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
611 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
612 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
613 LazyCallGraph::Node &D = *CG.lookup(lookupFunction(*M, "d"));
614 LazyCallGraph::SCC &AC = *CG.lookupSCC(A);
615 LazyCallGraph::SCC &BC = *CG.lookupSCC(B);
616 LazyCallGraph::SCC &CC = *CG.lookupSCC(C);
617 LazyCallGraph::SCC &DC = *CG.lookupSCC(D);
618 LazyCallGraph::RefSCC &ARC = *CG.lookupRefSCC(A);
619 LazyCallGraph::RefSCC &BRC = *CG.lookupRefSCC(B);
620 LazyCallGraph::RefSCC &CRC = *CG.lookupRefSCC(C);
621 LazyCallGraph::RefSCC &DRC = *CG.lookupRefSCC(D);
657 EXPECT_EQ(&AC, CG.lookupSCC(A));
658 EXPECT_EQ(&BC, CG.lookupSCC(B));
659 EXPECT_EQ(&CC, CG.lookupSCC(C));
660 EXPECT_EQ(&DC, CG.lookupSCC(D));
661 EXPECT_EQ(&ARC, CG.lookupRefSCC(A));
662 EXPECT_EQ(&BRC, CG.lookupRefSCC(B));
663 EXPECT_EQ(&CRC, CG.lookupRefSCC(C));
664 EXPECT_EQ(&DRC, CG.lookupRefSCC(D));
678 EXPECT_EQ(&AC, CG.lookupSCC(A));
679 EXPECT_EQ(&BC, CG.lookupSCC(B));
680 EXPECT_EQ(&CC, CG.lookupSCC(C));
681 EXPECT_EQ(&DC, CG.lookupSCC(D));
682 EXPECT_EQ(&ARC, CG.lookupRefSCC(A));
683 EXPECT_EQ(&BRC, CG.lookupRefSCC(B));
684 EXPECT_EQ(&CRC, CG.lookupRefSCC(C));
685 EXPECT_EQ(&DRC, CG.lookupRefSCC(D));
699 EXPECT_EQ(&AC, CG.lookupSCC(A));
700 EXPECT_EQ(&BC, CG.lookupSCC(B));
701 EXPECT_EQ(&CC, CG.lookupSCC(C));
702 EXPECT_EQ(&DC, CG.lookupSCC(D));
703 EXPECT_EQ(&ARC, CG.lookupRefSCC(A));
704 EXPECT_EQ(&BRC, CG.lookupRefSCC(B));
705 EXPECT_EQ(&CRC, CG.lookupRefSCC(C));
706 EXPECT_EQ(&DRC, CG.lookupRefSCC(D));
720 EXPECT_EQ(&AC, CG.lookupSCC(A));
721 EXPECT_EQ(&BC, CG.lookupSCC(B));
722 EXPECT_EQ(&CC, CG.lookupSCC(C));
723 EXPECT_EQ(&DC, CG.lookupSCC(D));
724 EXPECT_EQ(&ARC, CG.lookupRefSCC(A));
725 EXPECT_EQ(&BRC, CG.lookupRefSCC(B));
726 EXPECT_EQ(&CRC, CG.lookupRefSCC(C));
727 EXPECT_EQ(&DRC, CG.lookupRefSCC(D));
749 LazyCallGraph CG = buildCG(*M);
752 CG.buildRefSCCs();
753 for (LazyCallGraph::RefSCC &RC : CG.postorder_ref_sccs())
756 LazyCallGraph::Node &A1 = *CG.lookup(lookupFunction(*M, "a1"));
757 LazyCallGraph::Node &A2 = *CG.lookup(lookupFunction(*M, "a2"));
758 LazyCallGraph::Node &A3 = *CG.lookup(lookupFunction(*M, "a3"));
759 LazyCallGraph::Node &B1 = *CG.lookup(lookupFunction(*M, "b1"));
760 LazyCallGraph::Node &B2 = *CG.lookup(lookupFunction(*M, "b2"));
761 LazyCallGraph::Node &B3 = *CG.lookup(lookupFunction(*M, "b3"));
762 LazyCallGraph::Node &C1 = *CG.lookup(lookupFunction(*M, "c1"));
763 LazyCallGraph::Node &C2 = *CG.lookup(lookupFunction(*M, "c2"));
764 LazyCallGraph::Node &C3 = *CG.lookup(lookupFunction(*M, "c3"));
765 LazyCallGraph::Node &D1 = *CG.lookup(lookupFunction(*M, "d1"));
766 LazyCallGraph::Node &D2 = *CG.lookup(lookupFunction(*M, "d2"));
767 LazyCallGraph::Node &D3 = *CG.lookup(lookupFunction(*M, "d3"));
768 LazyCallGraph::RefSCC &ARC = *CG.lookupRefSCC(A1);
769 LazyCallGraph::RefSCC &BRC = *CG.lookupRefSCC(B1);
770 LazyCallGraph::RefSCC &CRC = *CG.lookupRefSCC(C1);
771 LazyCallGraph::RefSCC &DRC = *CG.lookupRefSCC(D1);
772 ASSERT_EQ(&ARC, CG.lookupRefSCC(A2));
773 ASSERT_EQ(&ARC, CG.lookupRefSCC(A3));
774 ASSERT_EQ(&BRC, CG.lookupRefSCC(B2));
775 ASSERT_EQ(&BRC, CG.lookupRefSCC(B3));
776 ASSERT_EQ(&CRC, CG.lookupRefSCC(C2));
777 ASSERT_EQ(&CRC, CG.lookupRefSCC(C3));
778 ASSERT_EQ(&DRC, CG.lookupRefSCC(D2));
779 ASSERT_EQ(&DRC, CG.lookupRefSCC(D3));
807 EXPECT_EQ(&ARC, CG.lookupRefSCC(A1));
808 EXPECT_EQ(&ARC, CG.lookupRefSCC(A2));
809 EXPECT_EQ(&ARC, CG.lookupRefSCC(A3));
810 EXPECT_EQ(&BRC, CG.lookupRefSCC(B1));
811 EXPECT_EQ(&BRC, CG.lookupRefSCC(B2));
812 EXPECT_EQ(&BRC, CG.lookupRefSCC(B3));
813 EXPECT_EQ(&CRC, CG.lookupRefSCC(C1));
814 EXPECT_EQ(&CRC, CG.lookupRefSCC(C2));
815 EXPECT_EQ(&CRC, CG.lookupRefSCC(C3));
816 EXPECT_EQ(&CRC, CG.lookupRefSCC(D1));
817 EXPECT_EQ(&CRC, CG.lookupRefSCC(D2));
818 EXPECT_EQ(&CRC, CG.lookupRefSCC(D3));
825 auto I = CG.postorder_ref_scc_begin(), E = CG.postorder_ref_scc_end();
841 LazyCallGraph CG = buildCG(*M);
844 CG.buildRefSCCs();
845 for (LazyCallGraph::RefSCC &RC : CG.postorder_ref_sccs())
848 LazyCallGraph::Node &A1 = *CG.lookup(lookupFunction(*M, "a1"));
849 LazyCallGraph::Node &A2 = *CG.lookup(lookupFunction(*M, "a2"));
850 LazyCallGraph::Node &A3 = *CG.lookup(lookupFunction(*M, "a3"));
851 LazyCallGraph::Node &B1 = *CG.lookup(lookupFunction(*M, "b1"));
852 LazyCallGraph::Node &B2 = *CG.lookup(lookupFunction(*M, "b2"));
853 LazyCallGraph::Node &B3 = *CG.lookup(lookupFunction(*M, "b3"));
854 LazyCallGraph::Node &C1 = *CG.lookup(lookupFunction(*M, "c1"));
855 LazyCallGraph::Node &C2 = *CG.lookup(lookupFunction(*M, "c2"));
856 LazyCallGraph::Node &C3 = *CG.lookup(lookupFunction(*M, "c3"));
857 LazyCallGraph::Node &D1 = *CG.lookup(lookupFunction(*M, "d1"));
858 LazyCallGraph::Node &D2 = *CG.lookup(lookupFunction(*M, "d2"));
859 LazyCallGraph::Node &D3 = *CG.lookup(lookupFunction(*M, "d3"));
860 LazyCallGraph::RefSCC &ARC = *CG.lookupRefSCC(A1);
861 LazyCallGraph::RefSCC &BRC = *CG.lookupRefSCC(B1);
862 LazyCallGraph::RefSCC &CRC = *CG.lookupRefSCC(C1);
863 LazyCallGraph::RefSCC &DRC = *CG.lookupRefSCC(D1);
864 ASSERT_EQ(&ARC, CG.lookupRefSCC(A2));
865 ASSERT_EQ(&ARC, CG.lookupRefSCC(A3));
866 ASSERT_EQ(&BRC, CG.lookupRefSCC(B2));
867 ASSERT_EQ(&BRC, CG.lookupRefSCC(B3));
868 ASSERT_EQ(&CRC, CG.lookupRefSCC(C2));
869 ASSERT_EQ(&CRC, CG.lookupRefSCC(C3));
870 ASSERT_EQ(&DRC, CG.lookupRefSCC(D2));
871 ASSERT_EQ(&DRC, CG.lookupRefSCC(D3));
899 EXPECT_EQ(&ARC, CG.lookupRefSCC(A1));
900 EXPECT_EQ(&ARC, CG.lookupRefSCC(A2));
901 EXPECT_EQ(&ARC, CG.lookupRefSCC(A3));
902 EXPECT_EQ(&BRC, CG.lookupRefSCC(B1));
903 EXPECT_EQ(&BRC, CG.lookupRefSCC(B2));
904 EXPECT_EQ(&BRC, CG.lookupRefSCC(B3));
905 EXPECT_EQ(&CRC, CG.lookupRefSCC(C1));
906 EXPECT_EQ(&CRC, CG.lookupRefSCC(C2));
907 EXPECT_EQ(&CRC, CG.lookupRefSCC(C3));
908 EXPECT_EQ(&CRC, CG.lookupRefSCC(D1));
909 EXPECT_EQ(&CRC, CG.lookupRefSCC(D2));
910 EXPECT_EQ(&CRC, CG.lookupRefSCC(D3));
917 auto I = CG.postorder_ref_scc_begin(), E = CG.postorder_ref_scc_end();
948 LazyCallGraph CG = buildCG(*M);
951 CG.buildRefSCCs();
952 for (LazyCallGraph::RefSCC &RC : CG.postorder_ref_sccs())
955 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
956 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
957 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
958 LazyCallGraph::Node &D = *CG.lookup(lookupFunction(*M, "d"));
959 LazyCallGraph::SCC &AC = *CG.lookupSCC(A);
960 LazyCallGraph::SCC &BC = *CG.lookupSCC(B);
961 LazyCallGraph::SCC &CC = *CG.lookupSCC(C);
962 LazyCallGraph::SCC &DC = *CG.lookupSCC(D);
963 LazyCallGraph::RefSCC &ARC = *CG.lookupRefSCC(A);
964 LazyCallGraph::RefSCC &BRC = *CG.lookupRefSCC(B);
965 LazyCallGraph::RefSCC &CRC = *CG.lookupRefSCC(C);
966 LazyCallGraph::RefSCC &DRC = *CG.lookupRefSCC(D);
981 EXPECT_EQ(&ARC, CG.lookupRefSCC(A));
982 EXPECT_EQ(&ARC, CG.lookupRefSCC(B));
983 EXPECT_EQ(&ARC, CG.lookupRefSCC(C));
984 EXPECT_EQ(&ARC, CG.lookupRefSCC(D));
994 auto I = CG.postorder_ref_scc_begin(), E = CG.postorder_ref_scc_end();
1025 LazyCallGraph CG = buildCG(*M);
1028 CG.buildRefSCCs();
1029 for (LazyCallGraph::RefSCC &RC : CG.postorder_ref_sccs())
1032 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
1033 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
1034 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
1035 LazyCallGraph::Node &D = *CG.lookup(lookupFunction(*M, "d"));
1036 LazyCallGraph::RefSCC &ARC = *CG.lookupRefSCC(A);
1037 LazyCallGraph::RefSCC &BRC = *CG.lookupRefSCC(B);
1038 LazyCallGraph::RefSCC &CRC = *CG.lookupRefSCC(C);
1039 LazyCallGraph::RefSCC &DRC = *CG.lookupRefSCC(D);
1055 EXPECT_EQ(&ARC, CG.lookupRefSCC(A));
1056 EXPECT_EQ(&ARC, CG.lookupRefSCC(B));
1057 EXPECT_EQ(&ARC, CG.lookupRefSCC(C));
1058 EXPECT_EQ(&ARC, CG.lookupRefSCC(D));
1061 auto I = CG.postorder_ref_scc_begin(), End = CG.postorder_ref_scc_end();
1087 LazyCallGraph CG = buildCG(*M);
1090 CG.buildRefSCCs();
1091 for (LazyCallGraph::RefSCC &RC : CG.postorder_ref_sccs())
1094 LazyCallGraph::Node &A1 = *CG.lookup(lookupFunction(*M, "a1"));
1095 LazyCallGraph::Node &A2 = *CG.lookup(lookupFunction(*M, "a2"));
1096 LazyCallGraph::Node &A3 = *CG.lookup(lookupFunction(*M, "a3"));
1097 LazyCallGraph::Node &B1 = *CG.lookup(lookupFunction(*M, "b1"));
1098 LazyCallGraph::Node &B2 = *CG.lookup(lookupFunction(*M, "b2"));
1099 LazyCallGraph::Node &B3 = *CG.lookup(lookupFunction(*M, "b3"));
1100 LazyCallGraph::Node &C1 = *CG.lookup(lookupFunction(*M, "c1"));
1101 LazyCallGraph::Node &C2 = *CG.lookup(lookupFunction(*M, "c2"));
1102 LazyCallGraph::Node &C3 = *CG.lookup(lookupFunction(*M, "c3"));
1103 LazyCallGraph::Node &D1 = *CG.lookup(lookupFunction(*M, "d1"));
1104 LazyCallGraph::Node &D2 = *CG.lookup(lookupFunction(*M, "d2"));
1105 LazyCallGraph::Node &D3 = *CG.lookup(lookupFunction(*M, "d3"));
1106 LazyCallGraph::RefSCC &ARC = *CG.lookupRefSCC(A1);
1107 LazyCallGraph::RefSCC &BRC = *CG.lookupRefSCC(B1);
1108 LazyCallGraph::RefSCC &CRC = *CG.lookupRefSCC(C1);
1109 LazyCallGraph::RefSCC &DRC = *CG.lookupRefSCC(D1);
1110 ASSERT_EQ(&ARC, CG.lookupRefSCC(A2));
1111 ASSERT_EQ(&ARC, CG.lookupRefSCC(A3));
1112 ASSERT_EQ(&BRC, CG.lookupRefSCC(B2));
1113 ASSERT_EQ(&BRC, CG.lookupRefSCC(B3));
1114 ASSERT_EQ(&CRC, CG.lookupRefSCC(C2));
1115 ASSERT_EQ(&CRC, CG.lookupRefSCC(C3));
1116 ASSERT_EQ(&DRC, CG.lookupRefSCC(D2));
1117 ASSERT_EQ(&DRC, CG.lookupRefSCC(D3));
1162 LazyCallGraph::SCC &DC = *CG.lookupSCC(D2);
1164 EXPECT_EQ(&DC, CG.lookupSCC(D2));
1167 EXPECT_EQ(&NewDC, CG.lookupSCC(D1));
1168 EXPECT_EQ(&NewDC, CG.lookupSCC(D3));
1172 EXPECT_EQ(&NewDRC, CG.lookupRefSCC(D1));
1173 EXPECT_EQ(&NewDRC, CG.lookupRefSCC(D3));
1175 EXPECT_EQ(&D2RC, CG.lookupRefSCC(D2));
1186 CG.removeDeadFunction(D2F);
1189 EXPECT_EQ(&ARC, CG.lookupRefSCC(A1));
1190 EXPECT_EQ(&ARC, CG.lookupRefSCC(A2));
1191 EXPECT_EQ(&ARC, CG.lookupRefSCC(A3));
1192 EXPECT_EQ(&BRC, CG.lookupRefSCC(B1));
1193 EXPECT_EQ(&BRC, CG.lookupRefSCC(B2));
1194 EXPECT_EQ(&BRC, CG.lookupRefSCC(B3));
1195 EXPECT_EQ(&CRC, CG.lookupRefSCC(C1));
1196 EXPECT_EQ(&CRC, CG.lookupRefSCC(C2));
1197 EXPECT_EQ(&CRC, CG.lookupRefSCC(C3));
1198 EXPECT_EQ(&NewDRC, CG.lookupRefSCC(D1));
1199 EXPECT_EQ(&NewDRC, CG.lookupRefSCC(D3));
1203 auto I = CG.postorder_ref_scc_begin(), E = CG.postorder_ref_scc_end();
1232 LazyCallGraph CG = buildCG(*M);
1235 CG.buildRefSCCs();
1236 auto I = CG.postorder_ref_scc_begin();
1238 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
1240 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
1241 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
1242 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
1243 EXPECT_EQ(&RC, CG.lookupRefSCC(A));
1244 EXPECT_EQ(&RC, CG.lookupRefSCC(B));
1245 EXPECT_EQ(&RC, CG.lookupRefSCC(C));
1247 EXPECT_EQ(&*RC.begin(), CG.lookupSCC(A));
1248 EXPECT_EQ(&*RC.begin(), CG.lookupSCC(B));
1249 EXPECT_EQ(&*RC.begin(), CG.lookupSCC(C));
1254 EXPECT_EQ(&RC, CG.lookupRefSCC(A));
1255 EXPECT_EQ(&RC, CG.lookupRefSCC(B));
1256 EXPECT_EQ(&RC, CG.lookupRefSCC(C));
1258 EXPECT_EQ(&*RC.begin(), CG.lookupSCC(A));
1259 EXPECT_EQ(&*RC.begin(), CG.lookupSCC(B));
1260 EXPECT_EQ(&*RC.begin(), CG.lookupSCC(C));
1266 EXPECT_EQ(&RC, CG.lookupRefSCC(A));
1267 EXPECT_EQ(&RC, CG.lookupRefSCC(B));
1268 EXPECT_EQ(&RC, CG.lookupRefSCC(C));
1273 EXPECT_EQ(&*J++, CG.lookupSCC(B));
1274 EXPECT_EQ(&*J++, CG.lookupSCC(A));
1275 EXPECT_EQ(&*J++, CG.lookupSCC(C));
1286 LazyCallGraph::SCC &AC = *CG.lookupSCC(A);
1287 LazyCallGraph::SCC &CC = *CG.lookupSCC(C);
1293 EXPECT_EQ(&CC, CG.lookupSCC(A));
1294 EXPECT_EQ(&CC, CG.lookupSCC(C));
1296 EXPECT_EQ(&*J++, CG.lookupSCC(B));
1297 EXPECT_EQ(&*J++, CG.lookupSCC(C));
1326 LazyCallGraph CG = buildCG(*M);
1329 CG.buildRefSCCs();
1330 auto I = CG.postorder_ref_scc_begin(), E = CG.postorder_ref_scc_end();
1334 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
1335 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
1336 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
1337 EXPECT_EQ(&RC, CG.lookupRefSCC(A));
1338 EXPECT_EQ(&RC, CG.lookupRefSCC(B));
1339 EXPECT_EQ(&RC, CG.lookupRefSCC(C));
1346 EXPECT_EQ(&RC, CG.lookupRefSCC(A));
1347 EXPECT_EQ(&RC, CG.lookupRefSCC(B));
1348 EXPECT_EQ(&RC, CG.lookupRefSCC(C));
1349 auto J = CG.postorder_ref_scc_begin();
1364 EXPECT_EQ(&ARC, CG.lookupRefSCC(A));
1366 EXPECT_EQ(&BCRC, CG.lookupRefSCC(B));
1367 EXPECT_EQ(&BCRC, CG.lookupRefSCC(C));
1368 J = CG.postorder_ref_scc_begin();
1404 LazyCallGraph CG = buildCG(*M);
1407 CG.buildRefSCCs();
1408 auto I = CG.postorder_ref_scc_begin(), E = CG.postorder_ref_scc_end();
1412 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
1413 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
1414 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
1415 EXPECT_EQ(&RC, CG.lookupRefSCC(A));
1416 EXPECT_EQ(&RC, CG.lookupRefSCC(B));
1417 EXPECT_EQ(&RC, CG.lookupRefSCC(C));
1430 EXPECT_EQ(&BRC, CG.lookupRefSCC(B));
1432 EXPECT_EQ(&ACRC, CG.lookupRefSCC(A));
1433 EXPECT_EQ(&ACRC, CG.lookupRefSCC(C));
1434 auto J = CG.postorder_ref_scc_begin();
1471 LazyCallGraph CG = buildCG(*M);
1474 CG.buildRefSCCs();
1475 auto I = CG.postorder_ref_scc_begin(), E = CG.postorder_ref_scc_end();
1482 LazyCallGraph::Node &AN = *CG.lookup(lookupFunction(*M, "a"));
1483 LazyCallGraph::Node &BN = *CG.lookup(lookupFunction(*M, "b"));
1484 LazyCallGraph::Node &CN = *CG.lookup(lookupFunction(*M, "c"));
1485 EXPECT_EQ(&RC, CG.lookupRefSCC(AN));
1486 EXPECT_EQ(&RC, CG.lookupRefSCC(BN));
1487 EXPECT_EQ(&RC, CG.lookupRefSCC(CN));
1488 EXPECT_EQ(&C, CG.lookupSCC(AN));
1489 EXPECT_EQ(&C, CG.lookupSCC(BN));
1490 EXPECT_EQ(&C, CG.lookupSCC(CN));
1496 EXPECT_EQ(&RC, CG.lookupRefSCC(AN));
1497 EXPECT_EQ(&RC, CG.lookupRefSCC(BN));
1498 EXPECT_EQ(&RC, CG.lookupRefSCC(CN));
1499 EXPECT_EQ(&C, CG.lookupSCC(AN));
1500 EXPECT_EQ(&C, CG.lookupSCC(BN));
1501 EXPECT_EQ(&C, CG.lookupSCC(CN));
1502 auto J = CG.postorder_ref_scc_begin();
1512 EXPECT_EQ(&RC, CG.lookupRefSCC(AN));
1513 EXPECT_EQ(&RC, CG.lookupRefSCC(BN));
1514 EXPECT_EQ(&RC, CG.lookupRefSCC(CN));
1515 EXPECT_EQ(&C, CG.lookupSCC(AN));
1516 EXPECT_EQ(&C, CG.lookupSCC(BN));
1517 EXPECT_EQ(&C, CG.lookupSCC(CN));
1518 J = CG.postorder_ref_scc_begin();
1548 LazyCallGraph CG = buildCG(*M);
1551 CG.buildRefSCCs();
1552 auto I = CG.postorder_ref_scc_begin();
1554 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
1559 LazyCallGraph::Node &AN = *CG.lookup(lookupFunction(*M, "a"));
1560 LazyCallGraph::Node &BN = *CG.lookup(lookupFunction(*M, "b"));
1561 LazyCallGraph::Node &CN = *CG.lookup(lookupFunction(*M, "c"));
1562 EXPECT_EQ(&AC, CG.lookupSCC(AN));
1563 EXPECT_EQ(&AC, CG.lookupSCC(BN));
1564 EXPECT_EQ(&AC, CG.lookupSCC(CN));
1572 EXPECT_EQ(&AC, CG.lookupSCC(AN));
1573 EXPECT_EQ(&AC, CG.lookupSCC(BN));
1574 EXPECT_EQ(&AC, CG.lookupSCC(CN));
1581 EXPECT_EQ(&AC, CG.lookupSCC(AN));
1582 LazyCallGraph::SCC &BC = *CG.lookupSCC(BN);
1584 EXPECT_EQ(&BC, CG.lookupSCC(CN));
1597 EXPECT_EQ(&AC, CG.lookupSCC(AN));
1598 EXPECT_EQ(&BC, CG.lookupSCC(BN));
1599 LazyCallGraph::SCC &CC = *CG.lookupSCC(CN);
1641 LazyCallGraph CG = buildCG(*M);
1644 CG.buildRefSCCs();
1645 auto I = CG.postorder_ref_scc_begin();
1647 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
1649 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
1650 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
1651 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
1652 LazyCallGraph::Node &D = *CG.lookup(lookupFunction(*M, "d"));
1653 LazyCallGraph::SCC &AC = *CG.lookupSCC(A);
1654 LazyCallGraph::SCC &BC = *CG.lookupSCC(B);
1655 LazyCallGraph::SCC &CC = *CG.lookupSCC(C);
1656 LazyCallGraph::SCC &DC = *CG.lookupSCC(D);
1694 EXPECT_EQ(&BC, CG.lookupSCC(B));
1695 EXPECT_EQ(&BC, CG.lookupSCC(C));
1753 LazyCallGraph CG = buildCG(*M);
1756 CG.buildRefSCCs();
1757 auto I = CG.postorder_ref_scc_begin();
1759 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
1761 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
1762 LazyCallGraph::Node &B1 = *CG.lookup(lookupFunction(*M, "b1"));
1763 LazyCallGraph::Node &B2 = *CG.lookup(lookupFunction(*M, "b2"));
1764 LazyCallGraph::Node &B3 = *CG.lookup(lookupFunction(*M, "b3"));
1765 LazyCallGraph::Node &C1 = *CG.lookup(lookupFunction(*M, "c1"));
1766 LazyCallGraph::Node &C2 = *CG.lookup(lookupFunction(*M, "c2"));
1767 LazyCallGraph::Node &C3 = *CG.lookup(lookupFunction(*M, "c3"));
1768 LazyCallGraph::Node &D = *CG.lookup(lookupFunction(*M, "d"));
1769 LazyCallGraph::SCC &AC = *CG.lookupSCC(A);
1770 LazyCallGraph::SCC &B1C = *CG.lookupSCC(B1);
1771 LazyCallGraph::SCC &B2C = *CG.lookupSCC(B2);
1772 LazyCallGraph::SCC &B3C = *CG.lookupSCC(B3);
1773 LazyCallGraph::SCC &C1C = *CG.lookupSCC(C1);
1774 LazyCallGraph::SCC &C2C = *CG.lookupSCC(C2);
1775 LazyCallGraph::SCC &C3C = *CG.lookupSCC(C3);
1776 LazyCallGraph::SCC &DC = *CG.lookupSCC(D);
1883 LazyCallGraph CG = buildCG(*M);
1886 CG.buildRefSCCs();
1887 auto I = CG.postorder_ref_scc_begin();
1889 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
1891 LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
1892 LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
1893 LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
1894 LazyCallGraph::Node &D = *CG.lookup(lookupFunction(*M, "d"));
1895 LazyCallGraph::Node &E = *CG.lookup(lookupFunction(*M, "e"));
1896 LazyCallGraph::Node &F = *CG.lookup(lookupFunction(*M, "f"));
1897 LazyCallGraph::Node &G = *CG.lookup(lookupFunction(*M, "g"));
1898 LazyCallGraph::SCC &AC = *CG.lookupSCC(A);
1899 LazyCallGraph::SCC &BC = *CG.lookupSCC(B);
1900 LazyCallGraph::SCC &CC = *CG.lookupSCC(C);
1901 LazyCallGraph::SCC &DC = *CG.lookupSCC(D);
1902 LazyCallGraph::SCC &EC = *CG.lookupSCC(E);
1903 LazyCallGraph::SCC &FC = *CG.lookupSCC(F);
1904 LazyCallGraph::SCC &GC = *CG.lookupSCC(G);
1966 LazyCallGraph CG = buildCG(*M);
1968 CG.buildRefSCCs();
1969 auto I = CG.postorder_ref_scc_begin();
1972 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
1974 LazyCallGraph::Node &F = *CG.lookup(lookupFunction(*M, "f"));
1975 LazyCallGraph::Node &G = *CG.lookup(lookupFunction(*M, "g"));
1976 EXPECT_EQ(&FRC, CG.lookupRefSCC(F));
1977 EXPECT_EQ(&GRC, CG.lookupRefSCC(G));
2014 LazyCallGraph CG = buildCG(*M);
2017 CG.buildRefSCCs();
2018 auto I = CG.postorder_ref_scc_begin();
2021 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2027 LazyCallGraph::Node &AN = *CG.lookup(lookupFunction(*M, "a"));
2028 LazyCallGraph::Node &BN = *CG.lookup(lookupFunction(*M, "b"));
2029 LazyCallGraph::Node &CN = *CG.lookup(lookupFunction(*M, "c"));
2030 LazyCallGraph::Node &DN = *CG.lookup(lookupFunction(*M, "d"));
2031 EXPECT_EQ(&C1, CG.lookupSCC(DN));
2032 EXPECT_EQ(&C1, CG.lookupSCC(CN));
2033 EXPECT_EQ(&C2, CG.lookupSCC(BN));
2034 EXPECT_EQ(&RC1, CG.lookupRefSCC(DN));
2035 EXPECT_EQ(&RC1, CG.lookupRefSCC(CN));
2036 EXPECT_EQ(&RC1, CG.lookupRefSCC(BN));
2037 EXPECT_EQ(&RC2, CG.lookupRefSCC(AN));
2092 LazyCallGraph CG = buildCG(*M);
2095 LazyCallGraph::Node &AN = CG.get(lookupFunction(*M, "a"));
2096 LazyCallGraph::Node &BN = CG.get(lookupFunction(*M, "b"));
2097 LazyCallGraph::Node &CN = CG.get(lookupFunction(*M, "c"));
2098 LazyCallGraph::Node &DN = CG.get(lookupFunction(*M, "d"));
2099 LazyCallGraph::Node &DeadN = CG.get(lookupFunction(*M, "dead"));
2105 CG.insertEdge(AN, DeadN, LazyCallGraph::Edge::Ref);
2106 CG.insertEdge(BN, DeadN, LazyCallGraph::Edge::Ref);
2107 CG.insertEdge(CN, DeadN, LazyCallGraph::Edge::Ref);
2108 CG.insertEdge(DN, DeadN, LazyCallGraph::Edge::Ref);
2111 CG.buildRefSCCs();
2112 auto I = CG.postorder_ref_scc_begin();
2116 EXPECT_EQ(CG.postorder_ref_scc_end(), I);
2122 EXPECT_EQ(&DeadRC, CG.lookupRefSCC(DeadN));
2123 EXPECT_EQ(&C1, CG.lookupSCC(DN));
2124 EXPECT_EQ(&C1, CG.lookupSCC(CN));
2125 EXPECT_EQ(&C2, CG.lookupSCC(BN));
2126 EXPECT_EQ(&RC1, CG.lookupRefSCC(DN));
2127 EXPECT_EQ(&RC1, CG.lookupRefSCC(CN));
2128 EXPECT_EQ(&RC1, CG.lookupRefSCC(BN));
2129 EXPECT_EQ(&RC2, CG.lookupRefSCC(AN));
2133 CG.removeDeadFunction(DeadN.getFunction());
2137 I = CG.postorder_ref_scc_begin();
2140 EXPECT_EQ(CG.postorder_ref_scc_end(), I);