MCPcopy Create free account
hub / github.com/argotorg/solidity / optimizeBreakingItem

Method optimizeBreakingItem

libevmasm/CommonSubexpressionEliminator.cpp:84–125  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

82}
83
84void CommonSubexpressionEliminator::optimizeBreakingItem()
85{
86 if (!m_breakingItem)
87 return;
88
89 ExpressionClasses& classes = m_state.expressionClasses();
90 SourceLocation const& itemLocation = m_breakingItem->location();
91 langutil::DebugData::ConstPtr debugData{langutil::DebugData::create(itemLocation)};
92 if (*m_breakingItem == AssemblyItem(Instruction::JUMPI))
93 {
94 AssemblyItem::JumpType jumpType = m_breakingItem->getJumpType();
95
96 Id condition = m_state.stackElement(m_state.stackHeight() - 1, debugData);
97 if (classes.knownNonZero(condition))
98 {
99 feedItem(AssemblyItem(Instruction::SWAP1, debugData), true);
100 feedItem(AssemblyItem(Instruction::POP, debugData), true);
101
102 AssemblyItem item(Instruction::JUMP, debugData);
103 item.setJumpType(jumpType);
104 m_breakingItem = classes.storeItem(item);
105 }
106 else if (classes.knownZero(condition))
107 {
108 AssemblyItem it(Instruction::POP, debugData);
109 feedItem(it, true);
110 feedItem(it, true);
111 m_breakingItem = nullptr;
112 }
113 }
114 else if (*m_breakingItem == AssemblyItem(Instruction::RETURN))
115 {
116 Id size = m_state.stackElement(m_state.stackHeight() - 1, debugData);
117 if (classes.knownZero(size))
118 {
119 feedItem(AssemblyItem(Instruction::POP, debugData), true);
120 feedItem(AssemblyItem(Instruction::POP, debugData), true);
121 AssemblyItem item(Instruction::STOP, debugData);
122 m_breakingItem = classes.storeItem(item);
123 }
124 }
125}
126
127CSECodeGenerator::CSECodeGenerator(
128 ExpressionClasses& _expressionClasses,

Callers

nothing calls this directly

Calls 9

getJumpTypeMethod · 0.80
stackElementMethod · 0.80
knownNonZeroMethod · 0.80
setJumpTypeMethod · 0.80
storeItemMethod · 0.80
knownZeroMethod · 0.80
AssemblyItemClass · 0.70
locationMethod · 0.45
stackHeightMethod · 0.45

Tested by

no test coverage detected