mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			34 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
| contract C {
 | |
|     function g() public returns (uint ret) {
 | |
|         uint x = type(uint).max;
 | |
|         assembly {
 | |
|             mstore(0x20, x)
 | |
|             // both old and new optimizer should be able to evaluate this
 | |
|             ret := keccak256(0x20, 16)
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function f() public returns (uint ret) {
 | |
|         uint x = type(uint).max;
 | |
|         assembly {
 | |
|             mstore(0x20, x)
 | |
|             // For Yul optimizer, load resolver and loop invariant code motion
 | |
|             // would take the Keccak-256 outside the loop. For the old-optimizer,
 | |
|             // this is not possible.
 | |
|             // Net savings approximately: 20 * cost of Keccak-256 = 572
 | |
|             for {let i := 0} lt(i, 20) { i := add(i, 1) } {
 | |
|                 ret := keccak256(0x20, 16)
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| // ----
 | |
| // f() -> 0xcdb56c384a9682c600315e3470157a4cf7638d0d33e9dae5c40ffd2644fc5a80
 | |
| // gas irOptimized: 22239
 | |
| // gas legacy: 23385
 | |
| // gas legacyOptimized: 23092
 | |
| // g() -> 0xcdb56c384a9682c600315e3470157a4cf7638d0d33e9dae5c40ffd2644fc5a80
 | |
| // gas irOptimized: 21277
 | |
| // gas legacy: 21462
 | |
| // gas legacyOptimized: 21256
 |