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

daisytuner / sdfglib / 20241896885

15 Dec 2025 05:44PM UTC coverage: 40.075% (-0.2%) from 40.251%
20241896885

Pull #392

github

web-flow
Merge 1719a4ffa into e5e8aa90d
Pull Request #392: refactors passes to improve performance

13609 of 43928 branches covered (30.98%)

Branch coverage included in aggregate %.

26 of 47 new or added lines in 3 files covered. (55.32%)

51 existing lines in 6 files now uncovered.

11621 of 19029 relevant lines covered (61.07%)

92.92 hits per line

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

2.67
/src/passes/pipeline.cpp
1
#include "sdfg/passes/pipeline.h"
2

3
#include "sdfg/passes/code_motion/block_hoisting.h"
4
#include "sdfg/passes/code_motion/block_sorting.h"
5
#include "sdfg/passes/dataflow/tasklet_fusion.h"
6
#include "sdfg/passes/dataflow/trivial_reference_conversion.h"
7
#include "sdfg/passes/schedules/expansion_pass.h"
8

9
namespace sdfg {
10
namespace passes {
11

12
Pipeline::Pipeline(const std::string& name)
2✔
13
    : Pass(), name_(name) {
2!
14

15
      };
1✔
16

UNCOV
17
std::string Pipeline::name() { return this->name_; };
×
18

19
size_t Pipeline::size() const { return this->passes_.size(); };
1✔
20

21
bool Pipeline::run(builder::SDFGBuilder& builder) {
×
22
    bool applied = false;
×
23

24
    bool applied_pipeline;
25
    do {
×
26
        applied_pipeline = false;
×
27
        for (auto& pass : this->passes_) {
×
28
            bool applied_pass = false;
×
29
            do {
×
30
                applied_pass = pass->run(builder);
×
31
                applied_pipeline |= applied_pass;
×
32
            } while (applied_pass);
×
33
        }
34
        applied |= applied_pipeline;
×
35
    } while (applied_pipeline);
×
36

37
    return applied;
×
38
};
39

40
bool Pipeline::run(builder::StructuredSDFGBuilder& builder, analysis::AnalysisManager& analysis_manager) {
×
41
    bool applied = false;
×
42
    bool applied_pipeline;
43
    do {
×
44
        applied_pipeline = false;
×
45
        for (auto& pass : this->passes_) {
×
46
            bool applied_pass = false;
×
47
            do {
×
48
                applied_pass = pass->run(builder, analysis_manager);
×
49
                applied_pipeline |= applied_pass;
×
50
            } while (applied_pass);
×
51
        }
52
        applied |= applied_pipeline;
×
53
    } while (applied_pipeline);
×
54

55
    return applied;
×
56
};
57

NEW
58
Pipeline Pipeline::dataflow_simplification() {
×
NEW
59
    Pipeline p("DataflowSimplification");
×
60

NEW
61
    p.register_pass<BlockFusionPass>();
×
NEW
62
    p.register_pass<TaskletFusionPass>();
×
NEW
63
    p.register_pass<SequenceFusion>();
×
64

NEW
65
    return p;
×
NEW
66
};
×
67

NEW
68
Pipeline Pipeline::symbolic_simplification() {
×
NEW
69
    Pipeline p("SymbolicSimplification");
×
70

NEW
71
    p.register_pass<SymbolPropagation>();
×
72

NEW
73
    return p;
×
NEW
74
};
×
75

NEW
76
Pipeline Pipeline::dead_code_elimination() {
×
NEW
77
    Pipeline p("DeadCodeElimination");
×
78

NEW
79
    p.register_pass<DeadCFGElimination>();
×
NEW
80
    p.register_pass<DeadDataElimination>();
×
81

NEW
82
    return p;
×
NEW
83
};
×
84

UNCOV
85
Pipeline Pipeline::expression_combine() {
×
UNCOV
86
    Pipeline p("ExpressionCombine");
×
87

UNCOV
88
    p.register_pass<SymbolPropagation>();
×
UNCOV
89
    p.register_pass<ConstantPropagation>();
×
UNCOV
90
    p.register_pass<DeadDataElimination>();
×
UNCOV
91
    p.register_pass<SymbolEvolution>();
×
UNCOV
92
    p.register_pass<TaskletFusionPass>();
×
93

UNCOV
94
    return p;
×
UNCOV
95
};
×
96

UNCOV
97
Pipeline Pipeline::memlet_combine() {
×
UNCOV
98
    Pipeline p("MemletCombine");
×
99

UNCOV
100
    p.register_pass<ReferencePropagation>();
×
UNCOV
101
    p.register_pass<DeadReferenceElimination>();
×
UNCOV
102
    p.register_pass<ByteReferenceElimination>();
×
UNCOV
103
    p.register_pass<TrivialReferenceConversionPass>();
×
104

UNCOV
105
    return p;
×
UNCOV
106
};
×
107

UNCOV
108
Pipeline Pipeline::controlflow_simplification() {
×
UNCOV
109
    Pipeline p("ControlFlowSimplification");
×
110

UNCOV
111
    p.register_pass<DeadCFGElimination>();
×
UNCOV
112
    p.register_pass<BlockFusionPass>();
×
UNCOV
113
    p.register_pass<SequenceFusion>();
×
UNCOV
114
    p.register_pass<ConditionEliminationPass>();
×
115

UNCOV
116
    return p;
×
UNCOV
117
};
×
118

119
Pipeline Pipeline::code_motion() {
×
120
    Pipeline p("CodeMotion");
×
121

122
    p.register_pass<BlockHoistingPass>();
×
123
    p.register_pass<BlockSortingPass>();
×
124

125
    return p;
×
126
};
×
127

UNCOV
128
Pipeline Pipeline::data_parallelism() {
×
UNCOV
129
    Pipeline p("DataParallelism");
×
130

UNCOV
131
    p.register_pass<For2MapPass>();
×
UNCOV
132
    p.register_pass<SymbolPropagation>();
×
UNCOV
133
    p.register_pass<DeadDataElimination>();
×
134

UNCOV
135
    return p;
×
UNCOV
136
};
×
137

138
Pipeline Pipeline::memory() {
×
139
    Pipeline p("Memory");
×
140

141
    p.register_pass<AllocationManagementPass>();
×
142

143
    return p;
×
144
};
×
145

UNCOV
146
Pipeline Pipeline::expansion() {
×
UNCOV
147
    Pipeline p("Expansion");
×
148

UNCOV
149
    p.register_pass<ExpansionPass>();
×
150

UNCOV
151
    return p;
×
UNCOV
152
};
×
153

154
} // namespace passes
155
} // 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