diff --git a/libevmjit/Compiler.cpp b/libevmjit/Compiler.cpp index 2dc2b0c65..40dff5cb1 100644 --- a/libevmjit/Compiler.cpp +++ b/libevmjit/Compiler.cpp @@ -773,7 +773,7 @@ void Compiler::compileBasicBlock(BasicBlock& _basicBlock, bytes const& _bytecode auto outOff = stack.pop(); auto outSize = stack.pop(); - _gasMeter.commitCostBlock(gas); + _gasMeter.commitCostBlock(); // Require memory for in and out buffers _memory.require(outOff, outSize); // Out buffer first as we guess it will be after the in one @@ -783,6 +783,7 @@ void Compiler::compileBasicBlock(BasicBlock& _basicBlock, bytes const& _bytecode if (inst == Instruction::CALLCODE) receiveAddress = _runtimeManager.get(RuntimeData::Address); + _gasMeter.count(gas); auto ret = _ext.call(gas, receiveAddress, value, inOff, inSize, outOff, outSize, codeAddress); _gasMeter.giveBack(gas); stack.push(ret); diff --git a/libevmjit/GasMeter.cpp b/libevmjit/GasMeter.cpp index 5a5ced154..db386551d 100644 --- a/libevmjit/GasMeter.cpp +++ b/libevmjit/GasMeter.cpp @@ -181,10 +181,8 @@ void GasMeter::giveBack(llvm::Value* _gas) m_runtimeManager.setGas(m_builder.CreateAdd(m_runtimeManager.getGas(), _gas)); } -void GasMeter::commitCostBlock(llvm::Value* _additionalCost) +void GasMeter::commitCostBlock() { - assert(!_additionalCost || m_checkCall); // _additionalCost => m_checkCall; Must be inside cost-block - // If any uncommited block if (m_checkCall) { @@ -198,9 +196,6 @@ void GasMeter::commitCostBlock(llvm::Value* _additionalCost) m_checkCall->setArgOperand(0, Constant::get(m_blockCost)); // Update block cost in gas check call m_checkCall = nullptr; // End cost-block m_blockCost = 0; - - if (_additionalCost) - count(_additionalCost); } assert(m_blockCost == 0); } diff --git a/libevmjit/GasMeter.h b/libevmjit/GasMeter.h index 890791ff1..56da6eb9f 100644 --- a/libevmjit/GasMeter.h +++ b/libevmjit/GasMeter.h @@ -36,8 +36,7 @@ public: void countSha3Data(llvm::Value* _dataLength); /// Finalize cost-block by checking gas needed for the block before the block - /// @param _additionalCost adds additional cost to cost-block before commit - void commitCostBlock(llvm::Value* _additionalCost = nullptr); + void commitCostBlock(); /// Give back an amount of gas not used by a call void giveBack(llvm::Value* _gas);