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

daisytuner / sdfglib / 20770413849

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

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

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

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

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

10
namespace sdfg {
11
namespace symbolic {
12

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

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

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

26
    isl_ctx* ctx = isl_ctx_alloc();
18✔
27
    isl_options_set_on_error(ctx, ISL_ON_ERROR_CONTINUE);
18✔
28

29
    isl_map* map_1 = isl_map_read_from_str(ctx, map_1_str.c_str());
18✔
30
    isl_map* map_2 = isl_map_read_from_str(ctx, map_2_str.c_str());
18✔
31
    if (!map_1 || !map_2) {
18✔
32
        if (map_1) {
×
33
            isl_map_free(map_1);
×
34
        }
×
35
        if (map_2) {
×
36
            isl_map_free(map_2);
×
37
        }
×
38
        isl_ctx_free(ctx);
×
39
        return false;
×
40
    }
×
41
    isl_space* params_map1 = isl_space_params(isl_map_get_space(map_1));
18✔
42
    isl_space* params_map2 = isl_space_params(isl_map_get_space(map_2));
18✔
43

44
    // Align parameters carefully:
45
    isl_space* unified_params = isl_space_align_params(isl_space_copy(params_map1), isl_space_copy(params_map2));
18✔
46

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

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

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

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

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

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

70
    return subset;
18✔
71
}
18✔
72

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

79
    std::string map_1_str = expression_to_map_str(expr1_delinearized, assums1);
18✔
80
    std::string map_2_str = expression_to_map_str(expr2_delinearized, assums2);
18✔
81

82
    isl_ctx* ctx = isl_ctx_alloc();
18✔
83
    isl_options_set_on_error(ctx, ISL_ON_ERROR_CONTINUE);
18✔
84

85
    isl_map* map_1 = isl_map_read_from_str(ctx, map_1_str.c_str());
18✔
86
    isl_map* map_2 = isl_map_read_from_str(ctx, map_2_str.c_str());
18✔
87
    if (!map_1 || !map_2) {
18✔
88
        if (map_1) isl_map_free(map_1);
×
89
        if (map_2) isl_map_free(map_2);
×
90
        isl_ctx_free(ctx);
×
91
        return false;
×
92
    }
×
93

94
    isl_space* params_map1 = isl_space_params(isl_map_get_space(map_1));
18✔
95
    isl_space* params_map2 = isl_space_params(isl_map_get_space(map_2));
18✔
96

97
    // Align parameters carefully:
98
    isl_space* unified_params = isl_space_align_params(isl_space_copy(params_map1), isl_space_copy(params_map2));
18✔
99

100
    // Align maps to unified params:
101
    isl_map* aligned_map_1 = isl_map_align_params(map_1, isl_space_copy(unified_params));
18✔
102
    isl_map* aligned_map_2 = isl_map_align_params(map_2, isl_space_copy(unified_params));
18✔
103

104
    // Remove parameters explicitly (project them out)
105
    aligned_map_1 = isl_map_project_out(aligned_map_1, isl_dim_param, 0, isl_map_dim(aligned_map_1, isl_dim_param));
18✔
106
    aligned_map_2 = isl_map_project_out(aligned_map_2, isl_dim_param, 0, isl_map_dim(aligned_map_2, isl_dim_param));
18✔
107

108
    canonicalize_map_dims(aligned_map_1, "in_", "out_");
18✔
109
    canonicalize_map_dims(aligned_map_2, "in_", "out_");
18✔
110

111
    isl_set* set_1 = isl_map_range(aligned_map_1);
18✔
112
    isl_set* set_2 = isl_map_range(aligned_map_2);
18✔
113

114
    bool disjoint = isl_set_is_disjoint(set_1, set_2) == isl_bool_true;
18✔
115

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

123
    return disjoint;
18✔
124
}
18✔
125

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