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

daisytuner / sdfglib / 15796323402

21 Jun 2025 01:45PM UTC coverage: 64.059% (-0.5%) from 64.591%
15796323402

Pull #95

github

web-flow
Merge b3afe6b2e into 37b47b09d
Pull Request #95: Extends Data Dependency Analysis

993 of 1197 new or added lines in 19 files covered. (82.96%)

55 existing lines in 5 files now uncovered.

8058 of 12579 relevant lines covered (64.06%)

150.28 hits per line

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

83.33
/src/symbolic/sets.cpp
1
#include "sdfg/symbolic/sets.h"
2

3
#include <isl/ctx.h>
4
#include <isl/set.h>
5
#include <isl/space.h>
6

7
#include "sdfg/symbolic/utils.h"
8

9
namespace sdfg {
10
namespace symbolic {
11

12
bool is_subset(const MultiExpression& expr1, const MultiExpression& expr2,
18✔
13
               const Assumptions& assums1, const Assumptions& assums2) {
14
    if (expr1.size() == 0 && expr2.size() == 0) {
18✔
NEW
15
        return true;
×
16
    }
17

18
    auto expr1_delinearized = delinearize(expr1, assums1);
18✔
19
    auto expr2_delinearized = delinearize(expr2, assums2);
18✔
20

21
    std::string map_1_str = expression_to_map_str(expr1_delinearized, assums1);
18✔
22
    std::string map_2_str = expression_to_map_str(expr2_delinearized, assums2);
18✔
23

24
    isl_ctx* ctx = isl_ctx_alloc();
18✔
25
    isl_map* map_1 = isl_map_read_from_str(ctx, map_1_str.c_str());
18✔
26
    isl_map* map_2 = isl_map_read_from_str(ctx, map_2_str.c_str());
18✔
27
    if (!map_1 || !map_2) {
18✔
28
        if (map_1) {
×
29
            isl_map_free(map_1);
×
30
        }
×
31
        if (map_2) {
×
32
            isl_map_free(map_2);
×
33
        }
×
34
        isl_ctx_free(ctx);
×
35
        return false;
×
36
    }
37
    isl_space* params_map1 = isl_space_params(isl_map_get_space(map_1));
18✔
38
    isl_space* params_map2 = isl_space_params(isl_map_get_space(map_2));
18✔
39

40
    // Align parameters carefully:
41
    isl_space* unified_params =
18✔
42
        isl_space_align_params(isl_space_copy(params_map1), isl_space_copy(params_map2));
18✔
43

44
    // Align maps to unified params:
45
    isl_map* aligned_map_1 = isl_map_align_params(map_1, isl_space_copy(unified_params));
18✔
46
    isl_map* aligned_map_2 = isl_map_align_params(map_2, isl_space_copy(unified_params));
18✔
47

48
    // Remove parameters explicitly (project them out)
49
    aligned_map_1 = isl_map_project_out(aligned_map_1, isl_dim_param, 0,
18✔
50
                                        isl_map_dim(aligned_map_1, isl_dim_param));
18✔
51
    aligned_map_2 = isl_map_project_out(aligned_map_2, isl_dim_param, 0,
18✔
52
                                        isl_map_dim(aligned_map_2, isl_dim_param));
18✔
53

54
    canonicalize_map_dims(aligned_map_1, "in_", "out_");
18✔
55
    canonicalize_map_dims(aligned_map_2, "in_", "out_");
18✔
56

57
    isl_set* set_1 = isl_map_range(aligned_map_1);
18✔
58
    isl_set* set_2 = isl_map_range(aligned_map_2);
18✔
59

60
    bool subset = isl_set_is_subset(set_1, set_2) == isl_bool_true;
18✔
61

62
    isl_map_free(aligned_map_1);
18✔
63
    isl_map_free(aligned_map_2);
18✔
64
    isl_space_free(unified_params);
18✔
65
    isl_space_free(params_map1);
18✔
66
    isl_space_free(params_map2);
18✔
67
    isl_ctx_free(ctx);
18✔
68

69
    return subset;
18✔
70
}
18✔
71

72
bool is_disjoint(const MultiExpression& expr1, const MultiExpression& expr2,
4✔
73
                 const Assumptions& assums1, const Assumptions& assums2) {
74
    auto expr1_delinearized = delinearize(expr1, assums1);
4✔
75
    auto expr2_delinearized = delinearize(expr2, assums2);
4✔
76

77
    std::string map_1_str = expression_to_map_str(expr1_delinearized, assums1);
4✔
78
    std::string map_2_str = expression_to_map_str(expr2_delinearized, assums2);
4✔
79

80
    isl_ctx* ctx = isl_ctx_alloc();
4✔
81
    isl_map* map_1 = isl_map_read_from_str(ctx, map_1_str.c_str());
4✔
82
    isl_map* map_2 = isl_map_read_from_str(ctx, map_2_str.c_str());
4✔
83
    if (!map_1 || !map_2) {
4✔
NEW
84
        if (map_1) isl_map_free(map_1);
×
NEW
85
        if (map_2) isl_map_free(map_2);
×
86
        isl_ctx_free(ctx);
×
87
        return false;
×
88
    }
89

90
    isl_space* params_map1 = isl_space_params(isl_map_get_space(map_1));
4✔
91
    isl_space* params_map2 = isl_space_params(isl_map_get_space(map_2));
4✔
92

93
    // Align parameters carefully:
94
    isl_space* unified_params =
4✔
95
        isl_space_align_params(isl_space_copy(params_map1), isl_space_copy(params_map2));
4✔
96

97
    // Align maps to unified params:
98
    isl_map* aligned_map_1 = isl_map_align_params(map_1, isl_space_copy(unified_params));
4✔
99
    isl_map* aligned_map_2 = isl_map_align_params(map_2, isl_space_copy(unified_params));
4✔
100

101
    // Remove parameters explicitly (project them out)
102
    aligned_map_1 = isl_map_project_out(aligned_map_1, isl_dim_param, 0,
4✔
103
                                        isl_map_dim(aligned_map_1, isl_dim_param));
4✔
104
    aligned_map_2 = isl_map_project_out(aligned_map_2, isl_dim_param, 0,
4✔
105
                                        isl_map_dim(aligned_map_2, isl_dim_param));
4✔
106

107
    canonicalize_map_dims(aligned_map_1, "in_", "out_");
4✔
108
    canonicalize_map_dims(aligned_map_2, "in_", "out_");
4✔
109

110
    isl_set* set_1 = isl_map_range(aligned_map_1);
4✔
111
    isl_set* set_2 = isl_map_range(aligned_map_2);
4✔
112

113
    bool disjoint = isl_set_is_disjoint(set_1, set_2) == isl_bool_true;
4✔
114

115
    isl_map_free(aligned_map_1);
4✔
116
    isl_map_free(aligned_map_2);
4✔
117
    isl_space_free(unified_params);
4✔
118
    isl_space_free(params_map1);
4✔
119
    isl_space_free(params_map2);
4✔
120
    isl_ctx_free(ctx);
4✔
121

122
    return disjoint;
4✔
123
}
4✔
124

125
}  // namespace symbolic
126
}  // 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