diff options
author | Yoichi Hirai <i@yoichihirai.com> | 2017-03-08 19:11:16 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-08 19:11:16 +0800 |
commit | 85411f4f677769f3ea1b69c49c44d9c08180dbd4 (patch) | |
tree | 7acfbf6140c925c48036eb527e4dd11d42283413 /libevmasm/ConstantOptimiser.cpp | |
parent | a1e350a4aeef11865d2deee5a4e59feb0625d053 (diff) | |
parent | 244b45e1ffe13cc12e7d6fd18467094b4bb0cb6a (diff) | |
download | dexon-solidity-85411f4f677769f3ea1b69c49c44d9c08180dbd4.tar dexon-solidity-85411f4f677769f3ea1b69c49c44d9c08180dbd4.tar.gz dexon-solidity-85411f4f677769f3ea1b69c49c44d9c08180dbd4.tar.bz2 dexon-solidity-85411f4f677769f3ea1b69c49c44d9c08180dbd4.tar.lz dexon-solidity-85411f4f677769f3ea1b69c49c44d9c08180dbd4.tar.xz dexon-solidity-85411f4f677769f3ea1b69c49c44d9c08180dbd4.tar.zst dexon-solidity-85411f4f677769f3ea1b69c49c44d9c08180dbd4.zip |
Merge pull request #1736 from ethereum/boundoptimizer
Add upper bound for computing constants.
Diffstat (limited to 'libevmasm/ConstantOptimiser.cpp')
-rw-r--r-- | libevmasm/ConstantOptimiser.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libevmasm/ConstantOptimiser.cpp b/libevmasm/ConstantOptimiser.cpp index 86244e17..a1dfd21c 100644 --- a/libevmasm/ConstantOptimiser.cpp +++ b/libevmasm/ConstantOptimiser.cpp @@ -194,7 +194,7 @@ AssemblyItems ComputeMethod::findRepresentation(u256 const& _value) // Is not always better, try literal and decomposition method. AssemblyItems routine{u256(_value)}; bigint bestGas = gasNeeded(routine); - for (unsigned bits = 255; bits > 8; --bits) + for (unsigned bits = 255; bits > 8 && m_maxSteps > 0; --bits) { unsigned gapDetector = unsigned(_value >> (bits - 8)) & 0x1ff; if (gapDetector != 0xff && gapDetector != 0x100) @@ -219,6 +219,8 @@ AssemblyItems ComputeMethod::findRepresentation(u256 const& _value) else if (lowerPart < 0) newRoutine.push_back(Instruction::SUB); + if (m_maxSteps > 0) + m_maxSteps--; bigint newGas = gasNeeded(newRoutine); if (newGas < bestGas) { |