Jlm
Loading...
Searching...
No Matches
memstate-conv.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
7#include <jlm/hls/ir/hls.hpp>
10
11namespace jlm::hls
12{
13
15
16void
18{
19 ConvertMemoryStateSplitsInRegion(module.Rvsdg().GetRootRegion());
20}
21
22void
30
31void
33{
34 for (auto & node : region.Nodes())
35 {
36 // Handle innermost regions first
37 if (const auto structuralNode = dynamic_cast<rvsdg::StructuralNode *>(&node))
38 {
39 for (auto & subregion : structuralNode->Subregions())
40 {
42 }
43 }
44
45 // Replace split nodes with fork nodes
48 {
49 JLM_ASSERT(node.ninputs() == 1);
50 auto results = ForkOperation::create(node.noutputs(), *node.input(0)->origin());
51 divert_users(&node, results);
52 }
53 }
54
55 // Prune dead nodes
56 region.prune(false);
57}
58
59} // namespace jlm::hls
static jlm::util::StatisticsCollector statisticsCollector
static std::vector< jlm::rvsdg::Output * > create(size_t nalternatives, jlm::rvsdg::Output &value, bool isConstant=false)
Definition hls.hpp:161
~MemoryStateSplitConversion() noexcept override
static void CreateAndRun(rvsdg::RvsdgModule &module, util::StatisticsCollector &statisticsCollector)
void Run(rvsdg::RvsdgModule &module, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
static void ConvertMemoryStateSplitsInRegion(rvsdg::Region &region)
Represent acyclic RVSDG subgraphs.
Definition region.hpp:213
void prune(bool recursive)
Definition region.cpp:326
NodeRange Nodes() noexcept
Definition region.hpp:375
#define JLM_ASSERT(x)
Definition common.hpp:16
static void divert_users(jlm::rvsdg::Output *output, Context &ctx)
Definition cne.cpp:504
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.
Definition node.hpp:872