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

daisytuner / docc / 22020750556

14 Feb 2026 04:38PM UTC coverage: 64.828% (-1.5%) from 66.315%
22020750556

Pull #524

github

web-flow
Merge 2784aa264 into 9d01cacd5
Pull Request #524: Native Tensor Support - Step 2: Use tensor types on memlets of tensor nodes

245 of 570 new or added lines in 24 files covered. (42.98%)

458 existing lines in 18 files now uncovered.

23080 of 35602 relevant lines covered (64.83%)

371.57 hits per line

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

68.18
/sdfg/src/data_flow/library_nodes/math/tensor/elementwise_ops/div_node.cpp
1
#include "sdfg/data_flow/library_nodes/math/tensor/elementwise_ops/div_node.h"
2

3
#include "sdfg/analysis/analysis.h"
4
#include "sdfg/builder/structured_sdfg_builder.h"
5
#include "sdfg/types/type.h"
6

7
#include "sdfg/analysis/scope_analysis.h"
8

9
namespace sdfg {
10
namespace math {
11
namespace tensor {
12

13
DivNode::DivNode(
14
    size_t element_id,
15
    const DebugInfo& debug_info,
16
    const graph::Vertex vertex,
17
    data_flow::DataFlowGraph& parent,
18
    const std::vector<symbolic::Expression>& shape
19
)
20
    : ElementWiseBinaryNode(element_id, debug_info, vertex, parent, LibraryNodeType_Div, shape) {}
9✔
21

22
bool DivNode::expand_operation(
23
    builder::StructuredSDFGBuilder& builder,
24
    analysis::AnalysisManager& analysis_manager,
25
    structured_control_flow::Sequence& body,
26
    const std::string& input_name_a,
27
    const std::string& input_name_b,
28
    const std::string& output_name,
29
    const types::Tensor& input_type_a,
30
    const types::Tensor& input_type_b,
31
    const types::Tensor& output_type,
32
    const data_flow::Subset& subset
33
) {
6✔
34
    auto& code_block = builder.add_block(body);
6✔
35

36
    bool is_int = types::is_integer(output_type.primitive_type());
6✔
37
    data_flow::TaskletCode opcode;
6✔
38
    if (is_int) {
6✔
39
        // Distinguish between signed and unsigned division
40
        bool is_signed = types::is_signed(output_type.primitive_type());
2✔
41
        opcode = is_signed ? data_flow::TaskletCode::int_sdiv : data_flow::TaskletCode::int_udiv;
2✔
42
    } else {
4✔
43
        opcode = data_flow::TaskletCode::fp_div;
4✔
44
    }
4✔
45
    auto& tasklet = builder.add_tasklet(code_block, opcode, "_out", {"_in1", "_in2"});
6✔
46

47
    auto& output_node = builder.add_access(code_block, output_name);
6✔
48
    builder.add_computational_memlet(code_block, tasklet, "_out", output_node, subset, output_type);
6✔
49

50
    if (builder.subject().exists(input_name_a)) {
6✔
51
        auto& input_node_a = builder.add_access(code_block, input_name_a);
6✔
52
        if (input_type_a.is_scalar()) {
6✔
NEW
53
            builder.add_computational_memlet(code_block, input_node_a, tasklet, "_in1", {}, input_type_a);
×
54
        } else {
6✔
55
            builder.add_computational_memlet(code_block, input_node_a, tasklet, "_in1", subset, input_type_a);
6✔
56
        }
6✔
57
    } else {
6✔
NEW
58
        types::Scalar const_type(input_type_a.primitive_type());
×
NEW
59
        auto& input_node_a = builder.add_constant(code_block, input_name_a, const_type);
×
NEW
60
        builder.add_computational_memlet(code_block, input_node_a, tasklet, "_in1", subset, input_type_a);
×
UNCOV
61
    }
×
62

63
    if (builder.subject().exists(input_name_b)) {
6✔
64
        auto& input_node_b = builder.add_access(code_block, input_name_b);
6✔
65
        if (input_type_b.is_scalar()) {
6✔
NEW
66
            builder.add_computational_memlet(code_block, input_node_b, tasklet, "_in2", {}, input_type_b);
×
67
        } else {
6✔
68
            builder.add_computational_memlet(code_block, input_node_b, tasklet, "_in2", subset, input_type_b);
6✔
69
        }
6✔
70
    } else {
6✔
NEW
71
        types::Scalar const_type(input_type_b.primitive_type());
×
NEW
72
        auto& input_node_b = builder.add_constant(code_block, input_name_b, const_type);
×
NEW
73
        builder.add_computational_memlet(code_block, input_node_b, tasklet, "_in2", subset, input_type_b);
×
UNCOV
74
    }
×
75

76
    return true;
6✔
77
}
6✔
78

79
std::unique_ptr<data_flow::DataFlowNode> DivNode::
80
    clone(size_t element_id, const graph::Vertex vertex, data_flow::DataFlowGraph& parent) const {
×
81
    return std::unique_ptr<
×
82
        data_flow::DataFlowNode>(new DivNode(element_id, this->debug_info(), vertex, parent, this->shape_));
×
83
}
×
84

85
} // namespace tensor
86
} // namespace math
87
} // 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