Lines Matching full:graph

91         "For each function, emit a dot graph depicting potential LVI gadgets"),
96 cl::desc("For each function, emit a dot graph depicting potential LVI "
102 cl::desc("For each function, emit a dot graph to stdout depicting "
165 std::unique_ptr<MachineGadgetGraph> Graph) const;
167 std::unique_ptr<MachineGadgetGraph> Graph) const;
172 trimMitigatedEdges(std::unique_ptr<MachineGadgetGraph> Graph) const;
271 LLVM_DEBUG(dbgs() << "Building gadget graph...\n");
275 std::unique_ptr<MachineGadgetGraph> Graph = getGadgetGraph(MF, MLI, MDT, MDF);
276 LLVM_DEBUG(dbgs() << "Building gadget graph... Done\n");
277 if (Graph == nullptr)
281 writeGadgetGraph(outs(), MF, Graph.get());
286 LLVM_DEBUG(dbgs() << "Emitting gadget graph...\n");
294 writeGadgetGraph(FileOut, MF, Graph.get());
296 LLVM_DEBUG(dbgs() << "Emitting gadget graph... Done\n");
314 FencesInserted = hardenLoadsWithPlugin(MF, std::move(Graph));
316 FencesInserted = hardenLoadsWithHeuristic(MF, std::move(Graph));
332 // Build the Register Dataflow Graph using the RDF framework
460 // Add the gadget edge to the graph.
495 // Traverse CFG to build the rest of the graph
596 std::unique_ptr<MachineGadgetGraph> Graph) const {
597 NodeSet ElimNodes{*Graph};
598 EdgeSet ElimEdges{*Graph};
600 elimMitigatedEdgesAndNodes(*Graph, ElimEdges, ElimNodes);
602 Graph->NumFences = 0;
603 Graph->NumGadgets = RemainingGadgets;
605 Graph = GraphBuilder::trim(*Graph, ElimNodes, ElimEdges, 0 /* NumFences */,
608 return Graph;
612 MachineFunction &MF, std::unique_ptr<MachineGadgetGraph> Graph) const {
617 Graph = trimMitigatedEdges(std::move(Graph));
619 if (Graph->NumGadgets == 0)
623 EdgeSet CutEdges{*Graph};
624 auto Nodes = std::make_unique<unsigned int[]>(Graph->nodes_size() +
626 auto Edges = std::make_unique<unsigned int[]>(Graph->edges_size());
627 auto EdgeCuts = std::make_unique<int[]>(Graph->edges_size());
628 auto EdgeValues = std::make_unique<int[]>(Graph->edges_size());
629 for (const Node &N : Graph->nodes()) {
630 Nodes[Graph->getNodeIndex(N)] = Graph->getEdgeIndex(*N.edges_begin());
632 Nodes[Graph->nodes_size()] = Graph->edges_size(); // terminator node
633 for (const Edge &E : Graph->edges()) {
634 Edges[Graph->getEdgeIndex(E)] = Graph->getNodeIndex(*E.getDest());
635 EdgeValues[Graph->getEdgeIndex(E)] = E.getValue();
637 OptimizeCut(Nodes.get(), Graph->nodes_size(), Edges.get(), EdgeValues.get(),
638 EdgeCuts.get(), Graph->edges_size());
639 for (int I = 0; I < Graph->edges_size(); ++I)
646 FencesInserted += insertFences(MF, *Graph, CutEdges);
650 Graph = GraphBuilder::trim(*Graph, NodeSet{*Graph}, CutEdges);
657 MachineFunction &MF, std::unique_ptr<MachineGadgetGraph> Graph) const {
660 if (Graph->NumFences > 0) {
662 Graph = trimMitigatedEdges(std::move(Graph));
666 if (Graph->NumGadgets == 0)
670 EdgeSet CutEdges{*Graph};
674 for (const Edge &E : Graph->edges())
686 for (const Node &N : Graph->nodes()) {
715 int FencesInserted = insertFences(MF, *Graph, CutEdges);