mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Further fixes to the optimizer.
This commit is contained in:
parent
fb90e8876f
commit
c0afb4549e
@ -250,10 +250,11 @@ void ControlFlowGraph::gatherKnowledge()
|
||||
KnownStatePointer state = item.state;
|
||||
if (block.startState)
|
||||
{
|
||||
if (m_joinKnowledge)
|
||||
state->reduceToCommonKnowledge(*block.startState, !item.blocksSeen.count(item.blockId));
|
||||
else
|
||||
// We call reduceToCommonKnowledge even in the non-join setting to get the correct
|
||||
// sequence number
|
||||
if (!m_joinKnowledge)
|
||||
state->reset();
|
||||
state->reduceToCommonKnowledge(*block.startState, !item.blocksSeen.count(item.blockId));
|
||||
if (*state == *block.startState)
|
||||
continue;
|
||||
}
|
||||
|
@ -116,7 +116,7 @@ private:
|
||||
|
||||
unsigned m_lastUsedId = 0;
|
||||
AssemblyItems const& m_items;
|
||||
bool m_joinKnowledge;
|
||||
bool m_joinKnowledge = true;
|
||||
std::map<BlockId, BasicBlock> m_blocks;
|
||||
};
|
||||
|
||||
|
@ -282,6 +282,8 @@ BOOST_AUTO_TEST_CASE(storage_write_in_loops)
|
||||
compareVersions("f(uint256)", 36);
|
||||
}
|
||||
|
||||
// Test disabled with https://github.com/ethereum/solidity/pull/762
|
||||
// Information in joining branches is not retained anymore.
|
||||
BOOST_AUTO_TEST_CASE(retain_information_in_branches)
|
||||
{
|
||||
// This tests that the optimizer knows that we already have "z == sha3(y)" inside both branches.
|
||||
@ -315,7 +317,8 @@ BOOST_AUTO_TEST_CASE(retain_information_in_branches)
|
||||
if (_instr == Instruction::SHA3)
|
||||
numSHA3s++;
|
||||
});
|
||||
BOOST_CHECK_EQUAL(1, numSHA3s);
|
||||
// TEST DISABLED - OPTIMIZER IS NOT EFFECTIVE ON THIS ONE ANYMORE
|
||||
// BOOST_CHECK_EQUAL(1, numSHA3s);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(store_tags_as_unions)
|
||||
|
Loading…
Reference in New Issue
Block a user