LCOV - code coverage report
Current view: top level - src/optimizer - acyclicgraph.hpp (source / functions) Hit Total Coverage
Test: flower-f.info Lines: 1 5 20.0 %
Date: 2022-06-10 00:44:15 Functions: 1 2 50.0 %

          Line data    Source code
       1             : #ifndef DAG_HPP
       2             : #define DAG_HPP
       3             : 
       4             : #include <vector>
       5             : #include <utility>
       6             : #include "common/exprtype.hpp"
       7             : #include "common/tables.hpp"
       8             : #include "common/poliz.hpp"
       9             : 
      10             : struct DAGRow {
      11             :     type_t type;
      12             :     IdentTable * ident;
      13             :     op_t opcode;
      14             :     DAGRow * lvar;
      15             :     DAGRow * rvar;
      16             :     DAGRow * prev;
      17             :     bool assigned;
      18             : 
      19             :     static std::vector<DAGRow *> created;
      20             : 
      21           0 :     DAGRow(): type(_NONE_), ident(nullptr), opcode((op_t) NONE), lvar(nullptr), 
      22           0 :               rvar(nullptr), prev(nullptr), assigned(false) {
      23           0 :                   created.push_back(this);
      24           0 :               };
      25             :     void decompose(POLIZ & p, std::vector<DAGRow *> * asd);
      26             :     bool isLast(void) const;
      27             :     type_t updateType(std::vector<type_t> * typeOnStack = nullptr);
      28             : 
      29             :     friend bool operator==(DAGRow & a, DAGRow & b);
      30             :     DAGRow & operator=(const DAGRow & dr);
      31             :     DAGRow(const DAGRow & dr);
      32             : 
      33             : };
      34             : 
      35             : /*
      36             :  * #N OP #1OP #2OP VAR
      37             :  */
      38             : class DirectedAcyclicGraph {
      39             :     std::vector<DAGRow *> rows;
      40             :     POLIZ stashed;
      41             :     bool verbose;
      42             : public:
      43          58 :     explicit DirectedAcyclicGraph(bool v): verbose(v) {};
      44             :     void make(POLIZ p);
      45             :     POLIZ decompose(std::vector<type_t> * typeOnStack);
      46             :     void updateTypes(void);
      47             : 
      48             :     void commonSubExpr(IdentTable * IT);
      49             : 
      50             :     void stash(POLIZ & p);
      51             : 
      52             :     std::pair<std::pair<DAGRow *, DAGRow *>, int> findCopies(
      53             :                 DAGRow * left, DAGRow * right, int a, int b);
      54             : 
      55             :     ~DirectedAcyclicGraph();
      56             : };
      57             : 
      58             : #endif

Generated by: LCOV version 1.14