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

daisytuner / sdfglib / 15827874660

23 Jun 2025 03:03PM UTC coverage: 64.193% (+0.4%) from 63.824%
15827874660

push

github

web-flow
Merge pull request #100 from daisytuner/transformations

new definition of map and adapts transformations

148 of 194 new or added lines in 13 files covered. (76.29%)

45 existing lines in 4 files now uncovered.

8193 of 12763 relevant lines covered (64.19%)

136.04 hits per line

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

87.5
/src/passes/structured_control_flow/for2map.cpp
1
#include "sdfg/passes/structured_control_flow/for2map.h"
2

3
#include "sdfg/analysis/assumptions_analysis.h"
4
#include "sdfg/analysis/data_dependency_analysis.h"
5
#include "sdfg/analysis/loop_analysis.h"
6
#include "sdfg/analysis/scope_analysis.h"
7
#include "sdfg/analysis/users.h"
8
#include "sdfg/passes/pipeline.h"
9

10
namespace sdfg {
11
namespace passes {
12

13
For2Map::For2Map(builder::StructuredSDFGBuilder& builder,
8✔
14
                 analysis::AnalysisManager& analysis_manager)
15
    : visitor::StructuredSDFGVisitor(builder, analysis_manager) {
8✔
16

17
      };
8✔
18

19
bool For2Map::can_be_applied(structured_control_flow::For& for_stmt,
8✔
20
                             analysis::AnalysisManager& analysis_manager) {
21
    // Criterion: loop must be data-parallel w.r.t containers
22
    auto& data_dependency_analysis = analysis_manager.get<analysis::DataDependencyAnalysis>();
8✔
23
    auto dependencies = data_dependency_analysis.dependencies(for_stmt);
8✔
24

25
    // a. No true dependencies (RAW) between iterations
26
    for (auto& dep : dependencies) {
9✔
27
        if (dep.second == analysis::LoopCarriedDependency::LOOP_CARRIED_DEPENDENCY_READ_WRITE) {
1✔
28
            return false;
×
29
        }
30
    }
31

32
    // b. False dependencies (WAW) are limited to loop-local variables
33
    auto& users = analysis_manager.get<analysis::Users>();
8✔
34
    auto locals = users.locals(for_stmt.root());
8✔
35
    for (auto& dep : dependencies) {
9✔
36
        auto& container = dep.first;
1✔
37
        if (locals.find(container) == locals.end()) {
1✔
38
            return false;
×
39
        }
40
    }
41

42
    // c. indvar not used after for
43
    if (locals.find(for_stmt.indvar()->get_name()) != locals.end()) {
8✔
NEW
44
        return false;
×
45
    }
46

47
    return true;
8✔
48
}
8✔
49

50
void For2Map::apply(structured_control_flow::For& for_stmt, builder::StructuredSDFGBuilder& builder,
8✔
51
                    analysis::AnalysisManager& analysis_manager) {
52
    auto& scope_analysis = analysis_manager.get<analysis::ScopeAnalysis>();
8✔
53
    auto parent =
8✔
54
        static_cast<structured_control_flow::Sequence*>(scope_analysis.parent_scope(&for_stmt));
8✔
55

56
    // convert for to map
57
    builder.convert_for(*parent, for_stmt);
8✔
58

59
    analysis_manager.invalidate_all();
8✔
60
}
8✔
61

62
bool For2Map::accept(structured_control_flow::Sequence& parent,
8✔
63
                     structured_control_flow::For& node) {
64
    if (!this->can_be_applied(node, analysis_manager_)) {
8✔
UNCOV
65
        return false;
×
66
    }
67

68
    this->apply(node, builder_, analysis_manager_);
8✔
69
    return true;
8✔
70
}
8✔
71

72
}  // namespace passes
73
}  // 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