24 if (rvsdg::is<const rvsdg::BitType>(deq_call->
input(2)->
Type()))
27 buffer_capacity = constant->Representation().to_int();
33 for (
size_t i = 0; i < deq_call->
ninputs(); ++i)
43 for (
size_t i = 0; i < enq_call->
ninputs(); ++i)
57 const auto & graph = rm.
Rvsdg();
59 if (rootRegion->numNodes() != 1)
61 throw std::logic_error(
"Root should have only one node now");
64 const auto lambda =
dynamic_cast<rvsdg::LambdaNode *
>(rootRegion->Nodes().begin().ptr());
67 throw std::logic_error(
"Node needs to be a lambda");
72 if (stream_enqs.empty())
77 std::vector<rvsdg::SimpleNode *> enq_calls, deq_calls;
78 std::unordered_set<rvsdg::Output *> visited;
79 for (
auto stream_enq : stream_enqs)
85 for (
auto stream_deq : stream_deqs)
92 for (
auto & enq_call : enq_calls)
95 for (
auto & deq_call : deq_calls)
98 if (*enq_constant == *deq_constant)
101 deq_calls.erase(std::find(deq_calls.begin(), deq_calls.end(), deq_call));
109 dne.
Run(*lambda->subregion(), statisticsCollector);
111 std::vector<rvsdg::LambdaNode::ContextVar> remove_vars(stream_enqs);
112 remove_vars.insert(remove_vars.cend(), stream_deqs.begin(), stream_deqs.end());
114 for (
auto cv : remove_vars)
119 lambda->PruneLambdaInputs();
static std::vector< jlm::rvsdg::Output * > create(jlm::rvsdg::Output &value, size_t capacity, bool pass_through=false)
void Run(rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
~StreamConversion() noexcept override
void Run(rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
Region & GetRootRegion() const noexcept
rvsdg::Region * region() const noexcept
size_t ninputs() const noexcept
size_t noutputs() const noexcept
void divert_users(jlm::rvsdg::Output *new_origin)
NodeInput * input(size_t index) const noexcept
NodeOutput * output(size_t index) const noexcept
void trace_function_calls(rvsdg::Output *output, std::vector< rvsdg::SimpleNode * > &calls, std::unordered_set< rvsdg::Output * > &visited)
void ConnectStreamBuffer(rvsdg::SimpleNode *enq_call, rvsdg::SimpleNode *deq_call)
rvsdg::Output * route_to_region_rhls(rvsdg::Region *target, rvsdg::Output *out)
const llvm::IntegerConstantOperation * trace_constant(const rvsdg::Output *dst)
static void stream_conv(rvsdg::RvsdgModule &rm)
const int DefaultBufferCapacity
std::vector< rvsdg::LambdaNode::ContextVar > find_function_arguments(const rvsdg::LambdaNode *lambda, std::string name_contains)
static void remove(Node *node)
@ State
Designate a state type.