Jlm
Loading...
Searching...
No Matches
json-hls.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2021 David Metz <david.c.metz@ntnu.no>
3 * See COPYING for terms of redistribution.
4 */
5
8
9namespace jlm::hls
10{
11
12std::string
14{
15 std::ostringstream json;
16 const auto & ln = *get_hls_lambda(rm);
17 auto function_name = dynamic_cast<llvm::LlvmLambdaOperation &>(ln.GetOperation()).name();
19 json << "{\n";
20
21 auto reg_args = get_reg_args(ln);
23
24 json << "\"addr_width\": " << GetPointerSizeInBits() << ",\n";
25 json << "\"arguments\": [";
26 for (size_t i = 0; i < reg_args.size(); ++i)
27 {
28 // don't generate ports for state edges
29 if (reg_args[i]->Type()->Kind() == rvsdg::TypeKind::State)
30 continue;
31 if (i != 0)
32 {
33 json << ", ";
34 }
35 json << JlmSize(reg_args[i]->Type().get());
36 }
37 json << "],\n";
38 json << "\"results\": [";
39 for (size_t i = 0; i < reg_results.size(); ++i)
40 {
41 // don't generate ports for state edges
42 if (reg_results[i]->Type()->Kind() == rvsdg::TypeKind::State)
43 continue;
44 if (i != 0)
45 {
46 json << ", ";
47 }
48 json << JlmSize(reg_results[i]->Type().get());
49 }
50 json << "],\n";
51 // TODO: memory ports
52 auto mem_reqs = get_mem_reqs(ln);
54 json << "\"mem\": [";
55 for (size_t i = 0; i < mem_reqs.size(); ++i)
56 {
57 if (i != 0)
58 {
59 json << ", ";
60 }
61 auto req_bt = std::dynamic_pointer_cast<const BundleType>(mem_reqs[i]->Type());
62 auto resp_bt = std::dynamic_pointer_cast<const BundleType>(mem_resps[i]->Type());
63 auto size = JlmSize(&*resp_bt->get_element_type("data"));
64 auto has_write = req_bt->get_element_type("write") != nullptr;
65 json << "{ \"size\": " << size << ", \"has_write\": " << has_write << "}";
66 }
67 json << "]\n";
68 json << "}\n";
69 return json.str();
70}
71
72} // namespace jlm::hls
std::vector< rvsdg::RegionResult * > get_mem_reqs(const rvsdg::LambdaNode &lambda)
Definition base-hls.hpp:93
std::vector< rvsdg::RegionArgument * > get_reg_args(const rvsdg::LambdaNode &lambda)
Definition base-hls.hpp:112
static int JlmSize(const jlm::rvsdg::Type *type)
Definition base-hls.cpp:110
const rvsdg::LambdaNode * get_hls_lambda(llvm::LlvmRvsdgModule &rm)
Definition base-hls.cpp:136
std::vector< rvsdg::RegionResult * > get_reg_results(const rvsdg::LambdaNode &lambda)
Definition base-hls.hpp:130
std::vector< rvsdg::RegionArgument * > get_mem_resps(const rvsdg::LambdaNode &lambda)
Definition base-hls.hpp:75
static std::string get_base_file_name(const llvm::LlvmRvsdgModule &rm)
Definition base-hls.cpp:151
std::string GetText(llvm::LlvmRvsdgModule &rm) override
Definition json-hls.cpp:13
size_t GetPointerSizeInBits()
Definition hls.cpp:396
@ State
Designate a state type.
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.
Definition node.hpp:872