Skip to content

Commit 7e994ce

Browse files
committed
Move ssa pipeline things into own subdirectory
1 parent 78627e0 commit 7e994ce

17 files changed

+133
-133
lines changed

libyul/CMakeLists.txt

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,13 @@ add_library(yul
4242
ScopeFiller.h
4343
Utilities.cpp
4444
Utilities.h
45-
YulControlFlowGraphExporter.h
46-
YulControlFlowGraphExporter.cpp
4745
YulName.h
4846
YulString.h
4947
backends/evm/AbstractAssembly.h
5048
backends/evm/AsmCodeGen.cpp
5149
backends/evm/AsmCodeGen.h
5250
backends/evm/ConstantOptimiser.cpp
5351
backends/evm/ConstantOptimiser.h
54-
backends/evm/ControlFlow.cpp
55-
backends/evm/ControlFlow.h
5652
backends/evm/ControlFlowGraph.h
5753
backends/evm/ControlFlowGraphBuilder.cpp
5854
backends/evm/ControlFlowGraphBuilder.h
@@ -72,21 +68,25 @@ add_library(yul
7268
backends/evm/NoOutputAssembly.cpp
7369
backends/evm/OptimizedEVMCodeTransform.cpp
7470
backends/evm/OptimizedEVMCodeTransform.h
75-
backends/evm/SSACFGLiveness.cpp
76-
backends/evm/SSACFGLiveness.h
77-
backends/evm/SSACFGLoopNestingForest.cpp
78-
backends/evm/SSACFGLoopNestingForest.h
79-
backends/evm/SSACFGTopologicalSort.cpp
80-
backends/evm/SSACFGTopologicalSort.h
81-
backends/evm/SSAControlFlowGraph.cpp
82-
backends/evm/SSAControlFlowGraph.h
83-
backends/evm/SSAControlFlowGraphBuilder.cpp
84-
backends/evm/SSAControlFlowGraphBuilder.h
8571
backends/evm/StackHelpers.h
8672
backends/evm/StackLayoutGenerator.cpp
8773
backends/evm/StackLayoutGenerator.h
8874
backends/evm/VariableReferenceCounter.h
8975
backends/evm/VariableReferenceCounter.cpp
76+
backends/evm/ssa/ControlFlow.cpp
77+
backends/evm/ssa/ControlFlow.h
78+
backends/evm/ssa/LivenessAnalysis.cpp
79+
backends/evm/ssa/LivenessAnalysis.h
80+
backends/evm/ssa/SSACFGLoopNestingForest.cpp
81+
backends/evm/ssa/SSACFGLoopNestingForest.h
82+
backends/evm/ssa/SSACFGTopologicalSort.cpp
83+
backends/evm/ssa/SSACFGTopologicalSort.h
84+
backends/evm/ssa/SSACFG.cpp
85+
backends/evm/ssa/SSACFG.h
86+
backends/evm/ssa/SSACFGBuilder.cpp
87+
backends/evm/ssa/SSACFGBuilder.h
88+
backends/evm/ssa/SSACFGJsonExporter.h
89+
backends/evm/ssa/SSACFGJsonExporter.cpp
9090
optimiser/ASTCopier.cpp
9191
optimiser/ASTCopier.h
9292
optimiser/ASTWalker.cpp

libyul/YulStack.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@
2020

2121
#include <libyul/AsmAnalysis.h>
2222
#include <libyul/AsmAnalysisInfo.h>
23-
#include <libyul/backends/evm/SSAControlFlowGraphBuilder.h>
23+
#include <libyul/backends/evm/ssa/SSACFGBuilder.h>
24+
#include <libyul/backends/evm/ssa/SSACFGJsonExporter.h>
2425
#include <libyul/backends/evm/EthAssemblyAdapter.h>
2526
#include <libyul/backends/evm/EVMCodeTransform.h>
2627
#include <libyul/backends/evm/EVMDialect.h>
2728
#include <libyul/backends/evm/EVMObjectCompiler.h>
2829
#include <libyul/ObjectParser.h>
2930
#include <libyul/optimiser/Semantics.h>
3031
#include <libyul/optimiser/Suite.h>
31-
#include <libyul/YulControlFlowGraphExporter.h>
3232
#include <libevmasm/Assembly.h>
3333
#include <libevmasm/Ethdebug.h>
3434
#include <liblangutil/Scanner.h>
@@ -398,14 +398,14 @@ Json YulStack::cfgJson() const
398398
// operations to the control flow graphs
399399
bool constexpr keepLiteralAssignments = true;
400400
// NOTE: The block Ids are reset for each object
401-
std::unique_ptr<ControlFlow> controlFlow = SSAControlFlowGraphBuilder::build(
401+
std::unique_ptr<ssa::ControlFlow> controlFlow = ssa::SSACFGBuilder::build(
402402
*_object.analysisInfo,
403403
languageToDialect(m_language, m_evmVersion, m_eofVersion),
404404
_object.code()->root(),
405405
keepLiteralAssignments
406406
);
407-
std::unique_ptr<ControlFlowLiveness> liveness = std::make_unique<ControlFlowLiveness>(*controlFlow);
408-
YulControlFlowGraphExporter exporter(*controlFlow, liveness.get());
407+
std::unique_ptr<ssa::ControlFlowLiveness> liveness = std::make_unique<ssa::ControlFlowLiveness>(*controlFlow);
408+
ssa::SSACFGJsonExporter exporter(*controlFlow, liveness.get());
409409
return exporter.run();
410410
};
411411

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,16 @@
1616
*/
1717
// SPDX-License-Identifier: GPL-3.0
1818

19-
#include <libyul/backends/evm/ControlFlow.h>
19+
#include <libyul/backends/evm/ssa/ControlFlow.h>
20+
2021
#include <range/v3/range/conversion.hpp>
2122

22-
using namespace solidity::yul;
23+
using namespace solidity::yul::ssa;
2324

2425
ControlFlowLiveness::ControlFlowLiveness(ControlFlow const& _controlFlow):
2526
controlFlow(_controlFlow),
26-
mainLiveness(std::make_unique<SSACFGLiveness>(*_controlFlow.mainGraph)),
27-
functionLiveness(_controlFlow.functionGraphs | ranges::views::transform([](auto const& _cfg) { return std::make_unique<SSACFGLiveness>(*_cfg); }) | ranges::to<std::vector>)
27+
mainLiveness(std::make_unique<LivenessAnalysis>(*_controlFlow.mainGraph)),
28+
functionLiveness(_controlFlow.functionGraphs | ranges::views::transform([](auto const& _cfg) { return std::make_unique<LivenessAnalysis>(*_cfg); }) | ranges::to<std::vector>)
2829
{ }
2930

3031
std::string ControlFlowLiveness::toDot() const
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@
1818

1919
#pragma once
2020

21+
#include <libyul/backends/evm/ssa/LivenessAnalysis.h>
22+
#include <libyul/backends/evm/ssa/SSACFG.h>
23+
2124
#include <libyul/AST.h>
2225
#include <libyul/Scope.h>
23-
#include <libyul/backends/evm/SSACFGLiveness.h>
24-
#include <libyul/backends/evm/SSAControlFlowGraph.h>
2526

26-
namespace solidity::yul
27+
namespace solidity::yul::ssa
2728
{
2829

2930
struct ControlFlow;
@@ -32,8 +33,8 @@ struct ControlFlowLiveness{
3233
explicit ControlFlowLiveness(ControlFlow const& _controlFlow);
3334

3435
std::reference_wrapper<ControlFlow const> controlFlow;
35-
std::unique_ptr<SSACFGLiveness> mainLiveness;
36-
std::vector<std::unique_ptr<SSACFGLiveness>> functionLiveness;
36+
std::unique_ptr<LivenessAnalysis> mainLiveness;
37+
std::vector<std::unique_ptr<LivenessAnalysis>> functionLiveness;
3738

3839
std::string toDot() const;
3940
};

libyul/backends/evm/SSACFGLiveness.cpp renamed to libyul/backends/evm/ssa/LivenessAnalysis.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@
1616
*/
1717
// SPDX-License-Identifier: GPL-3.0
1818

19-
#include <libyul/backends/evm/SSACFGLiveness.h>
19+
#include <libyul/backends/evm/ssa/LivenessAnalysis.h>
2020

2121
#include <libsolutil/Visitor.h>
2222

2323
#include <range/v3/range/conversion.hpp>
2424
#include <range/v3/view/filter.hpp>
2525
#include <range/v3/view/reverse.hpp>
2626

27-
using namespace solidity::yul;
27+
using namespace solidity::yul::ssa;
2828

2929
namespace
3030
{
@@ -37,7 +37,7 @@ constexpr auto literalsFilter(SSACFG const& _cfg)
3737
}
3838
}
3939

40-
std::set<SSACFG::ValueId> SSACFGLiveness::blockExitValues(SSACFG::BlockId const& _blockId) const
40+
std::set<SSACFG::ValueId> LivenessAnalysis::blockExitValues(SSACFG::BlockId const& _blockId) const
4141
{
4242
std::set<SSACFG::ValueId> result;
4343
util::GenericVisitor exitVisitor {
@@ -60,7 +60,7 @@ std::set<SSACFG::ValueId> SSACFGLiveness::blockExitValues(SSACFG::BlockId const&
6060
return result;
6161
}
6262

63-
SSACFGLiveness::SSACFGLiveness(SSACFG const& _cfg):
63+
LivenessAnalysis::LivenessAnalysis(SSACFG const& _cfg):
6464
m_cfg(_cfg),
6565
m_topologicalSort(_cfg),
6666
m_loopNestingForest(m_topologicalSort),
@@ -75,7 +75,7 @@ SSACFGLiveness::SSACFGLiveness(SSACFG const& _cfg):
7575
fillOperationsLiveOut();
7676
}
7777

78-
void SSACFGLiveness::runDagDfs()
78+
void LivenessAnalysis::runDagDfs()
7979
{
8080
// SSA Book, Algorithm 9.2
8181
for (auto const blockIdValue: m_topologicalSort.postOrder())
@@ -137,7 +137,7 @@ void SSACFGLiveness::runDagDfs()
137137
}
138138
}
139139

140-
void SSACFGLiveness::runLoopTreeDfs(size_t const _loopHeader)
140+
void LivenessAnalysis::runLoopTreeDfs(size_t const _loopHeader)
141141
{
142142
// SSA Book, Algorithm 9.3
143143
if (m_loopNestingForest.loopNodes().count(_loopHeader) > 0)
@@ -161,7 +161,7 @@ void SSACFGLiveness::runLoopTreeDfs(size_t const _loopHeader)
161161
}
162162
}
163163

164-
void SSACFGLiveness::fillOperationsLiveOut()
164+
void LivenessAnalysis::fillOperationsLiveOut()
165165
{
166166
for (size_t blockIdValue = 0; blockIdValue < m_cfg.numBlocks(); ++blockIdValue)
167167
{

libyul/backends/evm/SSACFGLiveness.h renamed to libyul/backends/evm/ssa/LivenessAnalysis.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,25 @@
1818

1919
#pragma once
2020

21-
#include <libyul/backends/evm/SSACFGLoopNestingForest.h>
22-
#include <libyul/backends/evm/SSACFGTopologicalSort.h>
23-
#include <libyul/backends/evm/SSAControlFlowGraph.h>
21+
#include <libyul/backends/evm/ssa/SSACFGTopologicalSort.h>
22+
#include <libyul/backends/evm/ssa/SSACFG.h>
23+
#include <libyul/backends/evm/ssa/SSACFGLoopNestingForest.h>
2424

2525
#include <cstddef>
2626
#include <set>
2727
#include <vector>
2828

29-
namespace solidity::yul
29+
namespace solidity::yul::ssa
3030
{
3131

3232
/// Performs liveness analysis on a reducible SSA CFG following Algorithm 9.1 in [1].
3333
///
3434
/// [1] Rastello, Fabrice, and Florent Bouchez Tichadou, eds. SSA-based Compiler Design. Springer, 2022.
35-
class SSACFGLiveness
35+
class LivenessAnalysis
3636
{
3737
public:
3838
using LivenessData = std::set<SSACFG::ValueId>;
39-
explicit SSACFGLiveness(SSACFG const& _cfg);
39+
explicit LivenessAnalysis(SSACFG const& _cfg);
4040

4141
LivenessData const& liveIn(SSACFG::BlockId _blockId) const { return m_liveIns[_blockId.value]; }
4242
LivenessData const& liveOut(SSACFG::BlockId _blockId) const { return m_liveOuts[_blockId.value]; }

libyul/backends/evm/SSAControlFlowGraph.cpp renamed to libyul/backends/evm/ssa/SSACFG.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
*/
1717
// SPDX-License-Identifier: GPL-3.0
1818

19-
#include <libyul/backends/evm/SSAControlFlowGraph.h>
19+
#include <libyul/backends/evm/ssa/SSACFG.h>
2020

21-
#include <libyul/backends/evm/SSACFGLiveness.h>
21+
#include <libyul/backends/evm/ssa/LivenessAnalysis.h>
2222

2323
#include <libsolutil/StringUtils.h>
2424
#include <libsolutil/Visitor.h>
@@ -33,18 +33,19 @@
3333
using namespace solidity;
3434
using namespace solidity::util;
3535
using namespace solidity::yul;
36+
using namespace solidity::yul::ssa;
3637

3738
namespace
3839
{
3940
class SSACFGPrinter
4041
{
4142
public:
42-
SSACFGPrinter(SSACFG const& _cfg, SSACFG::BlockId _blockId, SSACFGLiveness const* _liveness):
43+
SSACFGPrinter(SSACFG const& _cfg, SSACFG::BlockId _blockId, LivenessAnalysis const* _liveness):
4344
m_cfg(_cfg), m_functionIndex(0), m_liveness(_liveness)
4445
{
4546
printBlock(_blockId);
4647
}
47-
SSACFGPrinter(SSACFG const& _cfg, size_t _functionIndex, Scope::Function const& _function, SSACFGLiveness const* _liveness):
48+
SSACFGPrinter(SSACFG const& _cfg, size_t _functionIndex, Scope::Function const& _function, LivenessAnalysis const* _liveness):
4849
m_cfg(_cfg), m_functionIndex(_functionIndex), m_liveness(_liveness)
4950
{
5051
printFunction(_function);
@@ -291,15 +292,15 @@ class SSACFGPrinter
291292

292293
SSACFG const& m_cfg;
293294
size_t m_functionIndex;
294-
SSACFGLiveness const* m_liveness;
295+
LivenessAnalysis const* m_liveness;
295296
std::stringstream m_result{};
296297
};
297298
}
298299

299300
std::string SSACFG::toDot(
300301
bool _includeDiGraphDefinition,
301302
std::optional<size_t> _functionIndex,
302-
SSACFGLiveness const* _liveness
303+
LivenessAnalysis const* _liveness
303304
) const
304305
{
305306
std::ostringstream output;
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@
3535
#include <list>
3636
#include <vector>
3737

38-
namespace solidity::yul
38+
namespace solidity::yul::ssa
3939
{
40-
class SSACFGLiveness;
40+
class LivenessAnalysis;
4141

4242
class SSACFG
4343
{
@@ -227,7 +227,7 @@ class SSACFG
227227
std::string toDot(
228228
bool _includeDiGraphDefinition=true,
229229
std::optional<size_t> _functionIndex=std::nullopt,
230-
SSACFGLiveness const* _liveness=nullptr
230+
LivenessAnalysis const* _liveness=nullptr
231231
) const;
232232
private:
233233
std::deque<ValueInfo> m_valueInfos;

0 commit comments

Comments
 (0)