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

daisytuner / sdfglib / 20764569418

06 Jan 2026 10:50PM UTC coverage: 62.168% (+21.4%) from 40.764%
20764569418

push

github

web-flow
Merge pull request #433 from daisytuner/clang-coverage

updates clang coverage flags

14988 of 24109 relevant lines covered (62.17%)

88.57 hits per line

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

91.38
/src/passes/dataflow/trivial_array_elimination.cpp
1
#include "sdfg/passes/dataflow/trivial_array_elimination.h"
2

3
#include "sdfg/analysis/users.h"
4
#include "sdfg/types/utils.h"
5

6
namespace sdfg {
7
namespace passes {
8

9
TrivialArrayElimination::TrivialArrayElimination()
10
    : Pass() {
6✔
11

12
      };
6✔
13

14
std::string TrivialArrayElimination::name() { return "TrivialArrayElimination"; };
×
15

16
bool TrivialArrayElimination::
17
    run_pass(builder::StructuredSDFGBuilder& builder, analysis::AnalysisManager& analysis_manager) {
6✔
18
    bool applied = false;
6✔
19

20
    auto& sdfg = builder.subject();
6✔
21
    auto& users = analysis_manager.get<analysis::Users>();
6✔
22
    for (auto& name : sdfg.containers()) {
12✔
23
        // Criterion: Only transients
24
        if (!sdfg.is_transient(name)) {
12✔
25
            continue;
×
26
        }
×
27
        if (users.num_moves(name) > 0 || users.num_views(name) > 0) {
12✔
28
            continue;
×
29
        }
×
30

31
        // Criterion: Data type must be or contain arrays
32
        std::unique_ptr<types::IType> type = sdfg.type(name).clone();
12✔
33
        uint depth = 0;
12✔
34
        bool has_trivial_dimension = false;
12✔
35
        while (auto atype = dynamic_cast<const types::Array*>(type.get())) {
20✔
36
            if (symbolic::eq(atype->num_elements(), symbolic::one())) {
14✔
37
                has_trivial_dimension = true;
6✔
38
                break;
6✔
39
            }
6✔
40
            type = atype->element_type().clone();
8✔
41
            depth++;
8✔
42
        }
8✔
43

44
        if (!has_trivial_dimension) {
12✔
45
            continue;
6✔
46
        }
6✔
47

48
        // Construct new type
49
        auto atype = static_cast<const types::Array*>(type.get());
6✔
50
        std::unique_ptr<types::IType> inner_type = atype->element_type().clone();
6✔
51
        std::unique_ptr<types::IType> new_type = types::recombine_array_type(sdfg.type(name), depth, *inner_type.get());
6✔
52

53
        // Replace data type
54
        builder.change_type(name, *new_type.get());
6✔
55

56
        // Replace all reads
57
        for (auto& user : users.reads(name)) {
6✔
58
            auto access_node = dynamic_cast<data_flow::AccessNode*>(user->element());
3✔
59
            assert(access_node != nullptr && "Expected AccessNode");
3✔
60

61
            auto& graph = access_node->get_parent();
3✔
62
            for (auto& oedge : graph.out_edges(*access_node)) {
3✔
63
                auto subset = oedge.subset();
3✔
64
                subset.erase(subset.begin() + depth);
3✔
65
                oedge.set_subset(subset);
3✔
66
                oedge.set_base_type(*new_type);
3✔
67
            }
3✔
68
        }
3✔
69
        // Replace all writes
70
        for (auto& user : users.writes(name)) {
6✔
71
            auto access_node = dynamic_cast<data_flow::AccessNode*>(user->element());
3✔
72
            assert(access_node != nullptr && "Expected AccessNode");
3✔
73

74
            auto& graph = access_node->get_parent();
3✔
75
            for (auto& iedge : graph.in_edges(*access_node)) {
3✔
76
                auto subset = iedge.subset();
3✔
77
                subset.erase(subset.begin() + depth);
3✔
78
                iedge.set_subset(subset);
3✔
79
                iedge.set_base_type(*new_type);
3✔
80
            }
3✔
81
        }
3✔
82

83
        applied = true;
6✔
84
    }
6✔
85

86
    return applied;
6✔
87
};
6✔
88

89
} // namespace passes
90
} // 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

© 2026 Coveralls, Inc