• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

daisytuner / sdfglib / 15373564831

01 Jun 2025 09:41AM UTC coverage: 58.528% (-0.2%) from 58.751%
15373564831

push

github

web-flow
Merge pull request #49 from daisytuner/missing-containers

Debugging of missing containers bug

62 of 81 new or added lines in 2 files covered. (76.54%)

13 existing lines in 1 file now uncovered.

8205 of 14019 relevant lines covered (58.53%)

109.64 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/passes/dataflow/dead_reference_elimination.cpp
1
#include "sdfg/passes/dataflow/dead_reference_elimination.h"
2

3
namespace sdfg {
4
namespace passes {
5

UNCOV
6
DeadReferenceElimination::DeadReferenceElimination()
×
NEW
7
    : Pass() {
×
8

UNCOV
9
      };
×
10

11
std::string DeadReferenceElimination::name() { return "DeadReferenceElimination"; };
×
12

UNCOV
13
bool DeadReferenceElimination::run_pass(builder::StructuredSDFGBuilder& builder,
×
14
                                        analysis::AnalysisManager& analysis_manager) {
UNCOV
15
    bool applied = false;
×
16

UNCOV
17
    auto& sdfg = builder.subject();
×
UNCOV
18
    auto& users = analysis_manager.get<analysis::Users>();
×
19

NEW
20
    std::list<std::string> to_delete;
×
UNCOV
21
    for (auto& name : sdfg.containers()) {
×
UNCOV
22
        if (!sdfg.is_transient(name)) {
×
UNCOV
23
            continue;
×
24
        }
UNCOV
25
        if (!dynamic_cast<const types::Pointer*>(&sdfg.type(name))) {
×
UNCOV
26
            continue;
×
27
        }
28
        // Requirement: Pointer is only assigned
NEW
29
        auto reads = users.reads(name);
×
NEW
30
        auto writes = users.writes(name);
×
NEW
31
        if (reads.size() > 0 || writes.size() > 0) {
×
NEW
32
            continue;
×
33
        }
NEW
34
        auto views = users.views(name);
×
35
        auto moves = users.moves(name);
×
NEW
36
        if (views.size() > 0) {
×
37
            continue;
×
38
        }
39

40
        bool assigned = false;
×
41
        for (auto& move : moves) {
×
42
            auto access_node = dynamic_cast<data_flow::AccessNode*>(move->element());
×
43
            auto& graph = dynamic_cast<data_flow::DataFlowGraph&>(access_node->get_parent());
×
44
            auto& edge = *graph.in_edges(*access_node).begin();
×
45
            if (edge.dst_conn() == "void") {
×
46
                assigned = true;
×
47
                break;
×
48
            }
49
        }
50
        if (assigned) {
×
51
            continue;
×
52
        }
53

54
        for (auto& move : moves) {
×
55
            auto access_node = dynamic_cast<data_flow::AccessNode*>(move->element());
×
56
            auto& graph = dynamic_cast<data_flow::DataFlowGraph&>(access_node->get_parent());
×
57
            auto& block = dynamic_cast<structured_control_flow::Block&>(*graph.get_parent());
×
58
            builder.clear_node(block, *access_node);
×
59
            applied = true;
×
60
        }
61

NEW
62
        to_delete.push_back(name);
×
NEW
63
    }
×
NEW
64
    for (auto& name : to_delete) {
×
65
        builder.remove_container(name);
×
66
    }
67

UNCOV
68
    return applied;
×
UNCOV
69
};
×
70

71
}  // namespace passes
72
}  // namespace sdfg
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc