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

daisytuner / sdfglib / 17656823807

11 Sep 2025 08:42PM UTC coverage: 60.447% (+1.1%) from 59.335%
17656823807

Pull #219

github

web-flow
Merge d5416236f into 6c1992b40
Pull Request #219: stdlib Library Nodes and ConstantNodes

460 of 1635 new or added lines in 81 files covered. (28.13%)

93 existing lines in 35 files now uncovered.

9385 of 15526 relevant lines covered (60.45%)

107.21 hits per line

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

81.25
/src/passes/dataflow/dead_data_elimination.cpp
1
#include "sdfg/passes/dataflow/dead_data_elimination.h"
2

3
#include "sdfg/analysis/data_dependency_analysis.h"
4

5
namespace sdfg {
6
namespace passes {
7

8
DeadDataElimination::DeadDataElimination() : Pass() {};
13✔
9

10
std::string DeadDataElimination::name() { return "DeadDataElimination"; };
×
11

12
bool DeadDataElimination::run_pass(builder::StructuredSDFGBuilder& builder, analysis::AnalysisManager& analysis_manager) {
20✔
13
    bool applied = false;
20✔
14

15
    auto& sdfg = builder.subject();
20✔
16
    auto& users = analysis_manager.get<analysis::Users>();
20✔
17
    auto& data_dependency_analysis = analysis_manager.get<analysis::DataDependencyAnalysis>();
20✔
18

19
    // Eliminate dead code, i.e., never read
20
    std::unordered_set<std::string> dead;
20✔
21
    for (auto& name : sdfg.containers()) {
47✔
22
        if (!sdfg.is_transient(name)) {
27✔
23
            continue;
10✔
24
        }
25
        if (!dynamic_cast<const types::Scalar*>(&sdfg.type(name))) {
17✔
26
            continue;
×
27
        }
28

29
        if (!users.views(name).empty() || !users.moves(name).empty()) {
17✔
30
            continue;
×
31
        }
32
        if (users.reads(name).empty() && users.writes(name).empty()) {
17✔
33
            dead.insert(name);
3✔
34
            applied = true;
3✔
35
            continue;
3✔
36
        }
37

38
        // Writes without reads
39
        auto raws = data_dependency_analysis.definitions(name);
14✔
40
        for (auto set : raws) {
42✔
41
            if (set.second.size() > 0) {
28✔
42
                continue;
21✔
43
            }
44

45
            auto write = set.first;
7✔
46
            if (auto transition = dynamic_cast<structured_control_flow::Transition*>(write->element())) {
7✔
47
                transition->assignments().erase(symbolic::symbol(name));
6✔
48
                applied = true;
6✔
49
            } else if (auto access_node = dynamic_cast<data_flow::AccessNode*>(write->element())) {
7✔
50
                auto graph = write->parent();
1✔
51

52
                auto& src = (*graph->in_edges(*access_node).begin()).src();
1✔
53
                if (auto tasklet = dynamic_cast<data_flow::Tasklet*>(&src)) {
1✔
54
                    auto& block = dynamic_cast<structured_control_flow::Block&>(*graph->get_parent());
1✔
55
                    builder.clear_node(block, *tasklet);
1✔
56
                    applied = true;
1✔
57
                } else if (auto library_node = dynamic_cast<data_flow::LibraryNode*>(&src)) {
1✔
NEW
58
                    if (!library_node->side_effect()) {
×
NEW
59
                        auto& block = dynamic_cast<structured_control_flow::Block&>(*graph->get_parent());
×
NEW
60
                        builder.clear_node(block, *library_node);
×
NEW
61
                        applied = true;
×
NEW
62
                    }
×
UNCOV
63
                }
×
64
            }
1✔
65
        }
28✔
66
    }
14✔
67

68
    for (auto& name : dead) {
23✔
69
        builder.remove_container(name);
3✔
70
    }
71

72
    return applied;
20✔
73
};
20✔
74

75
} // namespace passes
76
} // 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