Jlm
Loading...
Searching...
No Matches
IOBarrierRemoval.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2025 Nico Reißmann <nico.reissmann@gmail.com>
3 * See COPYING for terms of redistribution.
4 */
5
11
12namespace jlm::hls
13{
14
16
17void
18IOBarrierRemoval::Run(rvsdg::RvsdgModule & module, util::StatisticsCollector &)
19{
20 RemoveIOBarrierFromRegion(module.Rvsdg().GetRootRegion());
21}
22
23void
25{
26 for (auto & node : region.Nodes())
27 {
28 // Handle subregions first
29 if (const auto structuralNode = dynamic_cast<const rvsdg::StructuralNode *>(&node))
30 {
31 for (size_t n = 0; n < structuralNode->nsubregions(); n++)
32 {
34 }
35 }
36
37 // Render all IOBarrier nodes dead
39 {
40 node.output(0)->divert_users(node.input(0)->origin());
41 }
42 }
43
44 // Remove all dead IOBarrier nodes
45 region.prune(false);
46}
47
48}
Removes all IOBarrier nodes from the RVSDG.
static void RemoveIOBarrierFromRegion(rvsdg::Region &region)
~IOBarrierRemoval() noexcept override
Represent acyclic RVSDG subgraphs.
Definition region.hpp:213
void prune(bool recursive)
Definition region.cpp:326
NodeRange Nodes() noexcept
Definition region.hpp:375
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.
Definition node.hpp:872