Further fixes to the optimizer.

This commit is contained in:
chriseth 2016-08-01 23:13:56 +02:00
parent fb90e8876f
commit c0afb4549e
3 changed files with 9 additions and 5 deletions

View File

@ -250,10 +250,11 @@ void ControlFlowGraph::gatherKnowledge()
KnownStatePointer state = item.state; KnownStatePointer state = item.state;
if (block.startState) if (block.startState)
{ {
if (m_joinKnowledge) // We call reduceToCommonKnowledge even in the non-join setting to get the correct
state->reduceToCommonKnowledge(*block.startState, !item.blocksSeen.count(item.blockId)); // sequence number
else if (!m_joinKnowledge)
state->reset(); state->reset();
state->reduceToCommonKnowledge(*block.startState, !item.blocksSeen.count(item.blockId));
if (*state == *block.startState) if (*state == *block.startState)
continue; continue;
} }

View File

@ -116,7 +116,7 @@ private:
unsigned m_lastUsedId = 0; unsigned m_lastUsedId = 0;
AssemblyItems const& m_items; AssemblyItems const& m_items;
bool m_joinKnowledge; bool m_joinKnowledge = true;
std::map<BlockId, BasicBlock> m_blocks; std::map<BlockId, BasicBlock> m_blocks;
}; };

View File

@ -282,6 +282,8 @@ BOOST_AUTO_TEST_CASE(storage_write_in_loops)
compareVersions("f(uint256)", 36); 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) BOOST_AUTO_TEST_CASE(retain_information_in_branches)
{ {
// This tests that the optimizer knows that we already have "z == sha3(y)" inside both 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) if (_instr == Instruction::SHA3)
numSHA3s++; 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) BOOST_AUTO_TEST_CASE(store_tags_as_unions)