Jlm
Loading...
Searching...
No Matches
jlm
hls
opt
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
6
#include <
jlm/hls/opt/IOBarrierRemoval.hpp
>
7
#include <
jlm/llvm/ir/operators/IOBarrier.hpp
>
8
#include <
jlm/rvsdg/region.hpp
>
9
#include <
jlm/rvsdg/RvsdgModule.hpp
>
10
#include <
jlm/rvsdg/structural-node.hpp
>
11
12
namespace
jlm::hls
13
{
14
15
IOBarrierRemoval::~IOBarrierRemoval
()
noexcept
=
default
;
16
17
void
18
IOBarrierRemoval
::Run(rvsdg::
RvsdgModule
& module, util::
StatisticsCollector
&)
19
{
20
RemoveIOBarrierFromRegion(module.Rvsdg().GetRootRegion());
21
}
22
23
void
24
IOBarrierRemoval::RemoveIOBarrierFromRegion
(
rvsdg::Region
& region)
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
{
33
RemoveIOBarrierFromRegion
(*
structuralNode
->subregion(
n
));
34
}
35
}
36
37
// Render all IOBarrier nodes dead
38
if
(
rvsdg::is<llvm::IOBarrierOperation>
(&node))
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
}
IOBarrierRemoval.hpp
IOBarrier.hpp
jlm::hls::IOBarrierRemoval
Removes all IOBarrier nodes from the RVSDG.
Definition
IOBarrierRemoval.hpp:30
jlm::hls::IOBarrierRemoval::RemoveIOBarrierFromRegion
static void RemoveIOBarrierFromRegion(rvsdg::Region ®ion)
Definition
IOBarrierRemoval.cpp:24
jlm::hls::IOBarrierRemoval::~IOBarrierRemoval
~IOBarrierRemoval() noexcept override
jlm::rvsdg::Region
Represent acyclic RVSDG subgraphs.
Definition
region.hpp:213
jlm::rvsdg::Region::prune
void prune(bool recursive)
Definition
region.cpp:326
jlm::rvsdg::Region::Nodes
NodeRange Nodes() noexcept
Definition
region.hpp:375
jlm::rvsdg::RvsdgModule
Definition
RvsdgModule.hpp:20
jlm::rvsdg::StructuralNode
Definition
structural-node.hpp:24
jlm::util::StatisticsCollector
Definition
Statistics.hpp:444
jlm::hls
Definition
FirrtlToVerilogConverter.cpp:18
jlm::rvsdg::TryGetOwnerNode
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.
Definition
node.hpp:872
region.hpp
RvsdgModule.hpp
structural-node.hpp
Generated by
1.9.8