Skip to content

Commit

Permalink
cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
clonker committed Aug 28, 2024
1 parent af3798c commit 40a694d
Show file tree
Hide file tree
Showing 7 changed files with 330 additions and 324 deletions.
4 changes: 2 additions & 2 deletions libyul/backends/evm/SSAControlFlowGraphBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ SSACFG::ValueId tryRemoveTrivialPhi(SSACFG& _cfg, SSACFG::ValueId _phi)
{
if (arg == same || arg == _phi)
continue;
if (same)
if (same.hasValue())
return _phi;
same = arg;
}
Expand Down Expand Up @@ -120,7 +120,7 @@ SSACFG::ValueId tryRemoveTrivialPhi(SSACFG& _cfg, SSACFG::ValueId _phi)
_cfg.block(phiBlock).phis.erase(_phi);
findUses(phiBlock, findUses);

if (!same)
if (!same.hasValue())
{
// This will happen for unreachable paths.
// TODO: check how best to deal with this
Expand Down
1 change: 1 addition & 0 deletions libyul/backends/evm/SSAControlFlowGraphBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ class SSAControlFlowGraphBuilder
SSACFG::ValueId readVariable(Scope::Variable const& _variable, SSACFG::BlockId _block);
SSACFG::ValueId readVariableRecursive(Scope::Variable const& _variable, SSACFG::BlockId _block);
SSACFG::ValueId addPhiOperands(Scope::Variable const& _variable, SSACFG::ValueId _phi);
SSACFG::ValueId tryRemoveTrivialPhi(SSACFG::ValueId _phi);
void writeVariable(Scope::Variable const& _variable, SSACFG::BlockId _block, SSACFG::ValueId _value);

SSACFG& m_graph;
Expand Down
237 changes: 119 additions & 118 deletions test/libyul/yulSSAControlFlowGraph/complex.yul
Original file line number Diff line number Diff line change
Expand Up @@ -46,133 +46,134 @@
// ----
// digraph SSACFG {
// nodesep=0.7;
// node[shape=box];
// graph[fontname="DejaVu Sans" ]
// node[shape=box,fontname="DejaVu Sans"];
//
// Entry [label="Entry"];
// Entry -> Block0;
// Block0 [label="\
// Block 0\nv78 := f(2, 1)\l\
// pop(v78)\l\
// "];
// Block0Exit [label="MainExit"];
// Block0 -> Block0Exit;
// FunctionEntry_f_1 [label="function f:
// Entry0 [label="Entry"];
// Entry0 -> Block0_0;
// Block0_0 [label="\
// Block 0\nv2 := f(2, 1)\l\
// pop(v2)\l\
// "];
// Block0_0Exit [label="MainExit"];
// Block0_0 -> Block0_0Exit;
// FunctionEntry_f_0 [label="function f:
// c := f(v0, v1)"];
// FunctionEntry_f_1 -> Block1;
// Block1 [label="\
// Block 1\n"];
// Block1 -> Block1Exit [arrowhead=none];
// Block1Exit [label="Jump" shape=oval];
// Block1Exit -> Block2;
// Block2 [label="\
// Block 2\nv4 := φ(\l\
// Block 1 => 42,\l\
// Block 22 => v43\l\
// FunctionEntry_f_0 -> Block1_0;
// Block1_0 [label="\
// Block 0\n"];
// Block1_0 -> Block1_0Exit [arrowhead=none];
// Block1_0Exit [label="Jump" shape=oval];
// Block1_0Exit -> Block1_1;
// Block1_1 [label="\
// Block 1\nv4 := φ(\l\
// Block 0 => 42,\l\
// Block 21 => v43\l\
// )\l\
// v5 := lt(v0, v4)\l\
// "];
// Block2 -> Block2Exit;
// Block2Exit [label="{ If v5| { <0> Zero | <1> NonZero }}" shape=Mrecord];
// Block2Exit:0 -> Block5;
// Block2Exit:1 -> Block3;
// Block3 [label="\
// Block 3\nv6 := mload(v4)\l\
// Block1_1 -> Block1_1Exit;
// Block1_1Exit [label="{ If v5| { <0> Zero | <1> NonZero }}" shape=Mrecord];
// Block1_1Exit:0 -> Block1_4;
// Block1_1Exit:1 -> Block1_2;
// Block1_2 [label="\
// Block 2\nv6 := mload(v4)\l\
// v7 := eq(0, v6)\l\
// "];
// Block3 -> Block3Exit;
// Block3Exit [label="{ If v7| { <0> Zero | <1> NonZero }}" shape=Mrecord];
// Block3Exit:0 -> Block8;
// Block3Exit:1 -> Block7;
// Block5 [label="\
// Block 5\nsstore(3084, 12)\l\
// "];
// Block5Exit [label="FunctionReturn[v17]"];
// Block5 -> Block5Exit;
// Block7 [label="\
// Block 7\nsstore(514, 2)\l\
// "];
// Block7 -> Block7Exit [arrowhead=none];
// Block7Exit [label="Jump" shape=oval];
// Block7Exit -> Block5;
// Block8 [label="\
// Block 8\nv13 := eq(1, v6)\l\
// "];
// Block8 -> Block8Exit;
// Block8Exit [label="{ If v13| { <0> Zero | <1> NonZero }}" shape=Mrecord];
// Block8Exit:0 -> Block11;
// Block8Exit:1 -> Block10;
// Block10 [label="\
// Block 10\nsstore(1028, 4)\l\
// "];
// Block10Exit [label="FunctionReturn[v17]"];
// Block10 -> Block10Exit;
// Block11 [label="\
// Block 11\nv20 := eq(2, v6)\l\
// "];
// Block11 -> Block11Exit;
// Block11Exit [label="{ If v20| { <0> Zero | <1> NonZero }}" shape=Mrecord];
// Block11Exit:0 -> Block14;
// Block11Exit:1 -> Block13;
// Block13 [label="\
// Block 13\nsstore(1542, 6)\l\
// Block1_2 -> Block1_2Exit;
// Block1_2Exit [label="{ If v7| { <0> Zero | <1> NonZero }}" shape=Mrecord];
// Block1_2Exit:0 -> Block1_7;
// Block1_2Exit:1 -> Block1_6;
// Block1_4 [label="\
// Block 4\nsstore(3084, 12)\l\
// "];
// Block1_4Exit [label="FunctionReturn[v17]"];
// Block1_4 -> Block1_4Exit;
// Block1_6 [label="\
// Block 6\nsstore(514, 2)\l\
// "];
// Block1_6 -> Block1_6Exit [arrowhead=none];
// Block1_6Exit [label="Jump" shape=oval];
// Block1_6Exit -> Block1_4;
// Block1_7 [label="\
// Block 7\nv13 := eq(1, v6)\l\
// "];
// Block1_7 -> Block1_7Exit;
// Block1_7Exit [label="{ If v13| { <0> Zero | <1> NonZero }}" shape=Mrecord];
// Block1_7Exit:0 -> Block1_10;
// Block1_7Exit:1 -> Block1_9;
// Block1_9 [label="\
// Block 9\nsstore(1028, 4)\l\
// "];
// Block1_9Exit [label="FunctionReturn[v17]"];
// Block1_9 -> Block1_9Exit;
// Block1_10 [label="\
// Block 10\nv20 := eq(2, v6)\l\
// "];
// Block1_10 -> Block1_10Exit;
// Block1_10Exit [label="{ If v20| { <0> Zero | <1> NonZero }}" shape=Mrecord];
// Block1_10Exit:0 -> Block1_13;
// Block1_10Exit:1 -> Block1_12;
// Block1_12 [label="\
// Block 12\nsstore(1542, 6)\l\
// revert(0, 0)\l\
// "];
// Block13Exit [label="Terminated"];
// Block13 -> Block13Exit;
// Block14 [label="\
// Block 14\nv25 := eq(3, v6)\l\
// "];
// Block14 -> Block14Exit;
// Block14Exit [label="{ If v25| { <0> Zero | <1> NonZero }}" shape=Mrecord];
// Block14Exit:0 -> Block17;
// Block14Exit:1 -> Block16;
// Block16 [label="\
// Block 16\nsstore(2056, 8)\l\
// "];
// Block16 -> Block16Exit [arrowhead=none];
// Block16Exit [label="Jump" shape=oval];
// Block16Exit -> Block6;
// Block17 [label="\
// Block 17\nv29 := mload(v1)\l\
// "];
// Block17 -> Block17Exit;
// Block17Exit [label="{ If v29| { <0> Zero | <1> NonZero }}" shape=Mrecord];
// Block17Exit:0 -> Block19;
// Block17Exit:1 -> Block18;
// Block6 [label="\
// Block 6\nsstore(2827, 11)\l\
// "];
// Block6 -> Block6Exit [arrowhead=none];
// Block6Exit [label="Jump" shape=oval];
// Block6Exit -> Block4;
// Block18 [label="\
// Block 18\nreturn(0, 0)\l\
// "];
// Block18Exit [label="Terminated"];
// Block18 -> Block18Exit;
// Block19 [label="\
// Block 19\nsstore(2570, 10)\l\
// "];
// Block19 -> Block19Exit [arrowhead=none];
// Block19Exit [label="Jump" shape=oval];
// Block19Exit -> Block6;
// Block4 [label="\
// Block 4\nv43 := add(1, v4)\l\
// Block1_12Exit [label="Terminated"];
// Block1_12 -> Block1_12Exit;
// Block1_13 [label="\
// Block 13\nv25 := eq(3, v6)\l\
// "];
// Block1_13 -> Block1_13Exit;
// Block1_13Exit [label="{ If v25| { <0> Zero | <1> NonZero }}" shape=Mrecord];
// Block1_13Exit:0 -> Block1_16;
// Block1_13Exit:1 -> Block1_15;
// Block1_15 [label="\
// Block 15\nsstore(2056, 8)\l\
// "];
// Block1_15 -> Block1_15Exit [arrowhead=none];
// Block1_15Exit [label="Jump" shape=oval];
// Block1_15Exit -> Block1_5;
// Block1_16 [label="\
// Block 16\nv29 := mload(v1)\l\
// "];
// Block1_16 -> Block1_16Exit;
// Block1_16Exit [label="{ If v29| { <0> Zero | <1> NonZero }}" shape=Mrecord];
// Block1_16Exit:0 -> Block1_18;
// Block1_16Exit:1 -> Block1_17;
// Block1_5 [label="\
// Block 5\nsstore(2827, 11)\l\
// "];
// Block1_5 -> Block1_5Exit [arrowhead=none];
// Block1_5Exit [label="Jump" shape=oval];
// Block1_5Exit -> Block1_3;
// Block1_17 [label="\
// Block 17\nreturn(0, 0)\l\
// "];
// Block1_17Exit [label="Terminated"];
// Block1_17 -> Block1_17Exit;
// Block1_18 [label="\
// Block 18\nsstore(2570, 10)\l\
// "];
// Block1_18 -> Block1_18Exit [arrowhead=none];
// Block1_18Exit [label="Jump" shape=oval];
// Block1_18Exit -> Block1_5;
// Block1_3 [label="\
// Block 3\nv43 := add(1, v4)\l\
// v44 := calldataload(v43)\l\
// "];
// Block4 -> Block4Exit;
// Block4Exit [label="{ If v44| { <0> Zero | <1> NonZero }}" shape=Mrecord];
// Block4Exit:0 -> Block22;
// Block4Exit:1 -> Block21;
// Block21 [label="\
// Block 21\nsstore(v43, 0)\l\
// "];
// Block21Exit [label="FunctionReturn[v45]"];
// Block21 -> Block21Exit;
// Block22 [label="\
// Block 22\nsstore(65535, 255)\l\
// "];
// Block22 -> Block22Exit [arrowhead=none];
// Block22Exit [label="Jump" shape=oval];
// Block22Exit -> Block2;
// Block1_3 -> Block1_3Exit;
// Block1_3Exit [label="{ If v44| { <0> Zero | <1> NonZero }}" shape=Mrecord];
// Block1_3Exit:0 -> Block1_21;
// Block1_3Exit:1 -> Block1_20;
// Block1_20 [label="\
// Block 20\nsstore(v43, 0)\l\
// "];
// Block1_20Exit [label="FunctionReturn[v45]"];
// Block1_20 -> Block1_20Exit;
// Block1_21 [label="\
// Block 21\nsstore(65535, 255)\l\
// "];
// Block1_21 -> Block1_21Exit [arrowhead=none];
// Block1_21Exit [label="Jump" shape=oval];
// Block1_21Exit -> Block1_1;
// }
Loading

0 comments on commit 40a694d

Please sign in to comment.