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

daisytuner / sdfglib / 19582090818

21 Nov 2025 08:04PM UTC coverage: 62.046% (-0.06%) from 62.105%
19582090818

push

github

web-flow
Merge pull request #356 from daisytuner/dynamic-opt-report

Dynamic opt report

5 of 28 new or added lines in 3 files covered. (17.86%)

3 existing lines in 2 files now uncovered.

11146 of 17964 relevant lines covered (62.05%)

111.89 hits per line

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

0.0
/src/optimization_report/optimization_report.cpp
1
#include "sdfg/optimization_report/optimization_report.h"
2

3
#include <nlohmann/json_fwd.hpp>
4
#include <sdfg/analysis/analysis.h>
5
#include <sdfg/analysis/loop_analysis.h>
6
#include "sdfg/serializer/json_serializer.h"
7
#include "sdfg/structured_control_flow/map.h"
8
#include "sdfg/structured_sdfg.h"
9

10

11
namespace sdfg {
12

13
OptimizationReport::OptimizationReport(StructuredSDFG& sdfg, bool aggregate)
×
14
    : sdfg_(sdfg), report_(nlohmann::json::object()), aggregate_(aggregate) {
×
15
    analysis::AnalysisManager manager(sdfg);
×
16
    auto& loop_analysis = manager.get<analysis::LoopAnalysis>();
×
17

18
    // Add outermost loops
19
    report_["regions"] = nlohmann::json::array();
×
20
    report_["type"] = aggregate ? "aggregate" : "detailed";
×
21

22
    for (int i = 0; i < loop_analysis.outermost_loops().size(); i++) {
×
23
        nlohmann::json loop_json;
×
24
        auto loop = loop_analysis.outermost_loops().at(i);
×
25
        loop_json["loopnest_index"] = i;
×
26
        loop_json["element_id"] = loop->element_id();
×
27
        serializer::JSONSerializer serializer;
×
28
        nlohmann::json debug_info;
×
29
        serializer.debug_info_to_json(debug_info, loop->debug_info());
×
30
        loop_json["debug_info"] = debug_info;
×
31

32
        if (auto while_loop = dynamic_cast<const structured_control_flow::While*>(loop)) {
×
33
            loop_json["type"] = "while";
×
34
        } else if (auto for_loop = dynamic_cast<const structured_control_flow::For*>(loop)) {
×
35
            loop_json["type"] = "for";
×
36
        } else if (auto map = dynamic_cast<const structured_control_flow::Map*>(loop)) {
×
37
            loop_json["type"] = "map";
×
38
        }
×
39
        report_["regions"].push_back(loop_json);
×
40
    }
×
41
}
×
42

43

44
nlohmann::json OptimizationReport::get_report() { return report_; }
×
45

46
void OptimizationReport::add_pass_entry(const std::string& pass_name, long duration, bool applied) {
×
47
    /* if (!aggregate_) {
48
        if (!report_.contains("passes")) {
49
            report_["passes"] = nlohmann::json::array();
50
        }
51
        nlohmann::json pass_json;
52
        pass_json["name"] = pass_name;
53
        pass_json["duration_us"] = duration;
54
        pass_json["applied"] = applied;
55
        report_["passes"].push_back(pass_json);
56
    } else {
57
        if (!report_.contains("passes")) {
58
            report_["passes"] = nlohmann::json::object();
59
        }
60
        if (!report_["passes"].contains(pass_name)) {
61
            report_["passes"][pass_name] = nlohmann::json::object();
62
            report_["passes"][pass_name]["count"] = 0;
63
            report_["passes"][pass_name]["total_duration_us"] = 0;
64
        }
65
        report_["passes"][pass_name]["count"] = report_["passes"][pass_name]["count"].get<int>() + 1;
66
        report_["passes"][pass_name]["total_duration_us"] =
67
    report_["passes"][pass_name]["total_duration_us"].get<long>() + duration;
68
    } */
69
}
×
70

71
void OptimizationReport::add_transformation_entry(
×
72
    int loopnest_index, const std::string& transformation_name, long apply_duration, const TransformReport& report
73
) {
NEW
74
    auto& rep = report_["regions"].at(loopnest_index
×
NEW
75
    )["transformations"][transformation_name] = nlohmann::json::object();
×
76

NEW
77
    rep["possible"] = report.possible;
×
NEW
78
    rep["applied"] = report.applied;
×
NEW
79
    if (!report.reason.empty()) {
×
NEW
80
        rep["reason"] = report.reason;
×
NEW
81
    }
×
82

83
    /* if (!aggregate_) {
84
        if (!report_.contains("transformations")) {
85
            report_["transformations"] = nlohmann::json::array();
86
        }
87
        nlohmann::json transformation_json;
88
        transformation_json["name"] = transformation_name;
89
        transformation_json["duration_us"] = apply_duration;
90
        transformation_json["description"] = transformation_desc;
91
        report_["transformations"].push_back(transformation_json);
92
    } else {
93
        if (!report_.contains("transformations")) {
94
            report_["transformations"] = nlohmann::json::object();
95
        }
96
        if (!report_["transformations"].contains(transformation_name)) {
97
            report_["transformations"][transformation_name] = nlohmann::json::object();
98
            report_["transformations"][transformation_name]["count"] = 0;
99
            report_["transformations"][transformation_name]["total_duration_us"] = 0;
100
        }
101
        report_["transformations"][transformation_name]["count"] =
102
    report_["transformations"][transformation_name]["count"].get<int>() + 1;
103
        report_["transformations"][transformation_name]["total_duration_us"] =
104
    report_["transformations"][transformation_name]["total_duration_us"].get<long>() + apply_duration;
105
    } */
106
}
×
107

NEW
108
void OptimizationReport::add_target_test(size_t loopnest_index, const std::string& target_name, bool success) {
×
109
    if (!report_["regions"].at(loopnest_index).contains("targets")) {
×
110
        report_["regions"].at(loopnest_index)["targets"] = nlohmann::json::object();
×
111
    }
×
NEW
112
    report_["regions"].at(loopnest_index)["targets"][target_name] = success;
×
113
}
×
114

115
} // 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