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

daisytuner / sdfglib / 15238257521

25 May 2025 01:14PM UTC coverage: 60.342% (-0.1%) from 60.473%
15238257521

push

github

web-flow
Merge pull request #31 from daisytuner/exception-handling

Exception handling

18 of 60 new or added lines in 17 files covered. (30.0%)

1 existing line in 1 file now uncovered.

8052 of 13344 relevant lines covered (60.34%)

102.27 hits per line

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

95.74
/src/transformations/loop_tiling.cpp
1
#include "sdfg/transformations/loop_tiling.h"
2

3
#include "sdfg/analysis/data_parallelism_analysis.h"
4
#include "sdfg/builder/structured_sdfg_builder.h"
5
#include "sdfg/deepcopy/structured_sdfg_deep_copy.h"
6
#include "sdfg/passes/structured_control_flow/dead_cfg_elimination.h"
7
#include "sdfg/passes/structured_control_flow/sequence_fusion.h"
8

9
namespace sdfg {
10
namespace transformations {
11

12
LoopTiling::LoopTiling(structured_control_flow::Sequence& parent,
2✔
13
                       structured_control_flow::For& loop, size_t tile_size)
14
    : parent_(parent), loop_(loop), tile_size_(tile_size) {
2✔
15
    if (tile_size <= 1) {
2✔
NEW
16
        throw InvalidSDFGException("LoopTiling: Tile size must be greater than 1");
×
17
    }
18
};
2✔
19

20
std::string LoopTiling::name() { return "LoopTiling"; };
×
21

22
bool LoopTiling::can_be_applied(Schedule& schedule) {
2✔
23
    // Criterion contiguous loop
24
    return analysis::DataParallelismAnalysis::is_contiguous(this->loop_);
2✔
25
};
26

27
void LoopTiling::apply(Schedule& schedule) {
2✔
28
    auto& builder = schedule.builder();
2✔
29
    auto& sdfg = builder.subject();
2✔
30

31
    auto indvar = loop_.indvar();
2✔
32
    auto outer_indvar_str = builder.find_new_name(indvar->get_name() + "_tile");
2✔
33
    builder.add_container(outer_indvar_str, sdfg.type(loop_.indvar()->get_name()));
2✔
34
    auto outer_indvar = symbolic::symbol(outer_indvar_str);
2✔
35

36
    auto tile_size = symbolic::integer(this->tile_size_);
2✔
37

38
    auto& outer_body = loop_.root();
2✔
39

40
    loop_.indvar() = outer_indvar;
2✔
41
    loop_.condition() = symbolic::subs(loop_.condition(), indvar, outer_indvar);
2✔
42
    loop_.update() = symbolic::subs(loop_.update(), indvar, outer_indvar);
2✔
43
    loop_.update() = symbolic::add(outer_indvar, tile_size);
2✔
44

45
    auto inner_indvar = indvar;
2✔
46
    auto inner_init = outer_indvar;
2✔
47
    auto inner_condition_tile = symbolic::Lt(inner_indvar, symbolic::add(outer_indvar, tile_size));
2✔
48
    auto inner_condition_base = symbolic::subs(loop_.condition(), outer_indvar, inner_indvar);
2✔
49
    auto inner_condition = symbolic::And(inner_condition_tile, inner_condition_base);
2✔
50
    auto inner_update = symbolic::add(inner_indvar, symbolic::integer(1));
2✔
51

52
    // Add new loop with original body
53
    auto& tmp_root = builder.add_sequence_before(parent_, loop_).first;
2✔
54
    auto& inner_loop =
2✔
55
        builder.add_for(tmp_root, inner_indvar, inner_condition, inner_init, inner_update);
2✔
56

57
    deepcopy::StructuredSDFGDeepCopy copies(builder, inner_loop.root(), outer_body);
2✔
58
    copies.copy();
2✔
59

60
    builder.clear_sequence(outer_body);
2✔
61

62
    deepcopy::StructuredSDFGDeepCopy copies2(builder, outer_body, tmp_root);
2✔
63
    copies2.copy();
2✔
64

65
    builder.remove_child(parent_, tmp_root);
2✔
66

67
    auto& analysis_manager = schedule.analysis_manager();
2✔
68
    analysis_manager.invalidate_all();
2✔
69

70
    passes::SequenceFusion sf_pass;
2✔
71
    passes::DeadCFGElimination dce_pass;
2✔
72
    bool applies = false;
2✔
73
    do {
2✔
74
        applies = false;
4✔
75
        applies |= dce_pass.run(schedule.builder(), analysis_manager);
4✔
76
        applies |= sf_pass.run(schedule.builder(), analysis_manager);
4✔
77
    } while (applies);
4✔
78
};
2✔
79

80
}  // namespace transformations
81
}  // 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