18 HandleRegion(module.Rvsdg().GetRootRegion());
27 redundantBufferElimination.
Run(module, statisticsCollector);
33 for (
auto & node : region.
Nodes())
38 for (
auto & subregion : structuralNode->Subregions())
45 auto bufferOperation =
dynamic_cast<const BufferOperation *
>(&node.GetOperation());
49 if (!rvsdg::is<llvm::MemoryStateType>(node.input(0)->Type()))
52 if (bufferOperation->IsPassThrough())
61 node.output(0)->divert_users(result);
73 if (rvsdg::IsOwnerNodeOperation<LoadOperation>(output))
76 if (rvsdg::IsOwnerNodeOperation<LocalLoadOperation>(output))
79 if (rvsdg::IsOwnerNodeOperation<StoreOperation>(output))
82 if (rvsdg::IsOwnerNodeOperation<LocalStoreOperation>(output))
85 auto [forkNode, forkOperation] = rvsdg::TryGetSimpleNodeAndOptionalOp<ForkOperation>(output);
86 if (forkNode && forkOperation)
89 auto [branchNode, branchOperation] =
90 rvsdg::TryGetSimpleNodeAndOptionalOp<BranchOperation>(output);
91 if (branchNode && branchOperation)
static std::vector< jlm::rvsdg::Output * > create(jlm::rvsdg::Output &value, size_t capacity, bool pass_through=false)
static void HandleRegion(rvsdg::Region ®ion)
~RedundantBufferElimination() noexcept override
static bool CanTraceToLoadOrStore(const rvsdg::Output &output)
static void CreateAndRun(rvsdg::RvsdgModule &module, util::StatisticsCollector &statisticsCollector)
void Run(rvsdg::RvsdgModule &module, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
const std::shared_ptr< const rvsdg::Type > & Type() const noexcept
Represent acyclic RVSDG subgraphs.
void prune(bool recursive)
NodeRange Nodes() noexcept