From 7c3c11967a1b4f4aca84beaec329731bf0c19c22 Mon Sep 17 00:00:00 2001 From: Nico Reissmann Date: Sat, 18 Jan 2025 14:21:15 +0100 Subject: [PATCH] Replace optimization interface with Transformation interface (#760) This PR replaces the optimization interface with the Transformation interface. Specifically, this PR does the following: 1. Removes the optimization interface in the llvm sublibrary 2. Adds the Transformation interface to the rvsdg sublibrary. 3. Replaces all usages of the optimization interface with the Transformation interface Ultimately, this lifts the concept of an RVSDG transformation to the rvsdg library, enabling other sublibraries, such as the HLS library, to tap into it in the future and set up a coherent transformation pipeline. Moreover, this will enable to lift common transformations, such as dead node elimination, to the RVSDG library level. Ultimately, this will help to remove code duplication that is currently present in the code base, i.e., DNE clones in the LLVM and HLS sublibraries. --- jlm/hls/backend/rvsdg2rhls/rvsdg2rhls.cpp | 30 +++--- jlm/hls/opt/cne.cpp | 8 +- jlm/hls/opt/cne.hpp | 13 +-- jlm/llvm/Makefile.sub | 4 - jlm/llvm/opt/DeadNodeElimination.cpp | 6 +- jlm/llvm/opt/DeadNodeElimination.hpp | 14 +-- jlm/llvm/opt/InvariantValueRedirection.cpp | 8 +- jlm/llvm/opt/InvariantValueRedirection.hpp | 7 +- jlm/llvm/opt/OptimizationSequence.cpp | 63 ----------- jlm/llvm/opt/OptimizationSequence.hpp | 47 -------- jlm/llvm/opt/RvsdgTreePrinter.cpp | 6 +- jlm/llvm/opt/RvsdgTreePrinter.hpp | 8 +- .../AgnosticMemoryNodeProvider.cpp | 8 +- .../AgnosticMemoryNodeProvider.hpp | 6 +- jlm/llvm/opt/alias-analyses/AliasAnalysis.hpp | 9 +- jlm/llvm/opt/alias-analyses/Andersen.cpp | 10 +- jlm/llvm/opt/alias-analyses/Andersen.hpp | 5 +- .../EliminatedMemoryNodeProvider.hpp | 4 +- .../alias-analyses/MemoryNodeEliminator.hpp | 10 +- .../opt/alias-analyses/MemoryNodeProvider.hpp | 2 +- .../opt/alias-analyses/MemoryStateEncoder.cpp | 6 +- .../opt/alias-analyses/MemoryStateEncoder.hpp | 3 +- jlm/llvm/opt/alias-analyses/Optimization.cpp | 4 +- jlm/llvm/opt/alias-analyses/Optimization.hpp | 6 +- .../RegionAwareMemoryNodeProvider.cpp | 17 +-- .../RegionAwareMemoryNodeProvider.hpp | 10 +- jlm/llvm/opt/alias-analyses/Steensgaard.cpp | 6 +- jlm/llvm/opt/alias-analyses/Steensgaard.hpp | 2 +- .../TopDownMemoryNodeEliminator.cpp | 15 +-- .../TopDownMemoryNodeEliminator.hpp | 12 +-- jlm/llvm/opt/cne.cpp | 8 +- jlm/llvm/opt/cne.hpp | 10 +- jlm/llvm/opt/inlining.cpp | 8 +- jlm/llvm/opt/inlining.hpp | 10 +- jlm/llvm/opt/inversion.cpp | 12 +-- jlm/llvm/opt/inversion.hpp | 10 +- jlm/llvm/opt/optimization.cpp | 14 --- jlm/llvm/opt/optimization.hpp | 45 -------- jlm/llvm/opt/pull.cpp | 12 +-- jlm/llvm/opt/pull.hpp | 12 +-- jlm/llvm/opt/push.cpp | 12 +-- jlm/llvm/opt/push.hpp | 10 +- jlm/llvm/opt/reduction.cpp | 13 +-- jlm/llvm/opt/reduction.hpp | 9 +- jlm/llvm/opt/unroll.cpp | 4 +- jlm/llvm/opt/unroll.hpp | 8 +- jlm/rvsdg/Makefile.sub | 2 + jlm/rvsdg/Transformation.cpp | 64 +++++++++++ jlm/rvsdg/Transformation.hpp | 100 ++++++++++++++++++ jlm/tooling/Command.cpp | 20 ++-- jlm/tooling/Command.hpp | 19 ++-- jlm/tooling/CommandLine.hpp | 1 - .../opt/InvariantValueRedirectionTests.cpp | 2 +- tests/jlm/llvm/opt/NodeReductionTests.cpp | 2 +- tests/jlm/llvm/opt/RvsdgTreePrinterTests.cpp | 2 +- .../jlm/llvm/opt/TestDeadNodeElimination.cpp | 2 +- .../opt/alias-analyses/TestPointsToGraph.cpp | 2 +- tests/jlm/llvm/opt/test-cne.cpp | 18 ++-- tests/jlm/llvm/opt/test-inlining.cpp | 4 +- tests/jlm/llvm/opt/test-inversion.cpp | 4 +- tests/jlm/llvm/opt/test-pull.cpp | 2 +- tests/jlm/llvm/opt/test-push.cpp | 4 +- tests/jlm/llvm/opt/test-unroll.cpp | 6 +- 63 files changed, 394 insertions(+), 406 deletions(-) delete mode 100644 jlm/llvm/opt/OptimizationSequence.cpp delete mode 100644 jlm/llvm/opt/OptimizationSequence.hpp delete mode 100644 jlm/llvm/opt/optimization.cpp delete mode 100644 jlm/llvm/opt/optimization.hpp create mode 100644 jlm/rvsdg/Transformation.cpp create mode 100644 jlm/rvsdg/Transformation.hpp diff --git a/jlm/hls/backend/rvsdg2rhls/rvsdg2rhls.cpp b/jlm/hls/backend/rvsdg2rhls/rvsdg2rhls.cpp index 622fc5d3e..93a76b634 100644 --- a/jlm/hls/backend/rvsdg2rhls/rvsdg2rhls.cpp +++ b/jlm/hls/backend/rvsdg2rhls/rvsdg2rhls.cpp @@ -62,12 +62,12 @@ split_opt(llvm::RvsdgModule & rm) jlm::llvm::tginversion tgi; jlm::llvm::NodeReduction red; jlm::util::StatisticsCollector statisticsCollector; - tgi.run(rm, statisticsCollector); - dne.run(rm, statisticsCollector); - cne.run(rm, statisticsCollector); - ivr.run(rm, statisticsCollector); - red.run(rm, statisticsCollector); - dne.run(rm, statisticsCollector); + tgi.Run(rm, statisticsCollector); + dne.Run(rm, statisticsCollector); + cne.Run(rm, statisticsCollector); + ivr.Run(rm, statisticsCollector); + red.Run(rm, statisticsCollector); + dne.Run(rm, statisticsCollector); } void @@ -79,13 +79,13 @@ pre_opt(jlm::llvm::RvsdgModule & rm) jlm::llvm::InvariantValueRedirection ivr; jlm::llvm::tginversion tgi; jlm::util::StatisticsCollector statisticsCollector; - tgi.run(rm, statisticsCollector); - dne.run(rm, statisticsCollector); - cne.run(rm, statisticsCollector); - ivr.run(rm, statisticsCollector); - dne.run(rm, statisticsCollector); - cne.run(rm, statisticsCollector); - dne.run(rm, statisticsCollector); + tgi.Run(rm, statisticsCollector); + dne.Run(rm, statisticsCollector); + cne.Run(rm, statisticsCollector); + ivr.Run(rm, statisticsCollector); + dne.Run(rm, statisticsCollector); + cne.Run(rm, statisticsCollector); + dne.Run(rm, statisticsCollector); } void @@ -421,7 +421,7 @@ rvsdg2rhls(llvm::RvsdgModule & rhls, util::StatisticsCollector & collector) merge_gamma(rhls); llvm::DeadNodeElimination llvmDne; - llvmDne.run(rhls, collector); + llvmDne.Run(rhls, collector); mem_sep_argument(rhls); remove_unused_state(rhls); @@ -430,7 +430,7 @@ rvsdg2rhls(llvm::RvsdgModule & rhls, util::StatisticsCollector & collector) ConvertGammaNodes(rhls); ConvertThetaNodes(rhls); hls::cne hlsCne; - hlsCne.run(rhls, collector); + hlsCne.Run(rhls, collector); // rhls optimization dne(rhls); alloca_conv(rhls); diff --git a/jlm/hls/opt/cne.cpp b/jlm/hls/opt/cne.cpp index c9e084027..4195f9e42 100644 --- a/jlm/hls/opt/cne.cpp +++ b/jlm/hls/opt/cne.cpp @@ -615,12 +615,12 @@ divert(rvsdg::Region * region, cnectx & ctx) } static void -cne(jlm::llvm::RvsdgModule & rm, util::StatisticsCollector & statisticsCollector) +cne(rvsdg::RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) { - auto & graph = rm.Rvsdg(); + auto & graph = rvsdgModule.Rvsdg(); cnectx ctx; - auto statistics = cnestat::Create(rm.SourceFileName()); + auto statistics = cnestat::Create(rvsdgModule.SourceFilePath().value()); statistics->start_mark_stat(graph); mark(&graph.GetRootRegion(), ctx); @@ -639,7 +639,7 @@ cne::~cne() {} void -cne::run(llvm::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) +cne::Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) { hls::cne(module, statisticsCollector); } diff --git a/jlm/hls/opt/cne.hpp b/jlm/hls/opt/cne.hpp index 929476d82..db069e0c3 100644 --- a/jlm/hls/opt/cne.hpp +++ b/jlm/hls/opt/cne.hpp @@ -6,12 +6,7 @@ #ifndef JLM_HLS_OPT_CNE_HPP #define JLM_HLS_OPT_CNE_HPP -#include - -namespace jlm::llvm -{ -class RvsdgModule; -} +#include namespace jlm::hls { @@ -25,13 +20,13 @@ namespace jlm::hls * This is mainly a copy of the CNE optimization in the LLVM backend with the addition of support * for the hls::loop_op. */ -class cne final : public llvm::optimization +class cne final : public rvsdg::Transformation { public: virtual ~cne(); - virtual void - run(llvm::RvsdgModule & module, jlm::util::StatisticsCollector & statisticsCollector) override; + void + Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override; }; } diff --git a/jlm/llvm/Makefile.sub b/jlm/llvm/Makefile.sub index 5e802cfac..ec979bb5b 100644 --- a/jlm/llvm/Makefile.sub +++ b/jlm/llvm/Makefile.sub @@ -59,8 +59,6 @@ libllvm_SOURCES = \ jlm/llvm/opt/inlining.cpp \ jlm/llvm/opt/InvariantValueRedirection.cpp \ jlm/llvm/opt/inversion.cpp \ - jlm/llvm/opt/optimization.cpp \ - jlm/llvm/opt/OptimizationSequence.cpp \ jlm/llvm/opt/pull.cpp \ jlm/llvm/opt/push.cpp \ jlm/llvm/opt/reduction.cpp \ @@ -91,11 +89,9 @@ libllvm_HEADERS = \ jlm/llvm/opt/alias-analyses/PointsToGraph.hpp \ jlm/llvm/opt/alias-analyses/AliasAnalysis.hpp \ jlm/llvm/opt/pull.hpp \ - jlm/llvm/opt/optimization.hpp \ jlm/llvm/opt/reduction.hpp \ jlm/llvm/opt/InvariantValueRedirection.hpp \ jlm/llvm/opt/inversion.hpp \ - jlm/llvm/opt/OptimizationSequence.hpp \ jlm/llvm/opt/RvsdgTreePrinter.hpp \ jlm/llvm/frontend/LlvmModuleConversion.hpp \ jlm/llvm/frontend/LlvmTypeConversion.hpp \ diff --git a/jlm/llvm/opt/DeadNodeElimination.cpp b/jlm/llvm/opt/DeadNodeElimination.cpp index 752b2346b..a22f75e06 100644 --- a/jlm/llvm/opt/DeadNodeElimination.cpp +++ b/jlm/llvm/opt/DeadNodeElimination.cpp @@ -156,12 +156,14 @@ DeadNodeElimination::run(rvsdg::Region & region) } void -DeadNodeElimination::run(RvsdgModule & module, jlm::util::StatisticsCollector & statisticsCollector) +DeadNodeElimination::Run( + rvsdg::RvsdgModule & module, + util::StatisticsCollector & statisticsCollector) { Context_ = Context::Create(); auto & rvsdg = module.Rvsdg(); - auto statistics = Statistics::Create(module.SourceFileName()); + auto statistics = Statistics::Create(module.SourceFilePath().value()); statistics->StartMarkStatistics(rvsdg); MarkRegion(rvsdg.GetRootRegion()); statistics->StopMarkStatistics(); diff --git a/jlm/llvm/opt/DeadNodeElimination.hpp b/jlm/llvm/opt/DeadNodeElimination.hpp index 4c21b907b..6c2484c5f 100644 --- a/jlm/llvm/opt/DeadNodeElimination.hpp +++ b/jlm/llvm/opt/DeadNodeElimination.hpp @@ -6,14 +6,16 @@ #ifndef JLM_LLVM_OPT_DEADNODEELIMINATION_HPP #define JLM_LLVM_OPT_DEADNODEELIMINATION_HPP -#include -#include -#include +#include namespace jlm::rvsdg { class GammaNode; +class Graph; +class output; +class StructuralNode; class ThetaNode; +class Region; } namespace jlm::llvm @@ -34,8 +36,6 @@ namespace phi class node; } -class RvsdgModule; - /** \brief Dead Node Elimination Optimization * * Dead Node Elimination removes all nodes that do not contribute to the result of a computation. A @@ -51,7 +51,7 @@ class RvsdgModule; * * Please see TestDeadNodeElimination.cpp for Dead Node Elimination examples. */ -class DeadNodeElimination final : public optimization +class DeadNodeElimination final : public rvsdg::Transformation { class Context; class Statistics; @@ -75,7 +75,7 @@ class DeadNodeElimination final : public optimization run(rvsdg::Region & region); void - run(RvsdgModule & module, jlm::util::StatisticsCollector & statisticsCollector) override; + Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override; private: void diff --git a/jlm/llvm/opt/InvariantValueRedirection.cpp b/jlm/llvm/opt/InvariantValueRedirection.cpp index abb9a64d9..0d5bf5db4 100644 --- a/jlm/llvm/opt/InvariantValueRedirection.cpp +++ b/jlm/llvm/opt/InvariantValueRedirection.cpp @@ -47,14 +47,14 @@ class InvariantValueRedirection::Statistics final : public util::Statistics InvariantValueRedirection::~InvariantValueRedirection() = default; void -InvariantValueRedirection::run( - RvsdgModule & rvsdgModule, +InvariantValueRedirection::Run( + rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) { - auto statistics = Statistics::Create(rvsdgModule.SourceFileName()); + auto statistics = Statistics::Create(module.SourceFilePath().value()); statistics->Start(); - RedirectInRootRegion(rvsdgModule.Rvsdg()); + RedirectInRootRegion(module.Rvsdg()); statistics->Stop(); statisticsCollector.CollectDemandedStatistics(std::move(statistics)); diff --git a/jlm/llvm/opt/InvariantValueRedirection.hpp b/jlm/llvm/opt/InvariantValueRedirection.hpp index 3942d69ac..50e8d6883 100644 --- a/jlm/llvm/opt/InvariantValueRedirection.hpp +++ b/jlm/llvm/opt/InvariantValueRedirection.hpp @@ -6,7 +6,7 @@ #ifndef JLM_LLVM_OPT_INVARIANTVALUEREDIRECTION_HPP #define JLM_LLVM_OPT_INVARIANTVALUEREDIRECTION_HPP -#include +#include namespace jlm::rvsdg { @@ -21,7 +21,6 @@ namespace jlm::llvm { class CallNode; -class RvsdgModule; /** \brief Invariant Value Redirection Optimization * @@ -50,7 +49,7 @@ class RvsdgModule; * for call nodes works only on non-recursive direct calls as IVR needs to inspect the lambda body * in order to determine whether a value is simply routed through the lambda. */ -class InvariantValueRedirection final : public optimization +class InvariantValueRedirection final : public rvsdg::Transformation { class Statistics; @@ -58,7 +57,7 @@ class InvariantValueRedirection final : public optimization ~InvariantValueRedirection() override; void - run(RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) override; + Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override; private: static void diff --git a/jlm/llvm/opt/OptimizationSequence.cpp b/jlm/llvm/opt/OptimizationSequence.cpp deleted file mode 100644 index b1ed91153..000000000 --- a/jlm/llvm/opt/OptimizationSequence.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2023 Nico Reißmann - * See COPYING for terms of redistribution. - */ - -#include -#include -#include -#include - -namespace jlm::llvm -{ - -class OptimizationSequence::Statistics final : public util::Statistics -{ -public: - ~Statistics() noexcept override = default; - - explicit Statistics(const util::filepath & sourceFile) - : util::Statistics(Statistics::Id::RvsdgOptimization, sourceFile) - {} - - void - StartMeasuring(const rvsdg::Graph & graph) noexcept - { - AddMeasurement(Label::NumRvsdgNodesBefore, rvsdg::nnodes(&graph.GetRootRegion())); - AddTimer(Label::Timer).start(); - } - - void - EndMeasuring(const rvsdg::Graph & graph) noexcept - { - GetTimer(Label::Timer).stop(); - AddMeasurement(Label::NumRvsdgNodesAfter, rvsdg::nnodes(&graph.GetRootRegion())); - } - - static std::unique_ptr - Create(const util::filepath & sourceFile) - { - return std::make_unique(sourceFile); - } -}; - -OptimizationSequence::~OptimizationSequence() noexcept = default; - -void -OptimizationSequence::run( - RvsdgModule & rvsdgModule, - util::StatisticsCollector & statisticsCollector) -{ - auto statistics = Statistics::Create(rvsdgModule.SourceFileName()); - statistics->StartMeasuring(rvsdgModule.Rvsdg()); - - for (const auto & optimization : Optimizations_) - { - optimization->run(rvsdgModule, statisticsCollector); - } - - statistics->EndMeasuring(rvsdgModule.Rvsdg()); - statisticsCollector.CollectDemandedStatistics(std::move(statistics)); -} - -} diff --git a/jlm/llvm/opt/OptimizationSequence.hpp b/jlm/llvm/opt/OptimizationSequence.hpp deleted file mode 100644 index 428ee1629..000000000 --- a/jlm/llvm/opt/OptimizationSequence.hpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2023 Nico Reißmann - * See COPYING for terms of redistribution. - */ - -#ifndef JLM_LLVM_OPT_OPTIMIZATIONSEQUENCE_HPP -#define JLM_LLVM_OPT_OPTIMIZATIONSEQUENCE_HPP - -#include - -namespace jlm::llvm -{ - -/** - * Sequentially applies a list of optimizations to an Rvsdg. - */ -class OptimizationSequence final : public optimization -{ -public: - class Statistics; - - ~OptimizationSequence() noexcept override; - - explicit OptimizationSequence(std::vector optimizations) - : Optimizations_(std::move(optimizations)) - {} - - void - run(RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) override; - - static void - CreateAndRun( - RvsdgModule & rvsdgModule, - util::StatisticsCollector & statisticsCollector, - std::vector optimizations) - { - OptimizationSequence sequentialApplication(std::move(optimizations)); - sequentialApplication.run(rvsdgModule, statisticsCollector); - } - -private: - std::vector Optimizations_; -}; - -} - -#endif // JLM_LLVM_OPT_OPTIMIZATIONSEQUENCE_HPP diff --git a/jlm/llvm/opt/RvsdgTreePrinter.cpp b/jlm/llvm/opt/RvsdgTreePrinter.cpp index 5c7e146cf..a2622d8c1 100644 --- a/jlm/llvm/opt/RvsdgTreePrinter.cpp +++ b/jlm/llvm/opt/RvsdgTreePrinter.cpp @@ -45,9 +45,11 @@ class RvsdgTreePrinter::Statistics final : public util::Statistics RvsdgTreePrinter::~RvsdgTreePrinter() noexcept = default; void -RvsdgTreePrinter::run(RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) +RvsdgTreePrinter::Run( + rvsdg::RvsdgModule & rvsdgModule, + util::StatisticsCollector & statisticsCollector) { - auto statistics = Statistics::Create(rvsdgModule.SourceFileName()); + auto statistics = Statistics::Create(rvsdgModule.SourceFilePath().value()); statistics->Start(); auto annotationMap = ComputeAnnotationMap(rvsdgModule.Rvsdg()); diff --git a/jlm/llvm/opt/RvsdgTreePrinter.hpp b/jlm/llvm/opt/RvsdgTreePrinter.hpp index 43a6f77bb..3bae07168 100644 --- a/jlm/llvm/opt/RvsdgTreePrinter.hpp +++ b/jlm/llvm/opt/RvsdgTreePrinter.hpp @@ -6,7 +6,7 @@ #ifndef JLM_LLVM_OPT_RVSDGTREEPRINTER_HPP #define JLM_LLVM_OPT_RVSDGTREEPRINTER_HPP -#include +#include #include #include @@ -25,13 +25,11 @@ class StatisticsCollector; namespace jlm::llvm { -class RvsdgModule; - /** \brief RVSDG tree printer debug pass * * Prints an RVSDG tree to a file. */ -class RvsdgTreePrinter final : public optimization +class RvsdgTreePrinter final : public rvsdg::Transformation { class Statistics; @@ -100,7 +98,7 @@ class RvsdgTreePrinter final : public optimization operator=(RvsdgTreePrinter &&) = delete; void - run(RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) override; + Run(rvsdg::RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) override; private: /** diff --git a/jlm/llvm/opt/alias-analyses/AgnosticMemoryNodeProvider.cpp b/jlm/llvm/opt/alias-analyses/AgnosticMemoryNodeProvider.cpp index 40a134882..79dbbb20d 100644 --- a/jlm/llvm/opt/alias-analyses/AgnosticMemoryNodeProvider.cpp +++ b/jlm/llvm/opt/alias-analyses/AgnosticMemoryNodeProvider.cpp @@ -96,12 +96,12 @@ AgnosticMemoryNodeProvider::~AgnosticMemoryNodeProvider() = default; std::unique_ptr AgnosticMemoryNodeProvider::ProvisionMemoryNodes( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph, util::StatisticsCollector & statisticsCollector) { auto statistics = - Statistics::Create(rvsdgModule.SourceFileName(), statisticsCollector, pointsToGraph); + Statistics::Create(rvsdgModule.SourceFilePath().value(), statisticsCollector, pointsToGraph); statistics->StartCollecting(); util::HashSet memoryNodes; @@ -132,7 +132,7 @@ AgnosticMemoryNodeProvider::ProvisionMemoryNodes( std::unique_ptr AgnosticMemoryNodeProvider::Create( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph, util::StatisticsCollector & statisticsCollector) { @@ -142,7 +142,7 @@ AgnosticMemoryNodeProvider::Create( std::unique_ptr AgnosticMemoryNodeProvider::Create( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph) { util::StatisticsCollector statisticsCollector; diff --git a/jlm/llvm/opt/alias-analyses/AgnosticMemoryNodeProvider.hpp b/jlm/llvm/opt/alias-analyses/AgnosticMemoryNodeProvider.hpp index bb01c9893..cd45eba07 100644 --- a/jlm/llvm/opt/alias-analyses/AgnosticMemoryNodeProvider.hpp +++ b/jlm/llvm/opt/alias-analyses/AgnosticMemoryNodeProvider.hpp @@ -47,7 +47,7 @@ class AgnosticMemoryNodeProvider final : public MemoryNodeProvider std::unique_ptr ProvisionMemoryNodes( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph, util::StatisticsCollector & statisticsCollector) override; @@ -62,7 +62,7 @@ class AgnosticMemoryNodeProvider final : public MemoryNodeProvider */ static std::unique_ptr Create( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph, util::StatisticsCollector & statisticsCollector); @@ -75,7 +75,7 @@ class AgnosticMemoryNodeProvider final : public MemoryNodeProvider * @return A new instance of MemoryNodeProvisioning. */ static std::unique_ptr - Create(const RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph); + Create(const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph); }; /** \brief Agnostic memory node provider statistics diff --git a/jlm/llvm/opt/alias-analyses/AliasAnalysis.hpp b/jlm/llvm/opt/alias-analyses/AliasAnalysis.hpp index 1956001dc..189f989f8 100644 --- a/jlm/llvm/opt/alias-analyses/AliasAnalysis.hpp +++ b/jlm/llvm/opt/alias-analyses/AliasAnalysis.hpp @@ -8,6 +8,11 @@ #include +namespace jlm::rvsdg +{ +class RvsdgModule; +} + namespace jlm::util { class StatisticsCollector; @@ -16,8 +21,6 @@ class StatisticsCollector; namespace jlm::llvm { -class RvsdgModule; - namespace aa { @@ -40,7 +43,7 @@ class AliasAnalysis * \return A PointsTo graph. */ virtual std::unique_ptr - Analyze(const RvsdgModule & module, jlm::util::StatisticsCollector & statisticsCollector) = 0; + Analyze(const rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) = 0; }; } diff --git a/jlm/llvm/opt/alias-analyses/Andersen.cpp b/jlm/llvm/opt/alias-analyses/Andersen.cpp index 4a8237bb1..533d04ac9 100644 --- a/jlm/llvm/opt/alias-analyses/Andersen.cpp +++ b/jlm/llvm/opt/alias-analyses/Andersen.cpp @@ -1285,7 +1285,7 @@ Andersen::GetConfiguration() const } void -Andersen::AnalyzeModule(const RvsdgModule & module, Statistics & statistics) +Andersen::AnalyzeModule(const rvsdg::RvsdgModule & module, Statistics & statistics) { Set_ = std::make_unique(); Constraints_ = std::make_unique(*Set_); @@ -1342,9 +1342,11 @@ Andersen::SolveConstraints( } std::unique_ptr -Andersen::Analyze(const RvsdgModule & module, util::StatisticsCollector & statisticsCollector) +Andersen::Analyze( + const rvsdg::RvsdgModule & module, + util::StatisticsCollector & statisticsCollector) { - auto statistics = Statistics::Create(module.SourceFileName()); + auto statistics = Statistics::Create(module.SourceFilePath().value()); statistics->StartAndersenStatistics(module.Rvsdg()); // Check environment variables for debugging flags @@ -1416,7 +1418,7 @@ Andersen::Analyze(const RvsdgModule & module, util::StatisticsCollector & statis // Create a clone of the unsolved pointer object set and constraint set auto workingCopy = copy.second->Clone(); // These statistics will only contain solving data - auto solvingStats = Statistics::Create(module.SourceFileName()); + auto solvingStats = Statistics::Create(module.SourceFilePath().value()); SolveConstraints(*workingCopy.second, config, *solvingStats); solvingStats->AddStatisticsFromSolution(*workingCopy.first); statisticsCollector.CollectDemandedStatistics(std::move(solvingStats)); diff --git a/jlm/llvm/opt/alias-analyses/Andersen.hpp b/jlm/llvm/opt/alias-analyses/Andersen.hpp index b640e715e..6bd7c6449 100644 --- a/jlm/llvm/opt/alias-analyses/Andersen.hpp +++ b/jlm/llvm/opt/alias-analyses/Andersen.hpp @@ -315,7 +315,8 @@ class Andersen final : public AliasAnalysis * @see SetConfiguration to configure settings for the analysis */ std::unique_ptr - Analyze(const RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override; + Analyze(const rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) + override; /** * @brief Shorthand for Analyze, ignoring collecting any statistics. @@ -435,7 +436,7 @@ class Andersen final : public AliasAnalysis * @param statistics the Statistics instance used to track info about the analysis */ void - AnalyzeModule(const RvsdgModule & module, Statistics & statistics); + AnalyzeModule(const rvsdg::RvsdgModule & module, Statistics & statistics); /** * Solves the constraint problem using the techniques and solver specified in the given config. diff --git a/jlm/llvm/opt/alias-analyses/EliminatedMemoryNodeProvider.hpp b/jlm/llvm/opt/alias-analyses/EliminatedMemoryNodeProvider.hpp index d92d2563e..0909318e5 100644 --- a/jlm/llvm/opt/alias-analyses/EliminatedMemoryNodeProvider.hpp +++ b/jlm/llvm/opt/alias-analyses/EliminatedMemoryNodeProvider.hpp @@ -50,7 +50,7 @@ class EliminatedMemoryNodeProvider final : public MemoryNodeProvider std::unique_ptr ProvisionMemoryNodes( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph, util::StatisticsCollector & statisticsCollector) override { @@ -61,7 +61,7 @@ class EliminatedMemoryNodeProvider final : public MemoryNodeProvider static std::unique_ptr Create( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph, util::StatisticsCollector & statisticsCollector) { diff --git a/jlm/llvm/opt/alias-analyses/MemoryNodeEliminator.hpp b/jlm/llvm/opt/alias-analyses/MemoryNodeEliminator.hpp index 494264ece..344ea4381 100644 --- a/jlm/llvm/opt/alias-analyses/MemoryNodeEliminator.hpp +++ b/jlm/llvm/opt/alias-analyses/MemoryNodeEliminator.hpp @@ -8,14 +8,14 @@ #include -namespace jlm::util +namespace jlm::rvsdg { -class StatisticsCollector; +class RvsdgModule; } -namespace jlm::llvm +namespace jlm::util { -class RvsdgModule; +class StatisticsCollector; } namespace jlm::llvm::aa @@ -39,7 +39,7 @@ class MemoryNodeEliminator */ virtual std::unique_ptr EliminateMemoryNodes( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const MemoryNodeProvisioning & seedProvisioning, jlm::util::StatisticsCollector & statisticsCollector) = 0; }; diff --git a/jlm/llvm/opt/alias-analyses/MemoryNodeProvider.hpp b/jlm/llvm/opt/alias-analyses/MemoryNodeProvider.hpp index 8aedf84e3..0efe4812a 100644 --- a/jlm/llvm/opt/alias-analyses/MemoryNodeProvider.hpp +++ b/jlm/llvm/opt/alias-analyses/MemoryNodeProvider.hpp @@ -34,7 +34,7 @@ class MemoryNodeProvider */ virtual std::unique_ptr ProvisionMemoryNodes( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph, jlm::util::StatisticsCollector & statisticsCollector) = 0; }; diff --git a/jlm/llvm/opt/alias-analyses/MemoryStateEncoder.cpp b/jlm/llvm/opt/alias-analyses/MemoryStateEncoder.cpp index 29f508897..22e76ba68 100644 --- a/jlm/llvm/opt/alias-analyses/MemoryStateEncoder.cpp +++ b/jlm/llvm/opt/alias-analyses/MemoryStateEncoder.cpp @@ -463,12 +463,12 @@ MemoryStateEncoder::MemoryStateEncoder() = default; void MemoryStateEncoder::Encode( - RvsdgModule & rvsdgModule, + rvsdg::RvsdgModule & rvsdgModule, const MemoryNodeProvisioning & provisioning, util::StatisticsCollector & statisticsCollector) { Context_ = Context::Create(provisioning); - auto statistics = EncodingStatistics::Create(rvsdgModule.SourceFileName()); + auto statistics = EncodingStatistics::Create(rvsdgModule.SourceFilePath().value()); statistics->Start(rvsdgModule.Rvsdg()); EncodeRegion(rvsdgModule.Rvsdg().GetRootRegion()); @@ -481,7 +481,7 @@ MemoryStateEncoder::Encode( // Remove all nodes that became dead throughout the encoding. DeadNodeElimination deadNodeElimination; - deadNodeElimination.run(rvsdgModule, statisticsCollector); + deadNodeElimination.Run(rvsdgModule, statisticsCollector); } void diff --git a/jlm/llvm/opt/alias-analyses/MemoryStateEncoder.hpp b/jlm/llvm/opt/alias-analyses/MemoryStateEncoder.hpp index 63833aa73..045a2dcef 100644 --- a/jlm/llvm/opt/alias-analyses/MemoryStateEncoder.hpp +++ b/jlm/llvm/opt/alias-analyses/MemoryStateEncoder.hpp @@ -14,6 +14,7 @@ namespace rvsdg class GammaNode; class output; class Region; +class RvsdgModule; class SimpleNode; class StructuralNode; class ThetaNode; @@ -89,7 +90,7 @@ class MemoryStateEncoder final void Encode( - RvsdgModule & rvsdgModule, + rvsdg::RvsdgModule & rvsdgModule, const MemoryNodeProvisioning & provisioning, util::StatisticsCollector & statisticsCollector); diff --git a/jlm/llvm/opt/alias-analyses/Optimization.cpp b/jlm/llvm/opt/alias-analyses/Optimization.cpp index 600398948..eb01e2db6 100644 --- a/jlm/llvm/opt/alias-analyses/Optimization.cpp +++ b/jlm/llvm/opt/alias-analyses/Optimization.cpp @@ -22,8 +22,8 @@ AliasAnalysisStateEncoder:: template void -AliasAnalysisStateEncoder::run( - RvsdgModule & rvsdgModule, +AliasAnalysisStateEncoder::Run( + rvsdg::RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) { AliasAnalysisPass aaPass; diff --git a/jlm/llvm/opt/alias-analyses/Optimization.hpp b/jlm/llvm/opt/alias-analyses/Optimization.hpp index 91a4add66..94467db98 100644 --- a/jlm/llvm/opt/alias-analyses/Optimization.hpp +++ b/jlm/llvm/opt/alias-analyses/Optimization.hpp @@ -9,7 +9,7 @@ #include #include -#include +#include #include @@ -32,7 +32,7 @@ namespace jlm::llvm::aa * @see RegionAwareMemoryNodeProvider */ template -class AliasAnalysisStateEncoder final : public optimization +class AliasAnalysisStateEncoder final : public rvsdg::Transformation { static_assert(std::is_base_of_v); static_assert(std::is_base_of_v); @@ -41,7 +41,7 @@ class AliasAnalysisStateEncoder final : public optimization ~AliasAnalysisStateEncoder() noexcept override; void - run(RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) override; + Run(rvsdg::RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) override; }; } diff --git a/jlm/llvm/opt/alias-analyses/RegionAwareMemoryNodeProvider.cpp b/jlm/llvm/opt/alias-analyses/RegionAwareMemoryNodeProvider.cpp index 564cf8954..aa42a0391 100644 --- a/jlm/llvm/opt/alias-analyses/RegionAwareMemoryNodeProvider.cpp +++ b/jlm/llvm/opt/alias-analyses/RegionAwareMemoryNodeProvider.cpp @@ -35,11 +35,11 @@ class RegionAwareMemoryNodeProvider::Statistics final : public util::Statistics explicit Statistics( const util::StatisticsCollector & statisticsCollector, - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph) : util::Statistics( Statistics::Id::RegionAwareMemoryNodeProvisioning, - rvsdgModule.SourceFileName()), + rvsdgModule.SourceFilePath().value()), StatisticsCollector_(statisticsCollector) { if (!IsDemanded()) @@ -127,7 +127,7 @@ class RegionAwareMemoryNodeProvider::Statistics final : public util::Statistics static std::unique_ptr Create( const util::StatisticsCollector & statisticsCollector, - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph) { return std::make_unique(statisticsCollector, rvsdgModule, pointsToGraph); @@ -627,7 +627,7 @@ RegionAwareMemoryNodeProvider::RegionAwareMemoryNodeProvider() = default; std::unique_ptr RegionAwareMemoryNodeProvider::ProvisionMemoryNodes( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph, util::StatisticsCollector & statisticsCollector) { @@ -657,7 +657,7 @@ RegionAwareMemoryNodeProvider::ProvisionMemoryNodes( std::unique_ptr RegionAwareMemoryNodeProvider::Create( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph, util::StatisticsCollector & statisticsCollector) { @@ -667,7 +667,7 @@ RegionAwareMemoryNodeProvider::Create( std::unique_ptr RegionAwareMemoryNodeProvider::Create( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph) { util::StatisticsCollector statisticsCollector; @@ -857,7 +857,7 @@ RegionAwareMemoryNodeProvider::AnnotateStructuralNode(const rvsdg::StructuralNod } void -RegionAwareMemoryNodeProvider::Propagate(const RvsdgModule & rvsdgModule) +RegionAwareMemoryNodeProvider::Propagate(const rvsdg::RvsdgModule & rvsdgModule) { rvsdg::topdown_traverser traverser(&rvsdgModule.Rvsdg().GetRootRegion()); for (auto & node : traverser) @@ -971,7 +971,8 @@ RegionAwareMemoryNodeProvider::PropagateRegion(const rvsdg::Region & region) } void -RegionAwareMemoryNodeProvider::ResolveUnknownMemoryNodeReferences(const RvsdgModule & rvsdgModule) +RegionAwareMemoryNodeProvider::ResolveUnknownMemoryNodeReferences( + const rvsdg::RvsdgModule & rvsdgModule) { auto ResolveLambda = [&](const lambda::node & lambda) { diff --git a/jlm/llvm/opt/alias-analyses/RegionAwareMemoryNodeProvider.hpp b/jlm/llvm/opt/alias-analyses/RegionAwareMemoryNodeProvider.hpp index 3c00d949d..b8a28c170 100644 --- a/jlm/llvm/opt/alias-analyses/RegionAwareMemoryNodeProvider.hpp +++ b/jlm/llvm/opt/alias-analyses/RegionAwareMemoryNodeProvider.hpp @@ -60,7 +60,7 @@ class RegionAwareMemoryNodeProvider final : public MemoryNodeProvider std::unique_ptr ProvisionMemoryNodes( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph, jlm::util::StatisticsCollector & statisticsCollector) override; @@ -75,7 +75,7 @@ class RegionAwareMemoryNodeProvider final : public MemoryNodeProvider */ static std::unique_ptr Create( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph, jlm::util::StatisticsCollector & statisticsCollector); @@ -88,7 +88,7 @@ class RegionAwareMemoryNodeProvider final : public MemoryNodeProvider * @return A new instance of MemoryNodeProvisioning. */ static std::unique_ptr - Create(const RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph); + Create(const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph); private: /** @@ -155,7 +155,7 @@ class RegionAwareMemoryNodeProvider final : public MemoryNodeProvider * @see ExtractLambdaNodes() */ void - Propagate(const RvsdgModule & rvsdgModule); + Propagate(const rvsdg::RvsdgModule & rvsdgModule); void PropagateRegion(const rvsdg::Region & region); @@ -193,7 +193,7 @@ class RegionAwareMemoryNodeProvider final : public MemoryNodeProvider * @see ExtractRvsdgTailNodes() */ void - ResolveUnknownMemoryNodeReferences(const RvsdgModule & rvsdgModule); + ResolveUnknownMemoryNodeReferences(const rvsdg::RvsdgModule & rvsdgModule); static bool ShouldCreateRegionSummary(const rvsdg::Region & region); diff --git a/jlm/llvm/opt/alias-analyses/Steensgaard.cpp b/jlm/llvm/opt/alias-analyses/Steensgaard.cpp index d9d0320bd..aa0791fa1 100644 --- a/jlm/llvm/opt/alias-analyses/Steensgaard.cpp +++ b/jlm/llvm/opt/alias-analyses/Steensgaard.cpp @@ -1818,14 +1818,14 @@ Steensgaard::Analyze(const RvsdgModule & rvsdgModule) std::unique_ptr Steensgaard::Analyze( - const RvsdgModule & module, - jlm::util::StatisticsCollector & statisticsCollector) + const rvsdg::RvsdgModule & module, + util::StatisticsCollector & statisticsCollector) { // std::unordered_map outputMap; // std::cout << jlm::rvsdg::view(module.Rvsdg().root(), outputMap) << std::flush; Context_ = Context::Create(); - auto statistics = Statistics::Create(module.SourceFileName()); + auto statistics = Statistics::Create(module.SourceFilePath().value()); // Perform Steensgaard analysis statistics->StartSteensgaardStatistics(module.Rvsdg()); diff --git a/jlm/llvm/opt/alias-analyses/Steensgaard.hpp b/jlm/llvm/opt/alias-analyses/Steensgaard.hpp index 78cb964b7..2a30b4f52 100644 --- a/jlm/llvm/opt/alias-analyses/Steensgaard.hpp +++ b/jlm/llvm/opt/alias-analyses/Steensgaard.hpp @@ -76,7 +76,7 @@ class Steensgaard final : public AliasAnalysis operator=(Steensgaard &&) = delete; std::unique_ptr - Analyze(const RvsdgModule & module, jlm::util::StatisticsCollector & statisticsCollector) + Analyze(const rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override; /** diff --git a/jlm/llvm/opt/alias-analyses/TopDownMemoryNodeEliminator.cpp b/jlm/llvm/opt/alias-analyses/TopDownMemoryNodeEliminator.cpp index 52041340a..411ae301c 100644 --- a/jlm/llvm/opt/alias-analyses/TopDownMemoryNodeEliminator.cpp +++ b/jlm/llvm/opt/alias-analyses/TopDownMemoryNodeEliminator.cpp @@ -422,12 +422,12 @@ TopDownMemoryNodeEliminator::TopDownMemoryNodeEliminator() = default; std::unique_ptr TopDownMemoryNodeEliminator::EliminateMemoryNodes( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const MemoryNodeProvisioning & seedProvisioning, util::StatisticsCollector & statisticsCollector) { Context_ = Context::Create(seedProvisioning); - auto statistics = Statistics::Create(rvsdgModule.SourceFileName()); + auto statistics = Statistics::Create(rvsdgModule.SourceFilePath().value()); statistics->Start(rvsdgModule.Rvsdg()); EliminateTopDown(rvsdgModule); @@ -445,7 +445,7 @@ TopDownMemoryNodeEliminator::EliminateMemoryNodes( std::unique_ptr TopDownMemoryNodeEliminator::CreateAndEliminate( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const MemoryNodeProvisioning & seedProvisioning, util::StatisticsCollector & statisticsCollector) { @@ -455,7 +455,7 @@ TopDownMemoryNodeEliminator::CreateAndEliminate( std::unique_ptr TopDownMemoryNodeEliminator::CreateAndEliminate( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const MemoryNodeProvisioning & seedProvisioning) { util::StatisticsCollector statisticsCollector; @@ -463,7 +463,7 @@ TopDownMemoryNodeEliminator::CreateAndEliminate( } void -TopDownMemoryNodeEliminator::EliminateTopDown(const RvsdgModule & rvsdgModule) +TopDownMemoryNodeEliminator::EliminateTopDown(const rvsdg::RvsdgModule & rvsdgModule) { // Initialize the memory nodes that are alive at beginning of every tail-lambda InitializeLiveNodesOfTailLambdas(rvsdgModule); @@ -873,7 +873,8 @@ TopDownMemoryNodeEliminator::EliminateTopDownIndirectCall( } void -TopDownMemoryNodeEliminator::InitializeLiveNodesOfTailLambdas(const RvsdgModule & rvsdgModule) +TopDownMemoryNodeEliminator::InitializeLiveNodesOfTailLambdas( + const rvsdg::RvsdgModule & rvsdgModule) { auto nodes = rvsdg::Graph::ExtractTailNodes(rvsdgModule.Rvsdg()); for (auto & node : nodes) @@ -924,7 +925,7 @@ TopDownMemoryNodeEliminator::InitializeLiveNodesOfTailLambda(const lambda::node bool TopDownMemoryNodeEliminator::CheckInvariants( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const MemoryNodeProvisioning & seedProvisioning, const Provisioning & provisioning) { diff --git a/jlm/llvm/opt/alias-analyses/TopDownMemoryNodeEliminator.hpp b/jlm/llvm/opt/alias-analyses/TopDownMemoryNodeEliminator.hpp index f2b50e776..02fcf4633 100644 --- a/jlm/llvm/opt/alias-analyses/TopDownMemoryNodeEliminator.hpp +++ b/jlm/llvm/opt/alias-analyses/TopDownMemoryNodeEliminator.hpp @@ -77,7 +77,7 @@ class TopDownMemoryNodeEliminator final : public MemoryNodeEliminator std::unique_ptr EliminateMemoryNodes( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const MemoryNodeProvisioning & seedProvisioning, util::StatisticsCollector & statisticsCollector) override; @@ -92,7 +92,7 @@ class TopDownMemoryNodeEliminator final : public MemoryNodeEliminator */ static std::unique_ptr CreateAndEliminate( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const MemoryNodeProvisioning & seedProvisioning, util::StatisticsCollector & statisticsCollector); @@ -106,12 +106,12 @@ class TopDownMemoryNodeEliminator final : public MemoryNodeEliminator */ static std::unique_ptr CreateAndEliminate( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const MemoryNodeProvisioning & seedProvisioning); private: void - EliminateTopDown(const RvsdgModule & rvsdgModule); + EliminateTopDown(const rvsdg::RvsdgModule & rvsdgModule); /** * Processes the inter-procedural RVSDG nodes (lambda, phi, and delta nodes) in the root region @@ -193,7 +193,7 @@ class TopDownMemoryNodeEliminator final : public MemoryNodeEliminator * @see graph::ExtractTailNodes() */ void - InitializeLiveNodesOfTailLambdas(const RvsdgModule & rvsdgModule); + InitializeLiveNodesOfTailLambdas(const rvsdg::RvsdgModule & rvsdgModule); /** * Initializes the memory nodes that are alive at the beginning of every tail-lambda. @@ -220,7 +220,7 @@ class TopDownMemoryNodeEliminator final : public MemoryNodeEliminator */ static bool CheckInvariants( - const RvsdgModule & rvsdgModule, + const rvsdg::RvsdgModule & rvsdgModule, const MemoryNodeProvisioning & seedProvisioning, const Provisioning & provisioning); diff --git a/jlm/llvm/opt/cne.cpp b/jlm/llvm/opt/cne.cpp index 27a784b7f..b1c8d4d94 100644 --- a/jlm/llvm/opt/cne.cpp +++ b/jlm/llvm/opt/cne.cpp @@ -564,12 +564,12 @@ divert(rvsdg::Region * region, cnectx & ctx) } static void -cne(RvsdgModule & rm, util::StatisticsCollector & statisticsCollector) +cne(rvsdg::RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) { - auto & graph = rm.Rvsdg(); + auto & graph = rvsdgModule.Rvsdg(); cnectx ctx; - auto statistics = cnestat::Create(rm.SourceFileName()); + auto statistics = cnestat::Create(rvsdgModule.SourceFilePath().value()); statistics->start_mark_stat(graph); mark(&graph.GetRootRegion(), ctx); @@ -588,7 +588,7 @@ cne::~cne() {} void -cne::run(RvsdgModule & module, util::StatisticsCollector & statisticsCollector) +cne::Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) { llvm::cne(module, statisticsCollector); } diff --git a/jlm/llvm/opt/cne.hpp b/jlm/llvm/opt/cne.hpp index bac3b3176..ca085e0ed 100644 --- a/jlm/llvm/opt/cne.hpp +++ b/jlm/llvm/opt/cne.hpp @@ -6,23 +6,21 @@ #ifndef JLM_LLVM_OPT_CNE_HPP #define JLM_LLVM_OPT_CNE_HPP -#include +#include namespace jlm::llvm { -class RvsdgModule; - /** * \brief Common Node Elimination */ -class cne final : public optimization +class cne final : public rvsdg::Transformation { public: virtual ~cne(); - virtual void - run(RvsdgModule & module, jlm::util::StatisticsCollector & statisticsCollector) override; + void + Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override; }; } diff --git a/jlm/llvm/opt/inlining.cpp b/jlm/llvm/opt/inlining.cpp index 91afdfcef..aaae85b98 100644 --- a/jlm/llvm/opt/inlining.cpp +++ b/jlm/llvm/opt/inlining.cpp @@ -162,10 +162,10 @@ inlining(rvsdg::Graph & rvsdg) } static void -inlining(RvsdgModule & rm, util::StatisticsCollector & statisticsCollector) +inlining(rvsdg::RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) { - auto & graph = rm.Rvsdg(); - auto statistics = ilnstat::Create(rm.SourceFileName()); + auto & graph = rvsdgModule.Rvsdg(); + auto statistics = ilnstat::Create(rvsdgModule.SourceFilePath().value()); statistics->start(graph); inlining(graph); @@ -180,7 +180,7 @@ fctinline::~fctinline() {} void -fctinline::run(RvsdgModule & module, util::StatisticsCollector & statisticsCollector) +fctinline::Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) { inlining(module, statisticsCollector); } diff --git a/jlm/llvm/opt/inlining.hpp b/jlm/llvm/opt/inlining.hpp index a39b7c944..ebc3e8478 100644 --- a/jlm/llvm/opt/inlining.hpp +++ b/jlm/llvm/opt/inlining.hpp @@ -7,23 +7,21 @@ #define JLM_LLVM_OPT_INLINE_HPP #include -#include +#include namespace jlm::llvm { -class RvsdgModule; - /** * \brief Function Inlining */ -class fctinline final : public optimization +class fctinline final : public rvsdg::Transformation { public: virtual ~fctinline(); - virtual void - run(RvsdgModule & module, jlm::util::StatisticsCollector & statisticsCollector) override; + void + Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override; }; jlm::rvsdg::output * diff --git a/jlm/llvm/opt/inversion.cpp b/jlm/llvm/opt/inversion.cpp index a0cbce507..66ea5f970 100644 --- a/jlm/llvm/opt/inversion.cpp +++ b/jlm/llvm/opt/inversion.cpp @@ -301,13 +301,13 @@ invert(rvsdg::Region * region) } static void -invert(RvsdgModule & rm, util::StatisticsCollector & statisticsCollector) +invert(rvsdg::RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) { - auto statistics = ivtstat::Create(rm.SourceFileName()); + auto statistics = ivtstat::Create(rvsdgModule.SourceFilePath().value()); - statistics->start(rm.Rvsdg()); - invert(&rm.Rvsdg().GetRootRegion()); - statistics->end(rm.Rvsdg()); + statistics->start(rvsdgModule.Rvsdg()); + invert(&rvsdgModule.Rvsdg().GetRootRegion()); + statistics->end(rvsdgModule.Rvsdg()); statisticsCollector.CollectDemandedStatistics(std::move(statistics)); } @@ -318,7 +318,7 @@ tginversion::~tginversion() {} void -tginversion::run(RvsdgModule & module, jlm::util::StatisticsCollector & statisticsCollector) +tginversion::Run(rvsdg::RvsdgModule & module, jlm::util::StatisticsCollector & statisticsCollector) { invert(module, statisticsCollector); } diff --git a/jlm/llvm/opt/inversion.hpp b/jlm/llvm/opt/inversion.hpp index 5e263cc14..815038f7b 100644 --- a/jlm/llvm/opt/inversion.hpp +++ b/jlm/llvm/opt/inversion.hpp @@ -6,23 +6,21 @@ #ifndef JLM_LLVM_OPT_INVERSION_HPP #define JLM_LLVM_OPT_INVERSION_HPP -#include +#include namespace jlm::llvm { -class RvsdgModule; - /** * \brief Theta-Gamma Inversion */ -class tginversion final : public optimization +class tginversion final : public rvsdg::Transformation { public: virtual ~tginversion(); - virtual void - run(RvsdgModule & module, jlm::util::StatisticsCollector & statisticsCollector) override; + void + Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override; }; } diff --git a/jlm/llvm/opt/optimization.cpp b/jlm/llvm/opt/optimization.cpp deleted file mode 100644 index 9ccfa9805..000000000 --- a/jlm/llvm/opt/optimization.cpp +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2018 Nico Reißmann - * See COPYING for terms of redistribution. - */ - -#include - -namespace jlm::llvm -{ - -optimization::~optimization() -{} - -} diff --git a/jlm/llvm/opt/optimization.hpp b/jlm/llvm/opt/optimization.hpp deleted file mode 100644 index 91a89674f..000000000 --- a/jlm/llvm/opt/optimization.hpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2018 Nico Reißmann - * See COPYING for terms of redistribution. - */ - -#ifndef JLM_LLVM_OPT_OPTIMIZATION_HPP -#define JLM_LLVM_OPT_OPTIMIZATION_HPP - -#include - -namespace jlm::util -{ -class StatisticsCollector; -} - -namespace jlm::llvm -{ - -class RvsdgModule; - -/** - * \brief Optimization pass interface - */ -class optimization -{ -public: - virtual ~optimization(); - - /** - * \brief Perform optimization - * - * This method is expected to be called multiple times. An - * implementation is required to reset the objects' internal state - * to ensure correct behavior after every invocation. - * - * \param module RVSDG module the optimization is performed on. - * \param statisticsCollector Statistics collector for collecting optimization statistics. - */ - virtual void - run(RvsdgModule & module, jlm::util::StatisticsCollector & statisticsCollector) = 0; -}; - -} - -#endif diff --git a/jlm/llvm/opt/pull.cpp b/jlm/llvm/opt/pull.cpp index cb33512a8..61941af55 100644 --- a/jlm/llvm/opt/pull.cpp +++ b/jlm/llvm/opt/pull.cpp @@ -305,13 +305,13 @@ pull(rvsdg::Region * region) } static void -pull(RvsdgModule & rm, util::StatisticsCollector & statisticsCollector) +pull(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) { - auto statistics = pullstat::Create(rm.SourceFileName()); + auto statistics = pullstat::Create(module.SourceFilePath().value()); - statistics->start(rm.Rvsdg()); - pull(&rm.Rvsdg().GetRootRegion()); - statistics->end(rm.Rvsdg()); + statistics->start(module.Rvsdg()); + pull(&module.Rvsdg().GetRootRegion()); + statistics->end(module.Rvsdg()); statisticsCollector.CollectDemandedStatistics(std::move(statistics)); } @@ -322,7 +322,7 @@ pullin::~pullin() {} void -pullin::run(RvsdgModule & module, util::StatisticsCollector & statisticsCollector) +pullin::Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) { pull(module, statisticsCollector); } diff --git a/jlm/llvm/opt/pull.hpp b/jlm/llvm/opt/pull.hpp index f06aa0ac7..f456a103e 100644 --- a/jlm/llvm/opt/pull.hpp +++ b/jlm/llvm/opt/pull.hpp @@ -6,29 +6,27 @@ #ifndef JLM_LLVM_OPT_PULL_HPP #define JLM_LLVM_OPT_PULL_HPP -#include -#include +#include namespace jlm::rvsdg { class GammaNode; +class Region; } namespace jlm::llvm { -class RvsdgModule; - /** * \brief Node Pull-In Optimization */ -class pullin final : public optimization +class pullin final : public rvsdg::Transformation { public: virtual ~pullin(); - virtual void - run(RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override; + void + Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override; }; void diff --git a/jlm/llvm/opt/push.cpp b/jlm/llvm/opt/push.cpp index abba1f5ec..6ba2ade25 100644 --- a/jlm/llvm/opt/push.cpp +++ b/jlm/llvm/opt/push.cpp @@ -413,13 +413,13 @@ push(rvsdg::Region * region) } static void -push(RvsdgModule & rm, util::StatisticsCollector & statisticsCollector) +push(rvsdg::RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) { - auto statistics = pushstat::Create(rm.SourceFileName()); + auto statistics = pushstat::Create(rvsdgModule.SourceFilePath().value()); - statistics->start(rm.Rvsdg()); - push(&rm.Rvsdg().GetRootRegion()); - statistics->end(rm.Rvsdg()); + statistics->start(rvsdgModule.Rvsdg()); + push(&rvsdgModule.Rvsdg().GetRootRegion()); + statistics->end(rvsdgModule.Rvsdg()); statisticsCollector.CollectDemandedStatistics(std::move(statistics)); } @@ -430,7 +430,7 @@ pushout::~pushout() {} void -pushout::run(RvsdgModule & module, util::StatisticsCollector & statisticsCollector) +pushout::Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) { push(module, statisticsCollector); } diff --git a/jlm/llvm/opt/push.hpp b/jlm/llvm/opt/push.hpp index b25aac191..ff8a3129c 100644 --- a/jlm/llvm/opt/push.hpp +++ b/jlm/llvm/opt/push.hpp @@ -6,7 +6,7 @@ #ifndef JLM_LLVM_OPT_PUSH_HPP #define JLM_LLVM_OPT_PUSH_HPP -#include +#include namespace jlm::rvsdg { @@ -17,18 +17,16 @@ class ThetaNode; namespace jlm::llvm { -class RvsdgModule; - /** * \brief Node Push-Out Optimization */ -class pushout final : public optimization +class pushout final : public rvsdg::Transformation { public: virtual ~pushout(); - virtual void - run(RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override; + void + Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override; }; void diff --git a/jlm/llvm/opt/reduction.cpp b/jlm/llvm/opt/reduction.cpp index 6ed5e689f..41eac068c 100644 --- a/jlm/llvm/opt/reduction.cpp +++ b/jlm/llvm/opt/reduction.cpp @@ -53,18 +53,13 @@ NodeReduction::~NodeReduction() noexcept = default; NodeReduction::NodeReduction() = default; void -NodeReduction::run(RvsdgModule & rvsdgModule) -{ - util::StatisticsCollector statisticsCollector; - run(rvsdgModule, statisticsCollector); -} - -void -NodeReduction::run(RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) +NodeReduction::Run( + rvsdg::RvsdgModule & rvsdgModule, + util::StatisticsCollector & statisticsCollector) { const auto & graph = rvsdgModule.Rvsdg(); - Statistics_ = Statistics::Create(rvsdgModule.SourceFileName()); + Statistics_ = Statistics::Create(rvsdgModule.SourceFilePath().value()); Statistics_->Start(graph); ReduceNodesInRegion(graph.GetRootRegion()); diff --git a/jlm/llvm/opt/reduction.hpp b/jlm/llvm/opt/reduction.hpp index 2c8f4cfb7..4a7e53be8 100644 --- a/jlm/llvm/opt/reduction.hpp +++ b/jlm/llvm/opt/reduction.hpp @@ -6,7 +6,7 @@ #ifndef JLM_LLVM_OPT_REDUCTION_HPP #define JLM_LLVM_OPT_REDUCTION_HPP -#include +#include #include #include @@ -31,7 +31,7 @@ class StoreNonVolatileOperation; * nodes in a region are visited top-down and reductions are performed until a fix-point is reached, * i.e., until no peephole optimization can be applied any longer to any node in a region. */ -class NodeReduction final : public optimization +class NodeReduction final : public rvsdg::Transformation { public: class Statistics; @@ -51,10 +51,7 @@ class NodeReduction final : public optimization operator=(NodeReduction &&) = delete; void - run(RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) override; - - void - run(RvsdgModule & rvsdgModule); + Run(rvsdg::RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) override; private: void diff --git a/jlm/llvm/opt/unroll.cpp b/jlm/llvm/opt/unroll.cpp index fee069dcf..876dc87fc 100644 --- a/jlm/llvm/opt/unroll.cpp +++ b/jlm/llvm/opt/unroll.cpp @@ -522,13 +522,13 @@ loopunroll::~loopunroll() {} void -loopunroll::run(RvsdgModule & module, util::StatisticsCollector & statisticsCollector) +loopunroll::Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) { if (factor_ < 2) return; auto & graph = module.Rvsdg(); - auto statistics = unrollstat::Create(module.SourceFileName()); + auto statistics = unrollstat::Create(module.SourceFilePath().value()); statistics->start(module.Rvsdg()); unroll(&graph.GetRootRegion(), factor_); diff --git a/jlm/llvm/opt/unroll.hpp b/jlm/llvm/opt/unroll.hpp index 7fa5d3244..7aab200b1 100644 --- a/jlm/llvm/opt/unroll.hpp +++ b/jlm/llvm/opt/unroll.hpp @@ -6,9 +6,9 @@ #ifndef JLM_LLVM_OPT_UNROLL_HPP #define JLM_LLVM_OPT_UNROLL_HPP -#include #include #include +#include #include namespace jlm::llvm @@ -19,7 +19,7 @@ class RvsdgModule; /** * \brief Optimization that attempts to unroll loops (thetas). */ -class loopunroll final : public optimization +class loopunroll final : public rvsdg::Transformation { public: virtual ~loopunroll(); @@ -36,8 +36,8 @@ class loopunroll final : public optimization * \param module Module where the innermost loops are unrolled * \param statisticsCollector Statistics collector for collecting loop unrolling statistics. */ - virtual void - run(RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override; + void + Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override; private: size_t factor_; diff --git a/jlm/rvsdg/Makefile.sub b/jlm/rvsdg/Makefile.sub index db99389cb..c78ba418c 100644 --- a/jlm/rvsdg/Makefile.sub +++ b/jlm/rvsdg/Makefile.sub @@ -13,6 +13,7 @@ librvsdg_SOURCES = \ jlm/rvsdg/structural-node.cpp \ jlm/rvsdg/theta.cpp \ jlm/rvsdg/tracker.cpp \ + jlm/rvsdg/Transformation.cpp \ jlm/rvsdg/traverser.cpp \ jlm/rvsdg/type.cpp \ jlm/rvsdg/unary.cpp \ @@ -54,6 +55,7 @@ librvsdg_HEADERS = \ jlm/rvsdg/theta.hpp \ jlm/rvsdg/reduction-helpers.hpp \ jlm/rvsdg/RvsdgModule.hpp \ + jlm/rvsdg/Transformation.hpp \ jlm/rvsdg/bitstring.hpp \ jlm/rvsdg/node.hpp \ jlm/rvsdg/NodeNormalization.hpp \ diff --git a/jlm/rvsdg/Transformation.cpp b/jlm/rvsdg/Transformation.cpp new file mode 100644 index 000000000..e9957468b --- /dev/null +++ b/jlm/rvsdg/Transformation.cpp @@ -0,0 +1,64 @@ +/* + * Copyright 2025 Nico Reißmann + * See COPYING for terms of redistribution. + */ + +#include "RvsdgModule.hpp" +#include +#include + +namespace jlm::rvsdg +{ + +Transformation::~Transformation() noexcept = default; + +class TransformationSequence::Statistics final : public util::Statistics +{ +public: + ~Statistics() noexcept override = default; + + explicit Statistics(const util::filepath & sourceFile) + : util::Statistics(Id::RvsdgOptimization, sourceFile) + {} + + void + StartMeasuring(const Graph & graph) noexcept + { + AddMeasurement(Label::NumRvsdgNodesBefore, nnodes(&graph.GetRootRegion())); + AddTimer(Label::Timer).start(); + } + + void + EndMeasuring(const rvsdg::Graph & graph) noexcept + { + GetTimer(Label::Timer).stop(); + AddMeasurement(Label::NumRvsdgNodesAfter, nnodes(&graph.GetRootRegion())); + } + + static std::unique_ptr + Create(const util::filepath & sourceFile) + { + return std::make_unique(sourceFile); + } +}; + +TransformationSequence::~TransformationSequence() noexcept = default; + +void +TransformationSequence::Run( + RvsdgModule & rvsdgModule, + util::StatisticsCollector & statisticsCollector) +{ + auto statistics = Statistics::Create(rvsdgModule.SourceFilePath().value()); + statistics->StartMeasuring(rvsdgModule.Rvsdg()); + + for (const auto & optimization : Transformations_) + { + optimization->Run(rvsdgModule, statisticsCollector); + } + + statistics->EndMeasuring(rvsdgModule.Rvsdg()); + statisticsCollector.CollectDemandedStatistics(std::move(statistics)); +} + +} diff --git a/jlm/rvsdg/Transformation.hpp b/jlm/rvsdg/Transformation.hpp new file mode 100644 index 000000000..9179fcbdb --- /dev/null +++ b/jlm/rvsdg/Transformation.hpp @@ -0,0 +1,100 @@ +/* + * Copyright 2025 Nico Reißmann + * See COPYING for terms of redistribution. + */ + +#ifndef JLM_RVSDG_TRANSFORMATION_HPP +#define JLM_RVSDG_TRANSFORMATION_HPP + +#include + +namespace jlm::rvsdg +{ + +class RvsdgModule; + +/** + * \brief Represents an RVSDG transformation. + */ +class Transformation +{ +public: + virtual ~Transformation() noexcept; + + /** + * \brief Perform RVSDG transformation + * + * \note This method is expected to be called multiple times. An + * implementation is required to reset the objects' internal state + * to ensure correct behavior after every invocation. + * + * \param module RVSDG module the transformation is performed on. + * \param statisticsCollector Statistics collector for collecting transformation statistics. + */ + virtual void + Run(RvsdgModule & module, util::StatisticsCollector & statisticsCollector) = 0; + + /** + * \brief Perform RVSDG transformation + * + * \note This method is expected to be called multiple times. An + * implementation is required to reset the objects' internal state + * to ensure correct behavior after every invocation. + * + * @param module RVSDG module the transformation is performed on. + */ + void + Run(RvsdgModule & module) + { + util::StatisticsCollector statisticsCollector; + Run(module, statisticsCollector); + } +}; + +/** + * Sequentially applies a list of RVSDG transformations. + */ +class TransformationSequence final : public Transformation +{ + class Statistics; + +public: + ~TransformationSequence() noexcept override; + + explicit TransformationSequence(std::vector transformations) + : Transformations_(std::move(transformations)) + {} + + /** + * \brief Perform RVSDG transformations + * + * @param rvsdgModule RVSDG module the transformation is performed on. + * @param statisticsCollector Statistics collector for collecting transformation statistics. + */ + void + Run(RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) override; + + /** + * \brief Creates a transformation sequence and invokes its Run() method. + * + * @param rvsdgModule RVSDG module the transformation is performed on. + * @param statisticsCollector Statistics collector for collecting transformation statistics. + * @param transformations The transformations that are sequentially applied to \p rvsdgModule. + */ + static void + CreateAndRun( + RvsdgModule & rvsdgModule, + util::StatisticsCollector & statisticsCollector, + std::vector transformations) + { + TransformationSequence sequentialApplication(std::move(transformations)); + sequentialApplication.Run(rvsdgModule, statisticsCollector); + } + +private: + std::vector Transformations_; +}; + +} + +#endif // JLM_RVSDG_TRANSFORMATION_HPP diff --git a/jlm/tooling/Command.cpp b/jlm/tooling/Command.cpp index 7beb8005e..a1e092087 100644 --- a/jlm/tooling/Command.cpp +++ b/jlm/tooling/Command.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include #include #include @@ -32,6 +31,8 @@ #include #include +#include + #ifdef ENABLE_MLIR #include #include @@ -295,7 +296,7 @@ JlmOptCommand::JlmOptCommand( for (auto optimizationId : CommandLineOptions_.GetOptimizationIds()) { if (auto it = Optimizations_.find(optimizationId); it == Optimizations_.end()) - Optimizations_[optimizationId] = CreateOptimization(optimizationId); + Optimizations_[optimizationId] = CreateTransformation(optimizationId); } } @@ -351,7 +352,10 @@ JlmOptCommand::Run() const CommandLineOptions_.GetInputFormat(), statisticsCollector); - llvm::OptimizationSequence::CreateAndRun(*rvsdgModule, statisticsCollector, GetOptimizations()); + rvsdg::TransformationSequence::CreateAndRun( + *rvsdgModule, + statisticsCollector, + GetTransformations()); PrintRvsdgModule( *rvsdgModule, @@ -362,10 +366,10 @@ JlmOptCommand::Run() const statisticsCollector.PrintStatistics(); } -std::vector -JlmOptCommand::GetOptimizations() const +std::vector +JlmOptCommand::GetTransformations() const { - std::vector optimizations; + std::vector optimizations; for (auto optimizationId : CommandLineOptions_.GetOptimizationIds()) { auto it = Optimizations_.find(optimizationId); @@ -376,8 +380,8 @@ JlmOptCommand::GetOptimizations() const return optimizations; } -std::unique_ptr -JlmOptCommand::CreateOptimization( +std::unique_ptr +JlmOptCommand::CreateTransformation( enum JlmOptCommandLineOptions::OptimizationId optimizationId) const { using Andersen = llvm::aa::Andersen; diff --git a/jlm/tooling/Command.hpp b/jlm/tooling/Command.hpp index 0b6ddb5dc..5da1d4523 100644 --- a/jlm/tooling/Command.hpp +++ b/jlm/tooling/Command.hpp @@ -10,11 +10,14 @@ #include #include -#include - #include #include +namespace jlm::llvm +{ +class RvsdgModule; +} + namespace jlm::tooling { @@ -418,15 +421,17 @@ class JlmOptCommand final : public Command const util::filepath & outputFile, util::StatisticsCollector & statisticsCollector); - [[nodiscard]] std::vector - GetOptimizations() const; + [[nodiscard]] std::vector + GetTransformations() const; - [[nodiscard]] std::unique_ptr - CreateOptimization(enum JlmOptCommandLineOptions::OptimizationId optimizationId) const; + [[nodiscard]] std::unique_ptr + CreateTransformation(JlmOptCommandLineOptions::OptimizationId optimizationId) const; std::string ProgramName_; JlmOptCommandLineOptions CommandLineOptions_; - std::unordered_map> + std::unordered_map< + JlmOptCommandLineOptions::OptimizationId, + std::unique_ptr> Optimizations_ = {}; }; diff --git a/jlm/tooling/CommandLine.hpp b/jlm/tooling/CommandLine.hpp index defbf66b6..29f0c1f6c 100644 --- a/jlm/tooling/CommandLine.hpp +++ b/jlm/tooling/CommandLine.hpp @@ -6,7 +6,6 @@ #ifndef JLM_TOOLING_COMMANDLINE_HPP #define JLM_TOOLING_COMMANDLINE_HPP -#include #include #include #include diff --git a/tests/jlm/llvm/opt/InvariantValueRedirectionTests.cpp b/tests/jlm/llvm/opt/InvariantValueRedirectionTests.cpp index 4c33a1506..124a27f0d 100644 --- a/tests/jlm/llvm/opt/InvariantValueRedirectionTests.cpp +++ b/tests/jlm/llvm/opt/InvariantValueRedirectionTests.cpp @@ -24,7 +24,7 @@ RunInvariantValueRedirection(jlm::llvm::RvsdgModule & rvsdgModule) jlm::util::StatisticsCollector statisticsCollector; jlm::llvm::InvariantValueRedirection invariantValueRedirection; - invariantValueRedirection.run(rvsdgModule, statisticsCollector); + invariantValueRedirection.Run(rvsdgModule, statisticsCollector); jlm::rvsdg::view(rvsdgModule.Rvsdg(), stdout); } diff --git a/tests/jlm/llvm/opt/NodeReductionTests.cpp b/tests/jlm/llvm/opt/NodeReductionTests.cpp index 2aa82aa3d..e108ea8af 100644 --- a/tests/jlm/llvm/opt/NodeReductionTests.cpp +++ b/tests/jlm/llvm/opt/NodeReductionTests.cpp @@ -44,7 +44,7 @@ MultipleReductionsPerRegion() NodeReduction nodeReduction; jlm::util::StatisticsCollector statisticsCollector( jlm::util::StatisticsCollectorSettings({ jlm::util::Statistics::Id::ReduceNodes })); - nodeReduction.run(rvsdgModule, statisticsCollector); + nodeReduction.Run(rvsdgModule, statisticsCollector); view(graph, stdout); diff --git a/tests/jlm/llvm/opt/RvsdgTreePrinterTests.cpp b/tests/jlm/llvm/opt/RvsdgTreePrinterTests.cpp index b5458b499..5424fb727 100644 --- a/tests/jlm/llvm/opt/RvsdgTreePrinterTests.cpp +++ b/tests/jlm/llvm/opt/RvsdgTreePrinterTests.cpp @@ -35,7 +35,7 @@ RunAndExtractFile(jlm::llvm::RvsdgModule & module, jlm::llvm::RvsdgTreePrinter & StatisticsCollectorSettings settings({}, tmpDir, "TestTreePrinter"); StatisticsCollector collector(settings); - printer.run(module, collector); + printer.Run(module, collector); auto fileName = tmpDir.Join("TestTreePrinter-" + settings.GetUniqueString() + "-rvsdgTree-0.txt"); auto result = ReadFile(fileName); diff --git a/tests/jlm/llvm/opt/TestDeadNodeElimination.cpp b/tests/jlm/llvm/opt/TestDeadNodeElimination.cpp index 38ecc46f0..28892b718 100644 --- a/tests/jlm/llvm/opt/TestDeadNodeElimination.cpp +++ b/tests/jlm/llvm/opt/TestDeadNodeElimination.cpp @@ -23,7 +23,7 @@ RunDeadNodeElimination(jlm::llvm::RvsdgModule & rvsdgModule) { jlm::util::StatisticsCollector statisticsCollector; jlm::llvm::DeadNodeElimination deadNodeElimination; - deadNodeElimination.run(rvsdgModule, statisticsCollector); + deadNodeElimination.Run(rvsdgModule, statisticsCollector); } static void diff --git a/tests/jlm/llvm/opt/alias-analyses/TestPointsToGraph.cpp b/tests/jlm/llvm/opt/alias-analyses/TestPointsToGraph.cpp index 32bf2ecae..0f11d0be7 100644 --- a/tests/jlm/llvm/opt/alias-analyses/TestPointsToGraph.cpp +++ b/tests/jlm/llvm/opt/alias-analyses/TestPointsToGraph.cpp @@ -17,7 +17,7 @@ class TestAnalysis final : public jlm::llvm::aa::AliasAnalysis { public: std::unique_ptr - Analyze(const jlm::llvm::RvsdgModule & rvsdgModule, jlm::util::StatisticsCollector &) override + Analyze(const jlm::rvsdg::RvsdgModule & rvsdgModule, jlm::util::StatisticsCollector &) override { PointsToGraph_ = jlm::llvm::aa::PointsToGraph::Create(); diff --git a/tests/jlm/llvm/opt/test-cne.cpp b/tests/jlm/llvm/opt/test-cne.cpp index 3e1208c86..b7d543433 100644 --- a/tests/jlm/llvm/opt/test-cne.cpp +++ b/tests/jlm/llvm/opt/test-cne.cpp @@ -53,7 +53,7 @@ test_simple() // jlm::rvsdg::view(graph.GetRootRegion(), stdout); jlm::llvm::cne cne; - cne.run(rm, statisticsCollector); + cne.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph.GetRootRegion(), stdout); assert(graph.GetRootRegion().result(0)->origin() == graph.GetRootRegion().result(1)->origin()); @@ -106,7 +106,7 @@ test_gamma() // jlm::rvsdg::view(graph.GetRootRegion(), stdout); jlm::llvm::cne cne; - cne.run(rm, statisticsCollector); + cne.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph.GetRootRegion(), stdout); auto subregion0 = gamma->subregion(0); @@ -163,7 +163,7 @@ test_theta() // jlm::rvsdg::view(graph.GetRootRegion(), stdout); jlm::llvm::cne cne; - cne.run(rm, statisticsCollector); + cne.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph.GetRootRegion(), stdout); auto un1 = jlm::rvsdg::output::GetNode(*u1); @@ -211,7 +211,7 @@ test_theta2() // jlm::rvsdg::view(graph, stdout); jlm::llvm::cne cne; - cne.run(rm, statisticsCollector); + cne.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph, stdout); assert(lv2.post->origin() == u1); @@ -264,7 +264,7 @@ test_theta3() // jlm::rvsdg::view(graph, stdout); jlm::llvm::cne cne; - cne.run(rm, statisticsCollector); + cne.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph, stdout); assert(r1->result(2)->origin() == r1->result(4)->origin()); @@ -318,7 +318,7 @@ test_theta4() // jlm::rvsdg::view(graph, stdout); jlm::llvm::cne cne; - cne.run(rm, statisticsCollector); + cne.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph, stdout); assert(ex1.origin() != ex2.origin()); @@ -362,7 +362,7 @@ test_theta5() // jlm::rvsdg::view(graph, stdout); jlm::llvm::cne cne; - cne.run(rm, statisticsCollector); + cne.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph, stdout); assert(ex1.origin() == ex2.origin()); @@ -397,7 +397,7 @@ test_lambda() // jlm::rvsdg::view(graph.GetRootRegion(), stdout); jlm::llvm::cne cne; - cne.run(rm, statisticsCollector); + cne.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph.GetRootRegion(), stdout); auto bn1 = jlm::rvsdg::output::GetNode(*b1); @@ -445,7 +445,7 @@ test_phi() // jlm::rvsdg::view(graph.GetRootRegion(), stdout); jlm::llvm::cne cne; - cne.run(rm, statisticsCollector); + cne.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph.GetRootRegion(), stdout); assert( diff --git a/tests/jlm/llvm/opt/test-inlining.cpp b/tests/jlm/llvm/opt/test-inlining.cpp index d436dbf47..12e96bec3 100644 --- a/tests/jlm/llvm/opt/test-inlining.cpp +++ b/tests/jlm/llvm/opt/test-inlining.cpp @@ -104,7 +104,7 @@ test1() // Act jlm::llvm::fctinline fctinline; - fctinline.run(rm, statisticsCollector); + fctinline.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph.GetRootRegion(), stdout); // Assert @@ -173,7 +173,7 @@ test2() // Act jlm::llvm::fctinline fctinline; - fctinline.run(rm, statisticsCollector); + fctinline.Run(rm, statisticsCollector); jlm::rvsdg::view(&graph.GetRootRegion(), stdout); // Assert diff --git a/tests/jlm/llvm/opt/test-inversion.cpp b/tests/jlm/llvm/opt/test-inversion.cpp index f87c7ba2a..d21ec74e3 100644 --- a/tests/jlm/llvm/opt/test-inversion.cpp +++ b/tests/jlm/llvm/opt/test-inversion.cpp @@ -67,7 +67,7 @@ test1() // jlm::rvsdg::view(graph.GetRootRegion(), stdout); jlm::llvm::tginversion tginversion; - tginversion.run(rm, statisticsCollector); + tginversion.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph.GetRootRegion(), stdout); assert(jlm::rvsdg::is(jlm::rvsdg::output::GetNode(*ex1.origin()))); @@ -114,7 +114,7 @@ test2() // jlm::rvsdg::view(graph.GetRootRegion(), stdout); jlm::llvm::tginversion tginversion; - tginversion.run(rm, statisticsCollector); + tginversion.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph.GetRootRegion(), stdout); assert(jlm::rvsdg::is(jlm::rvsdg::output::GetNode(*ex.origin()))); diff --git a/tests/jlm/llvm/opt/test-pull.cpp b/tests/jlm/llvm/opt/test-pull.cpp index c6bb08f3d..ef779399f 100644 --- a/tests/jlm/llvm/opt/test-pull.cpp +++ b/tests/jlm/llvm/opt/test-pull.cpp @@ -117,7 +117,7 @@ test_pull() jlm::rvsdg::view(graph, stdout); jlm::llvm::pullin pullin; - pullin.run(rm, statisticsCollector); + pullin.Run(rm, statisticsCollector); graph.PruneNodes(); jlm::rvsdg::view(graph, stdout); diff --git a/tests/jlm/llvm/opt/test-push.cpp b/tests/jlm/llvm/opt/test-push.cpp index 7cca44259..119d5d3c9 100644 --- a/tests/jlm/llvm/opt/test-push.cpp +++ b/tests/jlm/llvm/opt/test-push.cpp @@ -50,7 +50,7 @@ test_gamma() // jlm::rvsdg::view(graph.GetRootRegion(), stdout); jlm::llvm::pushout pushout; - pushout.run(rm, statisticsCollector); + pushout.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph.GetRootRegion(), stdout); assert(graph.GetRootRegion().nnodes() == 3); @@ -95,7 +95,7 @@ test_theta() // jlm::rvsdg::view(graph.GetRootRegion(), stdout); jlm::llvm::pushout pushout; - pushout.run(rm, statisticsCollector); + pushout.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph.GetRootRegion(), stdout); assert(graph.GetRootRegion().nnodes() == 3); diff --git a/tests/jlm/llvm/opt/test-unroll.cpp b/tests/jlm/llvm/opt/test-unroll.cpp index bbf0d2ba6..ee7e83969 100644 --- a/tests/jlm/llvm/opt/test-unroll.cpp +++ b/tests/jlm/llvm/opt/test-unroll.cpp @@ -248,7 +248,7 @@ test_unknown_boundaries() // jlm::rvsdg::view(graph, stdout); jlm::llvm::loopunroll loopunroll(2); - loopunroll.run(rm, statisticsCollector); + loopunroll.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph, stdout); auto node = jlm::rvsdg::output::GetNode(*ex1.origin()); @@ -258,7 +258,7 @@ test_unknown_boundaries() /* Create cleaner output */ DeadNodeElimination dne; - dne.run(rm, statisticsCollector); + dne.Run(rm, statisticsCollector); // jlm::rvsdg::view(graph, stdout); } @@ -344,7 +344,7 @@ test_nested_theta() // jlm::rvsdg::view(graph, stdout); jlm::llvm::loopunroll loopunroll(4); - loopunroll.run(rm, statisticsCollector); + loopunroll.Run(rm, statisticsCollector); /* The outher theta should contain two inner thetas */