diff --git a/std/assembly/map.ts b/std/assembly/map.ts index 52ee7f60b1..c888cbc27f 100644 --- a/std/assembly/map.ts +++ b/std/assembly/map.ts @@ -88,8 +88,9 @@ export class Map { changetype(this.buckets) + (hashCode & this.bucketsMask) * BUCKET_SIZE ); while (entry) { - if (!(entry.taggedNext & EMPTY) && entry.key == key) return entry; - entry = changetype>(entry.taggedNext & ~EMPTY); + let taggedNext = entry.taggedNext; + if (!(taggedNext & EMPTY) && entry.key == key) return entry; + entry = changetype>(taggedNext & ~EMPTY); } return null; } @@ -177,9 +178,10 @@ export class Map { let oldEntry = changetype>(oldPtr); if (!(oldEntry.taggedNext & EMPTY)) { let newEntry = changetype>(newPtr); - newEntry.key = oldEntry.key; + let oldEntryKey = oldEntry.key; + newEntry.key = oldEntryKey; newEntry.value = oldEntry.value; - let newBucketIndex = HASH(oldEntry.key) & newBucketsMask; + let newBucketIndex = HASH(oldEntryKey) & newBucketsMask; let newBucketPtrBase = changetype(newBuckets) + newBucketIndex * BUCKET_SIZE; newEntry.taggedNext = load(newBucketPtrBase); store(newBucketPtrBase, newPtr); diff --git a/std/assembly/set.ts b/std/assembly/set.ts index ec14549d13..2fe540a551 100644 --- a/std/assembly/set.ts +++ b/std/assembly/set.ts @@ -85,8 +85,9 @@ export class Set { changetype(this.buckets) + (hashCode & this.bucketsMask) * BUCKET_SIZE ); while (entry) { - if (!(entry.taggedNext & EMPTY) && entry.key == key) return entry; - entry = changetype>(entry.taggedNext & ~EMPTY); + let taggedNext = entry.taggedNext; + if (!(taggedNext & EMPTY) && entry.key == key) return entry; + entry = changetype>(taggedNext & ~EMPTY); } return null; } @@ -157,8 +158,9 @@ export class Set { let oldEntry = changetype>(oldPtr); // unmanaged! if (!(oldEntry.taggedNext & EMPTY)) { let newEntry = changetype>(newPtr); // unmanaged! - newEntry.key = oldEntry.key; - let newBucketIndex = HASH(oldEntry.key) & newBucketsMask; + let oldEntryKey = oldEntry.key; + newEntry.key = oldEntryKey; + let newBucketIndex = HASH(oldEntryKey) & newBucketsMask; let newBucketPtrBase = changetype(newBuckets) + newBucketIndex * BUCKET_SIZE; newEntry.taggedNext = load(newBucketPtrBase); store(newBucketPtrBase, newPtr); diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index 12f892eb97..d65655a3d4 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -1307,6 +1307,7 @@ if local.get $0 i32.load offset=8 + local.tee $2 i32.const 1 i32.and if (result i32) @@ -1323,8 +1324,7 @@ local.get $0 return end - local.get $0 - i32.load offset=8 + local.get $2 i32.const -2 i32.and local.set $0 @@ -1370,7 +1370,7 @@ i32.shl i32.const 3 i32.div_s - local.tee $6 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor @@ -1383,12 +1383,12 @@ i32.const 12 i32.mul i32.add - local.set $7 + local.set $8 local.get $3 local.set $2 loop $while-continue|0 local.get $4 - local.get $7 + local.get $8 i32.ne if local.get $4 @@ -1400,6 +1400,7 @@ local.get $2 local.get $4 i32.load8_s + local.tee $6 i32.store8 local.get $2 local.get $4 @@ -1408,8 +1409,7 @@ local.get $2 local.get $5 local.get $1 - local.get $4 - i32.load8_s + local.get $6 i32.const -2128831035 i32.xor i32.const 16777619 @@ -1418,10 +1418,10 @@ i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $6 i32.load i32.store offset=8 - local.get $8 + local.get $6 local.get $2 i32.store local.get $2 @@ -1472,7 +1472,7 @@ local.get $1 i32.store offset=8 local.get $0 - local.get $6 + local.get $7 i32.store offset=12 local.get $0 local.get $0 @@ -1605,7 +1605,7 @@ if i32.const 1408 i32.const 1472 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -2437,7 +2437,7 @@ i32.shl i32.const 3 i32.div_s - local.tee $6 + local.tee $7 i32.const 3 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor @@ -2450,12 +2450,12 @@ i32.const 3 i32.shl i32.add - local.set $7 + local.set $8 local.get $3 local.set $2 loop $while-continue|0 local.get $4 - local.get $7 + local.get $8 i32.ne if local.get $4 @@ -2467,6 +2467,7 @@ local.get $2 local.get $4 i32.load8_s + local.tee $6 i32.store8 local.get $2 local.get $4 @@ -2475,8 +2476,7 @@ local.get $2 local.get $5 local.get $1 - local.get $4 - i32.load8_s + local.get $6 i32.const -2128831035 i32.xor i32.const 16777619 @@ -2485,10 +2485,10 @@ i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $6 i32.load i32.store offset=4 - local.get $8 + local.get $6 local.get $2 i32.store local.get $2 @@ -2539,7 +2539,7 @@ local.get $1 i32.store offset=8 local.get $0 - local.get $6 + local.get $7 i32.store offset=12 local.get $0 local.get $0 @@ -2581,6 +2581,7 @@ if local.get $1 i32.load offset=4 + local.tee $4 i32.const 1 i32.and if (result i32) @@ -2594,8 +2595,7 @@ i32.eq end br_if $__inlined_func$~lib/map/Map#find - local.get $1 - i32.load offset=4 + local.get $4 i32.const -2 i32.and local.set $1 @@ -2738,6 +2738,7 @@ if local.get $0 i32.load offset=8 + local.tee $2 i32.const 1 i32.and if (result i32) @@ -2752,8 +2753,7 @@ local.get $0 return end - local.get $0 - i32.load offset=8 + local.get $2 i32.const -2 i32.and local.set $0 @@ -2783,7 +2783,7 @@ i32.shl i32.const 3 i32.div_s - local.tee $6 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor @@ -2796,12 +2796,12 @@ i32.const 12 i32.mul i32.add - local.set $7 + local.set $8 local.get $3 local.set $2 loop $while-continue|0 local.get $4 - local.get $7 + local.get $8 i32.ne if local.get $4 @@ -2813,6 +2813,7 @@ local.get $2 local.get $4 i32.load + local.tee $6 i32.store local.get $2 local.get $4 @@ -2820,18 +2821,17 @@ i32.store offset=4 local.get $2 local.get $5 - local.get $4 - i32.load + local.get $6 call $~lib/util/hash/hash32 local.get $1 i32.and i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $6 i32.load i32.store offset=8 - local.get $8 + local.get $6 local.get $2 i32.store local.get $2 @@ -2882,7 +2882,7 @@ local.get $1 i32.store offset=8 local.get $0 - local.get $6 + local.get $7 i32.store offset=12 local.get $0 local.get $0 @@ -3645,7 +3645,7 @@ i32.shl i32.const 3 i32.div_s - local.tee $6 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor @@ -3658,12 +3658,12 @@ i32.const 12 i32.mul i32.add - local.set $7 + local.set $8 local.get $3 local.set $2 loop $while-continue|0 local.get $4 - local.get $7 + local.get $8 i32.ne if local.get $4 @@ -3675,6 +3675,7 @@ local.get $2 local.get $4 i32.load8_u + local.tee $6 i32.store8 local.get $2 local.get $4 @@ -3683,8 +3684,7 @@ local.get $2 local.get $5 local.get $1 - local.get $4 - i32.load8_u + local.get $6 i32.const -2128831035 i32.xor i32.const 16777619 @@ -3693,10 +3693,10 @@ i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $6 i32.load i32.store offset=8 - local.get $8 + local.get $6 local.get $2 i32.store local.get $2 @@ -3747,7 +3747,7 @@ local.get $1 i32.store offset=8 local.get $0 - local.get $6 + local.get $7 i32.store offset=12 local.get $0 local.get $0 @@ -3876,7 +3876,7 @@ if i32.const 1408 i32.const 1472 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -4018,7 +4018,7 @@ i32.shl i32.const 3 i32.div_s - local.tee $6 + local.tee $7 i32.const 3 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor @@ -4031,12 +4031,12 @@ i32.const 3 i32.shl i32.add - local.set $7 + local.set $8 local.get $3 local.set $2 loop $while-continue|0 local.get $4 - local.get $7 + local.get $8 i32.ne if local.get $4 @@ -4048,6 +4048,7 @@ local.get $2 local.get $4 i32.load8_u + local.tee $6 i32.store8 local.get $2 local.get $4 @@ -4056,8 +4057,7 @@ local.get $2 local.get $5 local.get $1 - local.get $4 - i32.load8_u + local.get $6 i32.const -2128831035 i32.xor i32.const 16777619 @@ -4066,10 +4066,10 @@ i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $6 i32.load i32.store offset=4 - local.get $8 + local.get $6 local.get $2 i32.store local.get $2 @@ -4120,7 +4120,7 @@ local.get $1 i32.store offset=8 local.get $0 - local.get $6 + local.get $7 i32.store offset=12 local.get $0 local.get $0 @@ -4160,6 +4160,7 @@ if local.get $1 i32.load offset=4 + local.tee $4 i32.const 1 i32.and if (result i32) @@ -4173,8 +4174,7 @@ i32.eq end br_if $__inlined_func$~lib/map/Map#find - local.get $1 - i32.load offset=4 + local.get $4 i32.const -2 i32.and local.set $1 @@ -4866,6 +4866,7 @@ if local.get $0 i32.load offset=8 + local.tee $2 i32.const 1 i32.and if (result i32) @@ -4882,8 +4883,7 @@ local.get $0 return end - local.get $0 - i32.load offset=8 + local.get $2 i32.const -2 i32.and local.set $0 @@ -4926,7 +4926,7 @@ i32.shl i32.const 3 i32.div_s - local.tee $6 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor @@ -4939,12 +4939,12 @@ i32.const 12 i32.mul i32.add - local.set $7 + local.set $8 local.get $3 local.set $2 loop $while-continue|0 local.get $4 - local.get $7 + local.get $8 i32.ne if local.get $4 @@ -4956,6 +4956,7 @@ local.get $2 local.get $4 i32.load16_s + local.tee $6 i32.store16 local.get $2 local.get $4 @@ -4963,18 +4964,17 @@ i32.store offset=4 local.get $2 local.get $5 - local.get $4 - i32.load16_s + local.get $6 call $~lib/util/hash/hash16 local.get $1 i32.and i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $6 i32.load i32.store offset=8 - local.get $8 + local.get $6 local.get $2 i32.store local.get $2 @@ -5025,7 +5025,7 @@ local.get $1 i32.store offset=8 local.get $0 - local.get $6 + local.get $7 i32.store offset=12 local.get $0 local.get $0 @@ -5150,7 +5150,7 @@ if i32.const 1408 i32.const 1472 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -5346,7 +5346,7 @@ i32.shl i32.const 3 i32.div_s - local.tee $6 + local.tee $7 i32.const 3 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor @@ -5359,12 +5359,12 @@ i32.const 3 i32.shl i32.add - local.set $7 + local.set $8 local.get $3 local.set $2 loop $while-continue|0 local.get $4 - local.get $7 + local.get $8 i32.ne if local.get $4 @@ -5376,6 +5376,7 @@ local.get $2 local.get $4 i32.load16_s + local.tee $6 i32.store16 local.get $2 local.get $4 @@ -5383,18 +5384,17 @@ i32.store16 offset=2 local.get $2 local.get $5 - local.get $4 - i32.load16_s + local.get $6 call $~lib/util/hash/hash16 local.get $1 i32.and i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $6 i32.load i32.store offset=4 - local.get $8 + local.get $6 local.get $2 i32.store local.get $2 @@ -5445,7 +5445,7 @@ local.get $1 i32.store offset=8 local.get $0 - local.get $6 + local.get $7 i32.store offset=12 local.get $0 local.get $0 @@ -5467,10 +5467,10 @@ i32.const 16 i32.shr_s call $~lib/util/hash/hash16 - local.set $4 + local.set $5 local.get $0 i32.load - local.get $4 + local.get $5 local.get $0 i32.load offset=4 i32.and @@ -5485,6 +5485,7 @@ if local.get $1 i32.load offset=4 + local.tee $4 i32.const 1 i32.and if (result i32) @@ -5498,8 +5499,7 @@ i32.eq end br_if $__inlined_func$~lib/map/Map#find - local.get $1 - i32.load offset=4 + local.get $4 i32.const -2 i32.and local.set $1 @@ -5547,7 +5547,7 @@ local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $5 + local.set $4 local.get $0 local.get $0 i32.load offset=16 @@ -5555,7 +5555,7 @@ i32.const 1 i32.add i32.store offset=16 - local.get $5 + local.get $4 local.get $1 i32.const 3 i32.shl @@ -5575,7 +5575,7 @@ local.get $1 local.get $0 i32.load - local.get $4 + local.get $5 local.get $0 i32.load offset=4 i32.and @@ -5588,7 +5588,7 @@ local.get $2 local.get $1 i32.store - local.get $5 + local.get $4 call $~lib/rt/pure/__release end local.get $0 @@ -6214,7 +6214,7 @@ i32.shl i32.const 3 i32.div_s - local.tee $6 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor @@ -6227,12 +6227,12 @@ i32.const 12 i32.mul i32.add - local.set $7 + local.set $8 local.get $3 local.set $2 loop $while-continue|0 local.get $4 - local.get $7 + local.get $8 i32.ne if local.get $4 @@ -6244,6 +6244,7 @@ local.get $2 local.get $4 i32.load16_u + local.tee $6 i32.store16 local.get $2 local.get $4 @@ -6251,18 +6252,17 @@ i32.store offset=4 local.get $2 local.get $5 - local.get $4 - i32.load16_u + local.get $6 call $~lib/util/hash/hash16 local.get $1 i32.and i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $6 i32.load i32.store offset=8 - local.get $8 + local.get $6 local.get $2 i32.store local.get $2 @@ -6313,7 +6313,7 @@ local.get $1 i32.store offset=8 local.get $0 - local.get $6 + local.get $7 i32.store offset=12 local.get $0 local.get $0 @@ -6434,7 +6434,7 @@ if i32.const 1408 i32.const 1472 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -6580,7 +6580,7 @@ i32.shl i32.const 3 i32.div_s - local.tee $6 + local.tee $7 i32.const 3 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor @@ -6593,12 +6593,12 @@ i32.const 3 i32.shl i32.add - local.set $7 + local.set $8 local.get $3 local.set $2 loop $while-continue|0 local.get $4 - local.get $7 + local.get $8 i32.ne if local.get $4 @@ -6610,6 +6610,7 @@ local.get $2 local.get $4 i32.load16_u + local.tee $6 i32.store16 local.get $2 local.get $4 @@ -6617,18 +6618,17 @@ i32.store16 offset=2 local.get $2 local.get $5 - local.get $4 - i32.load16_u + local.get $6 call $~lib/util/hash/hash16 local.get $1 i32.and i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $6 i32.load i32.store offset=4 - local.get $8 + local.get $6 local.get $2 i32.store local.get $2 @@ -6679,7 +6679,7 @@ local.get $1 i32.store offset=8 local.get $0 - local.get $6 + local.get $7 i32.store offset=12 local.get $0 local.get $0 @@ -6699,10 +6699,10 @@ i32.const 65535 i32.and call $~lib/util/hash/hash16 - local.set $4 + local.set $5 local.get $0 i32.load - local.get $4 + local.get $5 local.get $0 i32.load offset=4 i32.and @@ -6717,6 +6717,7 @@ if local.get $1 i32.load offset=4 + local.tee $4 i32.const 1 i32.and if (result i32) @@ -6730,8 +6731,7 @@ i32.eq end br_if $__inlined_func$~lib/map/Map#find - local.get $1 - i32.load offset=4 + local.get $4 i32.const -2 i32.and local.set $1 @@ -6779,7 +6779,7 @@ local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $5 + local.set $4 local.get $0 local.get $0 i32.load offset=16 @@ -6787,7 +6787,7 @@ i32.const 1 i32.add i32.store offset=16 - local.get $5 + local.get $4 local.get $1 i32.const 3 i32.shl @@ -6807,7 +6807,7 @@ local.get $1 local.get $0 i32.load - local.get $4 + local.get $5 local.get $0 i32.load offset=4 i32.and @@ -6820,7 +6820,7 @@ local.get $2 local.get $1 i32.store - local.get $5 + local.get $4 call $~lib/rt/pure/__release end local.get $0 @@ -7410,7 +7410,7 @@ if i32.const 1408 i32.const 1472 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -8604,6 +8604,7 @@ if local.get $0 i32.load offset=12 + local.tee $2 i32.const 1 i32.and if (result i32) @@ -8618,8 +8619,7 @@ local.get $0 return end - local.get $0 - i32.load offset=12 + local.get $2 i32.const -2 i32.and local.set $0 @@ -8644,7 +8644,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) + (local $8 i64) + (local $9 i32) local.get $1 i32.const 1 i32.add @@ -8688,6 +8689,7 @@ local.get $2 local.get $4 i64.load + local.tee $8 i64.store local.get $2 local.get $4 @@ -8695,18 +8697,17 @@ i32.store offset=8 local.get $2 local.get $5 - local.get $4 - i64.load + local.get $8 call $~lib/util/hash/hash64 local.get $1 i32.and i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $9 i32.load i32.store offset=12 - local.get $8 + local.get $9 local.get $2 i32.store local.get $2 @@ -8874,7 +8875,7 @@ if i32.const 1408 i32.const 1472 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -9129,7 +9130,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) + (local $8 i64) + (local $9 i32) local.get $1 i32.const 1 i32.add @@ -9173,6 +9175,7 @@ local.get $2 local.get $4 i64.load + local.tee $8 i64.store local.get $2 local.get $4 @@ -9180,18 +9183,17 @@ i64.store offset=8 local.get $2 local.get $5 - local.get $4 - i64.load + local.get $8 call $~lib/util/hash/hash64 local.get $1 i32.and i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $9 i32.load i32.store offset=16 - local.get $8 + local.get $9 local.get $2 i32.store local.get $2 @@ -9277,6 +9279,7 @@ if local.get $3 i32.load offset=16 + local.tee $5 i32.const 1 i32.and if (result i32) @@ -9288,8 +9291,7 @@ i64.eq end br_if $__inlined_func$~lib/map/Map#find - local.get $3 - i32.load offset=16 + local.get $5 i32.const -2 i32.and local.set $3 @@ -10557,6 +10559,7 @@ if local.get $0 i32.load offset=8 + local.tee $2 i32.const 1 i32.and if (result i32) @@ -10571,8 +10574,7 @@ local.get $0 return end - local.get $0 - i32.load offset=8 + local.get $2 i32.const -2 i32.and local.set $0 @@ -10598,7 +10600,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) + (local $8 f32) + (local $9 i32) local.get $1 i32.const 1 i32.add @@ -10642,6 +10645,7 @@ local.get $2 local.get $4 f32.load + local.tee $8 f32.store local.get $2 local.get $4 @@ -10649,8 +10653,7 @@ i32.store offset=4 local.get $2 local.get $5 - local.get $4 - f32.load + local.get $8 i32.reinterpret_f32 call $~lib/util/hash/hash32 local.get $1 @@ -10658,10 +10661,10 @@ i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $9 i32.load i32.store offset=8 - local.get $8 + local.get $9 local.get $2 i32.store local.get $2 @@ -10831,7 +10834,7 @@ if i32.const 1408 i32.const 1472 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -10997,7 +11000,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) + (local $8 f32) + (local $9 i32) local.get $1 i32.const 1 i32.add @@ -11041,6 +11045,7 @@ local.get $2 local.get $4 f32.load + local.tee $8 f32.store local.get $2 local.get $4 @@ -11048,8 +11053,7 @@ f32.store offset=4 local.get $2 local.get $5 - local.get $4 - f32.load + local.get $8 i32.reinterpret_f32 call $~lib/util/hash/hash32 local.get $1 @@ -11057,10 +11061,10 @@ i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $9 i32.load i32.store offset=8 - local.get $8 + local.get $9 local.get $2 i32.store local.get $2 @@ -11785,6 +11789,7 @@ if local.get $0 i32.load offset=12 + local.tee $2 i32.const 1 i32.and if (result i32) @@ -11799,8 +11804,7 @@ local.get $0 return end - local.get $0 - i32.load offset=12 + local.get $2 i32.const -2 i32.and local.set $0 @@ -11826,7 +11830,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) + (local $8 f64) + (local $9 i32) local.get $1 i32.const 1 i32.add @@ -11870,6 +11875,7 @@ local.get $2 local.get $4 f64.load + local.tee $8 f64.store local.get $2 local.get $4 @@ -11877,8 +11883,7 @@ i32.store offset=8 local.get $2 local.get $5 - local.get $4 - f64.load + local.get $8 i64.reinterpret_f64 call $~lib/util/hash/hash64 local.get $1 @@ -11886,10 +11891,10 @@ i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $9 i32.load i32.store offset=12 - local.get $8 + local.get $9 local.get $2 i32.store local.get $2 @@ -12059,7 +12064,7 @@ if i32.const 1408 i32.const 1472 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -12225,7 +12230,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) + (local $8 f64) + (local $9 i32) local.get $1 i32.const 1 i32.add @@ -12269,6 +12275,7 @@ local.get $2 local.get $4 f64.load + local.tee $8 f64.store local.get $2 local.get $4 @@ -12276,8 +12283,7 @@ f64.store offset=8 local.get $2 local.get $5 - local.get $4 - f64.load + local.get $8 i64.reinterpret_f64 call $~lib/util/hash/hash64 local.get $1 @@ -12285,10 +12291,10 @@ i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $9 i32.load i32.store offset=16 - local.get $8 + local.get $9 local.get $2 i32.store local.get $2 @@ -12375,6 +12381,7 @@ if local.get $3 i32.load offset=16 + local.tee $5 i32.const 1 i32.and if (result i32) @@ -12386,8 +12393,7 @@ f64.eq end br_if $__inlined_func$~lib/map/Map#find - local.get $3 - i32.load offset=16 + local.get $5 i32.const -2 i32.and local.set $3 diff --git a/tests/compiler/std/map.untouched.wat b/tests/compiler/std/map.untouched.wat index 0afb977850..19ba13b674 100644 --- a/tests/compiler/std/map.untouched.wat +++ b/tests/compiler/std/map.untouched.wat @@ -1813,6 +1813,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -1831,6 +1832,8 @@ if local.get $3 i32.load offset=8 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -1850,8 +1853,7 @@ local.get $3 return end - local.get $3 - i32.load offset=8 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -1904,6 +1906,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -1955,18 +1958,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load8_s + local.set $12 + local.get $11 + local.get $12 i32.store8 local.get $11 local.get $10 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i32.load8_s - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -1977,24 +1981,24 @@ i32.const 1 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash8 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=8 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -2032,19 +2036,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -2212,7 +2216,7 @@ if i32.const 384 i32.const 448 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -4327,6 +4331,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -4345,6 +4350,8 @@ if local.get $3 i32.load offset=4 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -4364,8 +4371,7 @@ local.get $3 return end - local.get $3 - i32.load offset=4 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -4389,6 +4395,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -4440,18 +4447,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load8_s + local.set $12 + local.get $11 + local.get $12 i32.store8 local.get $11 local.get $10 i32.load8_s offset=1 i32.store8 offset=1 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $10 - i32.load8_s - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -4462,24 +4470,24 @@ i32.const 1 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash8 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=4 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -4517,19 +4525,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -4709,6 +4717,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -4727,6 +4736,8 @@ if local.get $3 i32.load offset=8 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -4742,8 +4753,7 @@ local.get $3 return end - local.get $3 - i32.load offset=8 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -4767,6 +4777,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -4818,18 +4829,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load + local.set $12 + local.get $11 + local.get $12 i32.store local.get $11 local.get $10 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $10 - i32.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -4848,24 +4860,24 @@ i32.const 4 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.1 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=8 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -4903,19 +4915,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -5748,6 +5760,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -5766,6 +5779,8 @@ if local.get $3 i32.load offset=8 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -5783,8 +5798,7 @@ local.get $3 return end - local.get $3 - i32.load offset=8 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -5835,6 +5849,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -5886,18 +5901,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load8_u + local.set $12 + local.get $11 + local.get $12 i32.store8 local.get $11 local.get $10 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i32.load8_u - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -5908,24 +5924,24 @@ i32.const 1 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash8 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=8 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -5963,19 +5979,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -6139,7 +6155,7 @@ if i32.const 384 i32.const 448 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -6500,6 +6516,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -6518,6 +6535,8 @@ if local.get $3 i32.load offset=4 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -6535,8 +6554,7 @@ local.get $3 return end - local.get $3 - i32.load offset=4 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -6560,6 +6578,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -6611,18 +6630,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load8_u + local.set $12 + local.get $11 + local.get $12 i32.store8 local.get $11 local.get $10 i32.load8_u offset=1 i32.store8 offset=1 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $10 - i32.load8_u - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -6633,24 +6653,24 @@ i32.const 1 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash8 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=4 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -6688,19 +6708,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -7521,6 +7541,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -7539,6 +7560,8 @@ if local.get $3 i32.load offset=8 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -7558,8 +7581,7 @@ local.get $3 return end - local.get $3 - i32.load offset=8 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -7616,6 +7638,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -7667,18 +7690,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load16_s + local.set $12 + local.get $11 + local.get $12 i32.store16 local.get $11 local.get $10 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i32.load16_s - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -7693,24 +7717,24 @@ i32.const 2 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash16 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=8 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -7748,19 +7772,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -7936,7 +7960,7 @@ if i32.const 384 i32.const 448 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -8297,6 +8321,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -8315,6 +8340,8 @@ if local.get $3 i32.load offset=4 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -8334,8 +8361,7 @@ local.get $3 return end - local.get $3 - i32.load offset=4 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -8359,6 +8385,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -8410,18 +8437,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load16_s + local.set $12 + local.get $11 + local.get $12 i32.store16 local.get $11 local.get $10 i32.load16_s offset=2 i32.store16 offset=2 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $10 - i32.load16_s - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -8436,24 +8464,24 @@ i32.const 2 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash16 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=4 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -8491,19 +8519,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -9336,6 +9364,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -9354,6 +9383,8 @@ if local.get $3 i32.load offset=8 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -9371,8 +9402,7 @@ local.get $3 return end - local.get $3 - i32.load offset=8 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -9427,6 +9457,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -9478,18 +9509,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load16_u + local.set $12 + local.get $11 + local.get $12 i32.store16 local.get $11 local.get $10 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i32.load16_u - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -9504,24 +9536,24 @@ i32.const 2 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash16 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=8 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -9559,19 +9591,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -9743,7 +9775,7 @@ if i32.const 384 i32.const 448 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -10104,6 +10136,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -10122,6 +10155,8 @@ if local.get $3 i32.load offset=4 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -10139,8 +10174,7 @@ local.get $3 return end - local.get $3 - i32.load offset=4 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -10164,6 +10198,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -10215,18 +10250,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load16_u - i32.store16 + local.set $12 + local.get $11 + local.get $12 + i32.store16 local.get $11 local.get $10 i32.load16_u offset=2 i32.store16 offset=2 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $10 - i32.load16_u - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -10241,24 +10277,24 @@ i32.const 2 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash16 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=4 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -10296,19 +10332,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -11142,7 +11178,7 @@ if i32.const 384 i32.const 448 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -11928,6 +11964,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -11946,6 +11983,8 @@ if local.get $3 i32.load offset=8 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -11961,8 +12000,7 @@ local.get $3 return end - local.get $3 - i32.load offset=8 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -12019,6 +12057,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -12070,18 +12109,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load + local.set $12 + local.get $11 + local.get $12 i32.store local.get $11 local.get $10 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i32.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -12100,24 +12140,24 @@ i32.const 4 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=8 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -12155,19 +12195,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -12343,7 +12383,7 @@ if i32.const 384 i32.const 448 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -12704,6 +12744,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -12722,6 +12763,8 @@ if local.get $3 i32.load offset=8 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -12737,8 +12780,7 @@ local.get $3 return end - local.get $3 - i32.load offset=8 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -12762,6 +12804,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -12813,18 +12856,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load + local.set $12 + local.get $11 + local.get $12 i32.store local.get $11 local.get $10 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $10 - i32.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -12843,24 +12887,24 @@ i32.const 4 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=8 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -12898,19 +12942,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -13785,6 +13829,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -13803,6 +13848,8 @@ if local.get $3 i32.load offset=12 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -13818,8 +13865,7 @@ local.get $3 return end - local.get $3 - i32.load offset=12 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -13879,8 +13925,9 @@ (local $10 i32) (local $11 i32) (local $12 i64) - (local $13 i32) + (local $13 i64) (local $14 i32) + (local $15 i32) local.get $1 i32.const 1 i32.add @@ -13932,18 +13979,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i64.load + local.set $12 + local.get $11 + local.get $12 i64.store local.get $11 local.get $10 i32.load offset=8 i32.store offset=8 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i64.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -13966,24 +14014,24 @@ i32.const 8 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $13 + local.set $14 local.get $3 - local.get $13 + local.get $14 i32.const 4 i32.mul i32.add - local.set $14 + local.set $15 local.get $11 - local.get $14 + local.get $15 i32.load i32.store offset=12 - local.get $14 + local.get $15 local.get $8 i32.store local.get $8 @@ -14001,28 +14049,28 @@ local.get $0 local.tee $11 local.get $3 - local.tee $13 + local.tee $14 local.get $11 i32.load local.tee $9 i32.ne if - local.get $13 + local.get $14 call $~lib/rt/pure/__retain - local.set $13 + local.set $14 local.get $9 call $~lib/rt/pure/__release end - local.get $13 + local.get $14 i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $14 + local.tee $15 local.get $5 local.tee $9 - local.get $14 + local.get $15 i32.load offset=8 local.tee $11 i32.ne @@ -14218,7 +14266,7 @@ if i32.const 384 i32.const 448 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -14579,6 +14627,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -14597,6 +14646,8 @@ if local.get $3 i32.load offset=16 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -14612,8 +14663,7 @@ local.get $3 return end - local.get $3 - i32.load offset=16 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -14636,8 +14686,9 @@ (local $10 i32) (local $11 i32) (local $12 i64) - (local $13 i32) + (local $13 i64) (local $14 i32) + (local $15 i32) local.get $1 i32.const 1 i32.add @@ -14689,18 +14740,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i64.load + local.set $12 + local.get $11 + local.get $12 i64.store local.get $11 local.get $10 i64.load offset=8 i64.store offset=8 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $10 - i64.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -14723,24 +14775,24 @@ i32.const 8 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $13 + local.set $14 local.get $3 - local.get $13 + local.get $14 i32.const 4 i32.mul i32.add - local.set $14 + local.set $15 local.get $11 - local.get $14 + local.get $15 i32.load i32.store offset=16 - local.get $14 + local.get $15 local.get $8 i32.store local.get $8 @@ -14758,28 +14810,28 @@ local.get $0 local.tee $11 local.get $3 - local.tee $13 + local.tee $14 local.get $11 i32.load local.tee $9 i32.ne if - local.get $13 + local.get $14 call $~lib/rt/pure/__retain - local.set $13 + local.set $14 local.get $9 call $~lib/rt/pure/__release end - local.get $13 + local.get $14 i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $14 + local.tee $15 local.get $5 local.tee $9 - local.get $14 + local.get $15 i32.load offset=8 local.tee $11 i32.ne @@ -15595,6 +15647,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -15613,6 +15666,8 @@ if local.get $3 i32.load offset=12 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -15628,8 +15683,7 @@ local.get $3 return end - local.get $3 - i32.load offset=12 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -15689,8 +15743,9 @@ (local $10 i32) (local $11 i32) (local $12 i64) - (local $13 i32) + (local $13 i64) (local $14 i32) + (local $15 i32) local.get $1 i32.const 1 i32.add @@ -15742,18 +15797,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i64.load + local.set $12 + local.get $11 + local.get $12 i64.store local.get $11 local.get $10 i32.load offset=8 i32.store offset=8 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i64.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -15776,24 +15832,24 @@ i32.const 8 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $13 + local.set $14 local.get $3 - local.get $13 + local.get $14 i32.const 4 i32.mul i32.add - local.set $14 + local.set $15 local.get $11 - local.get $14 + local.get $15 i32.load i32.store offset=12 - local.get $14 + local.get $15 local.get $8 i32.store local.get $8 @@ -15811,28 +15867,28 @@ local.get $0 local.tee $11 local.get $3 - local.tee $13 + local.tee $14 local.get $11 i32.load local.tee $9 i32.ne if - local.get $13 + local.get $14 call $~lib/rt/pure/__retain - local.set $13 + local.set $14 local.get $9 call $~lib/rt/pure/__release end - local.get $13 + local.get $14 i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $14 + local.tee $15 local.get $5 local.tee $9 - local.get $14 + local.get $15 i32.load offset=8 local.tee $11 i32.ne @@ -16028,7 +16084,7 @@ if i32.const 384 i32.const 448 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -16389,6 +16445,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -16407,6 +16464,8 @@ if local.get $3 i32.load offset=16 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -16422,8 +16481,7 @@ local.get $3 return end - local.get $3 - i32.load offset=16 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -16446,8 +16504,9 @@ (local $10 i32) (local $11 i32) (local $12 i64) - (local $13 i32) + (local $13 i64) (local $14 i32) + (local $15 i32) local.get $1 i32.const 1 i32.add @@ -16499,18 +16558,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i64.load + local.set $12 + local.get $11 + local.get $12 i64.store local.get $11 local.get $10 i64.load offset=8 i64.store offset=8 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $10 - i64.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -16533,24 +16593,24 @@ i32.const 8 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $13 + local.set $14 local.get $3 - local.get $13 + local.get $14 i32.const 4 i32.mul i32.add - local.set $14 + local.set $15 local.get $11 - local.get $14 + local.get $15 i32.load i32.store offset=16 - local.get $14 + local.get $15 local.get $8 i32.store local.get $8 @@ -16568,28 +16628,28 @@ local.get $0 local.tee $11 local.get $3 - local.tee $13 + local.tee $14 local.get $11 i32.load local.tee $9 i32.ne if - local.get $13 + local.get $14 call $~lib/rt/pure/__retain - local.set $13 + local.set $14 local.get $9 call $~lib/rt/pure/__release end - local.get $13 + local.get $14 i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $14 + local.tee $15 local.get $5 local.tee $9 - local.get $14 + local.get $15 i32.load offset=8 local.tee $11 i32.ne @@ -17405,6 +17465,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 f32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -17423,6 +17484,8 @@ if local.get $3 i32.load offset=8 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -17438,8 +17501,7 @@ local.get $3 return end - local.get $3 - i32.load offset=8 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -17488,8 +17550,9 @@ (local $10 i32) (local $11 i32) (local $12 f32) - (local $13 i32) + (local $13 f32) (local $14 i32) + (local $15 i32) local.get $1 i32.const 1 i32.add @@ -17541,18 +17604,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 f32.load + local.set $12 + local.get $11 + local.get $12 f32.store local.get $11 local.get $10 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - f32.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -17563,25 +17627,25 @@ i32.const 4 i32.eq drop - local.get $12 + local.get $13 i32.reinterpret_f32 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $13 + local.set $14 local.get $3 - local.get $13 + local.get $14 i32.const 4 i32.mul i32.add - local.set $14 + local.set $15 local.get $11 - local.get $14 + local.get $15 i32.load i32.store offset=8 - local.get $14 + local.get $15 local.get $8 i32.store local.get $8 @@ -17599,28 +17663,28 @@ local.get $0 local.tee $11 local.get $3 - local.tee $13 + local.tee $14 local.get $11 i32.load local.tee $9 i32.ne if - local.get $13 + local.get $14 call $~lib/rt/pure/__retain - local.set $13 + local.set $14 local.get $9 call $~lib/rt/pure/__release end - local.get $13 + local.get $14 i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $14 + local.tee $15 local.get $5 local.tee $9 - local.get $14 + local.get $15 i32.load offset=8 local.tee $11 i32.ne @@ -17794,7 +17858,7 @@ if i32.const 384 i32.const 448 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -18155,6 +18219,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 f32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -18173,6 +18238,8 @@ if local.get $3 i32.load offset=8 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -18188,8 +18255,7 @@ local.get $3 return end - local.get $3 - i32.load offset=8 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -18212,8 +18278,9 @@ (local $10 i32) (local $11 i32) (local $12 f32) - (local $13 i32) + (local $13 f32) (local $14 i32) + (local $15 i32) local.get $1 i32.const 1 i32.add @@ -18265,18 +18332,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 f32.load + local.set $12 + local.get $11 + local.get $12 f32.store local.get $11 local.get $10 f32.load offset=4 f32.store offset=4 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $10 - f32.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -18287,25 +18355,25 @@ i32.const 4 i32.eq drop - local.get $12 + local.get $13 i32.reinterpret_f32 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $13 + local.set $14 local.get $3 - local.get $13 + local.get $14 i32.const 4 i32.mul i32.add - local.set $14 + local.set $15 local.get $11 - local.get $14 + local.get $15 i32.load i32.store offset=8 - local.get $14 + local.get $15 local.get $8 i32.store local.get $8 @@ -18323,28 +18391,28 @@ local.get $0 local.tee $11 local.get $3 - local.tee $13 + local.tee $14 local.get $11 i32.load local.tee $9 i32.ne if - local.get $13 + local.get $14 call $~lib/rt/pure/__retain - local.set $13 + local.set $14 local.get $9 call $~lib/rt/pure/__release end - local.get $13 + local.get $14 i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $14 + local.tee $15 local.get $5 local.tee $9 - local.get $14 + local.get $15 i32.load offset=8 local.tee $11 i32.ne @@ -19138,6 +19206,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 f64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -19156,6 +19225,8 @@ if local.get $3 i32.load offset=12 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -19171,8 +19242,7 @@ local.get $3 return end - local.get $3 - i32.load offset=12 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -19225,8 +19295,9 @@ (local $10 i32) (local $11 i32) (local $12 f64) - (local $13 i32) + (local $13 f64) (local $14 i32) + (local $15 i32) local.get $1 i32.const 1 i32.add @@ -19278,18 +19349,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 f64.load + local.set $12 + local.get $11 + local.get $12 f64.store local.get $11 local.get $10 i32.load offset=8 i32.store offset=8 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - f64.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -19304,25 +19376,25 @@ i32.const 8 i32.eq drop - local.get $12 + local.get $13 i64.reinterpret_f64 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $13 + local.set $14 local.get $3 - local.get $13 + local.get $14 i32.const 4 i32.mul i32.add - local.set $14 + local.set $15 local.get $11 - local.get $14 + local.get $15 i32.load i32.store offset=12 - local.get $14 + local.get $15 local.get $8 i32.store local.get $8 @@ -19340,28 +19412,28 @@ local.get $0 local.tee $11 local.get $3 - local.tee $13 + local.tee $14 local.get $11 i32.load local.tee $9 i32.ne if - local.get $13 + local.get $14 call $~lib/rt/pure/__retain - local.set $13 + local.set $14 local.get $9 call $~lib/rt/pure/__release end - local.get $13 + local.get $14 i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $14 + local.tee $15 local.get $5 local.tee $9 - local.get $14 + local.get $15 i32.load offset=8 local.tee $11 i32.ne @@ -19543,7 +19615,7 @@ if i32.const 384 i32.const 448 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -19904,6 +19976,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 f64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -19922,6 +19995,8 @@ if local.get $3 i32.load offset=16 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -19937,8 +20012,7 @@ local.get $3 return end - local.get $3 - i32.load offset=16 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -19961,8 +20035,9 @@ (local $10 i32) (local $11 i32) (local $12 f64) - (local $13 i32) + (local $13 f64) (local $14 i32) + (local $15 i32) local.get $1 i32.const 1 i32.add @@ -20014,18 +20089,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 f64.load + local.set $12 + local.get $11 + local.get $12 f64.store local.get $11 local.get $10 f64.load offset=8 f64.store offset=8 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $10 - f64.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -20040,25 +20116,25 @@ i32.const 8 i32.eq drop - local.get $12 + local.get $13 i64.reinterpret_f64 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $13 + local.set $14 local.get $3 - local.get $13 + local.get $14 i32.const 4 i32.mul i32.add - local.set $14 + local.set $15 local.get $11 - local.get $14 + local.get $15 i32.load i32.store offset=16 - local.get $14 + local.get $15 local.get $8 i32.store local.get $8 @@ -20076,28 +20152,28 @@ local.get $0 local.tee $11 local.get $3 - local.tee $13 + local.tee $14 local.get $11 i32.load local.tee $9 i32.ne if - local.get $13 + local.get $14 call $~lib/rt/pure/__retain - local.set $13 + local.set $14 local.get $9 call $~lib/rt/pure/__release end - local.get $13 + local.get $14 i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $14 + local.tee $15 local.get $5 local.tee $9 - local.get $14 + local.get $15 i32.load offset=8 local.tee $11 i32.ne diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index 1fe8f8aec5..c185d03e5f 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -1332,6 +1332,7 @@ if local.get $0 i32.load offset=4 + local.tee $2 i32.const 1 i32.and if (result i32) @@ -1348,8 +1349,7 @@ local.get $0 return end - local.get $0 - i32.load offset=4 + local.get $2 i32.const -2 i32.and local.set $0 @@ -1389,7 +1389,7 @@ i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 + local.set $4 local.get $3 i32.const 3 i32.shl @@ -1402,35 +1402,35 @@ local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $8 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 + local.set $5 local.get $3 local.set $2 loop $while-continue|0 - local.get $4 - local.get $7 + local.get $5 + local.get $8 i32.ne if - local.get $4 + local.get $8 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $2 - local.get $4 + local.get $8 i32.load8_s + local.tee $7 i32.store8 local.get $2 - local.get $5 - local.get $1 local.get $4 - i32.load8_s + local.get $1 + local.get $7 i32.const -2128831035 i32.xor i32.const 16777619 @@ -1439,10 +1439,10 @@ i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $7 i32.load i32.store offset=4 - local.get $8 + local.get $7 local.get $2 i32.store local.get $2 @@ -1450,28 +1450,28 @@ i32.add local.set $2 end - local.get $4 + local.get $8 i32.const 8 i32.add - local.set $4 + local.set $8 br $while-continue|0 end end - local.get $5 - local.tee $4 + local.get $4 + local.tee $2 local.get $0 i32.load - local.tee $2 + local.tee $8 i32.ne if - local.get $4 - call $~lib/rt/pure/__retain - local.set $4 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $8 call $~lib/rt/pure/__release end local.get $0 - local.get $4 + local.get $2 i32.store local.get $0 local.get $1 @@ -1480,13 +1480,13 @@ local.tee $1 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if local.get $1 call $~lib/rt/pure/__retain local.set $1 - local.get $4 + local.get $2 call $~lib/rt/pure/__release end local.get $0 @@ -1499,7 +1499,7 @@ local.get $0 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $4 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release @@ -2670,7 +2670,7 @@ i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 + local.set $4 local.get $3 i32.const 3 i32.shl @@ -2683,35 +2683,35 @@ local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $8 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 + local.set $5 local.get $3 local.set $2 loop $while-continue|0 - local.get $4 - local.get $7 + local.get $5 + local.get $8 i32.ne if - local.get $4 + local.get $8 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $2 - local.get $4 + local.get $8 i32.load8_u + local.tee $7 i32.store8 local.get $2 - local.get $5 - local.get $1 local.get $4 - i32.load8_u + local.get $1 + local.get $7 i32.const -2128831035 i32.xor i32.const 16777619 @@ -2720,10 +2720,10 @@ i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $7 i32.load i32.store offset=4 - local.get $8 + local.get $7 local.get $2 i32.store local.get $2 @@ -2731,28 +2731,28 @@ i32.add local.set $2 end - local.get $4 + local.get $8 i32.const 8 i32.add - local.set $4 + local.set $8 br $while-continue|0 end end - local.get $5 - local.tee $4 + local.get $4 + local.tee $2 local.get $0 i32.load - local.tee $2 + local.tee $8 i32.ne if - local.get $4 - call $~lib/rt/pure/__retain - local.set $4 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $8 call $~lib/rt/pure/__release end local.get $0 - local.get $4 + local.get $2 i32.store local.get $0 local.get $1 @@ -2761,13 +2761,13 @@ local.tee $1 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if local.get $1 call $~lib/rt/pure/__retain local.set $1 - local.get $4 + local.get $2 call $~lib/rt/pure/__release end local.get $0 @@ -2780,7 +2780,7 @@ local.get $0 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $4 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release @@ -3440,6 +3440,7 @@ if local.get $0 i32.load offset=4 + local.tee $2 i32.const 1 i32.and if (result i32) @@ -3456,8 +3457,7 @@ local.get $0 return end - local.get $0 - i32.load offset=4 + local.get $2 i32.const -2 i32.and local.set $0 @@ -3500,7 +3500,7 @@ i32.shl i32.const 3 i32.div_s - local.tee $6 + local.tee $7 i32.const 3 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor @@ -3513,38 +3513,39 @@ i32.const 3 i32.shl i32.add - local.set $7 + local.set $8 local.get $3 local.set $2 loop $while-continue|0 local.get $4 - local.get $7 + local.get $8 i32.ne if local.get $4 + local.tee $6 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $2 - local.get $4 + local.get $6 i32.load16_s + local.tee $4 i32.store16 local.get $2 local.get $5 local.get $4 - i32.load16_s call $~lib/util/hash/hash16 local.get $1 i32.and i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $4 i32.load i32.store offset=4 - local.get $8 + local.get $4 local.get $2 i32.store local.get $2 @@ -3552,7 +3553,7 @@ i32.add local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add local.set $4 @@ -3560,20 +3561,20 @@ end end local.get $5 - local.tee $4 + local.tee $2 local.get $0 i32.load - local.tee $2 + local.tee $4 i32.ne if - local.get $4 - call $~lib/rt/pure/__retain - local.set $4 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $0 - local.get $4 + local.get $2 i32.store local.get $0 local.get $1 @@ -3582,20 +3583,20 @@ local.tee $1 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if local.get $1 call $~lib/rt/pure/__retain local.set $1 - local.get $4 + local.get $2 call $~lib/rt/pure/__release end local.get $0 local.get $1 i32.store offset=8 local.get $0 - local.get $6 + local.get $7 i32.store offset=12 local.get $0 local.get $0 @@ -4321,7 +4322,7 @@ i32.shl i32.const 3 i32.div_s - local.tee $6 + local.tee $7 i32.const 3 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor @@ -4334,38 +4335,39 @@ i32.const 3 i32.shl i32.add - local.set $7 + local.set $8 local.get $3 local.set $2 loop $while-continue|0 local.get $4 - local.get $7 + local.get $8 i32.ne if local.get $4 + local.tee $6 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $2 - local.get $4 + local.get $6 i32.load16_u + local.tee $4 i32.store16 local.get $2 local.get $5 local.get $4 - i32.load16_u call $~lib/util/hash/hash16 local.get $1 i32.and i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $4 i32.load i32.store offset=4 - local.get $8 + local.get $4 local.get $2 i32.store local.get $2 @@ -4373,7 +4375,7 @@ i32.add local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add local.set $4 @@ -4381,20 +4383,20 @@ end end local.get $5 - local.tee $4 + local.tee $2 local.get $0 i32.load - local.tee $2 + local.tee $4 i32.ne if - local.get $4 - call $~lib/rt/pure/__retain - local.set $4 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $0 - local.get $4 + local.get $2 i32.store local.get $0 local.get $1 @@ -4403,20 +4405,20 @@ local.tee $1 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if local.get $1 call $~lib/rt/pure/__retain local.set $1 - local.get $4 + local.get $2 call $~lib/rt/pure/__release end local.get $0 local.get $1 i32.store offset=8 local.get $0 - local.get $6 + local.get $7 i32.store offset=12 local.get $0 local.get $0 @@ -5096,6 +5098,7 @@ if local.get $0 i32.load offset=4 + local.tee $2 i32.const 1 i32.and if (result i32) @@ -5110,8 +5113,7 @@ local.get $0 return end - local.get $0 - i32.load offset=4 + local.get $2 i32.const -2 i32.and local.set $0 @@ -5150,7 +5152,7 @@ i32.shl i32.const 3 i32.div_s - local.tee $6 + local.tee $7 i32.const 3 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor @@ -5163,38 +5165,39 @@ i32.const 3 i32.shl i32.add - local.set $7 + local.set $8 local.get $3 local.set $2 loop $while-continue|0 local.get $4 - local.get $7 + local.get $8 i32.ne if local.get $4 + local.tee $6 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $2 - local.get $4 + local.get $6 i32.load + local.tee $4 i32.store local.get $2 local.get $5 local.get $4 - i32.load call $~lib/util/hash/hash32 local.get $1 i32.and i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $4 i32.load i32.store offset=4 - local.get $8 + local.get $4 local.get $2 i32.store local.get $2 @@ -5202,7 +5205,7 @@ i32.add local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add local.set $4 @@ -5210,20 +5213,20 @@ end end local.get $5 - local.tee $4 + local.tee $2 local.get $0 i32.load - local.tee $2 + local.tee $4 i32.ne if - local.get $4 - call $~lib/rt/pure/__retain - local.set $4 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $0 - local.get $4 + local.get $2 i32.store local.get $0 local.get $1 @@ -5232,20 +5235,20 @@ local.tee $1 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if local.get $1 call $~lib/rt/pure/__retain local.set $1 - local.get $4 + local.get $2 call $~lib/rt/pure/__release end local.get $0 local.get $1 i32.store offset=8 local.get $0 - local.get $6 + local.get $7 i32.store offset=12 local.get $0 local.get $0 @@ -6444,6 +6447,7 @@ if local.get $0 i32.load offset=8 + local.tee $2 i32.const 1 i32.and if (result i32) @@ -6458,8 +6462,7 @@ local.get $0 return end - local.get $0 - i32.load offset=8 + local.get $2 i32.const -2 i32.and local.set $0 @@ -6485,6 +6488,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i64) local.get $1 i32.const 1 i32.add @@ -6498,7 +6502,7 @@ i32.shl i32.const 3 i32.div_s - local.tee $6 + local.tee $7 i32.const 4 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor @@ -6511,38 +6515,39 @@ i32.const 4 i32.shl i32.add - local.set $7 + local.set $8 local.get $3 local.set $2 loop $while-continue|0 local.get $4 - local.get $7 + local.get $8 i32.ne if local.get $4 + local.tee $6 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $2 - local.get $4 + local.get $6 i64.load + local.tee $9 i64.store local.get $2 local.get $5 - local.get $4 - i64.load + local.get $9 call $~lib/util/hash/hash64 local.get $1 i32.and i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $4 i32.load i32.store offset=8 - local.get $8 + local.get $4 local.get $2 i32.store local.get $2 @@ -6550,7 +6555,7 @@ i32.add local.set $2 end - local.get $4 + local.get $6 i32.const 16 i32.add local.set $4 @@ -6558,20 +6563,20 @@ end end local.get $5 - local.tee $4 + local.tee $2 local.get $0 i32.load - local.tee $2 + local.tee $4 i32.ne if - local.get $4 - call $~lib/rt/pure/__retain - local.set $4 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $0 - local.get $4 + local.get $2 i32.store local.get $0 local.get $1 @@ -6580,20 +6585,20 @@ local.tee $1 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if local.get $1 call $~lib/rt/pure/__retain local.set $1 - local.get $4 + local.get $2 call $~lib/rt/pure/__release end local.get $0 local.get $1 i32.store offset=8 local.get $0 - local.get $6 + local.get $7 i32.store offset=12 local.get $0 local.get $0 @@ -7762,6 +7767,7 @@ if local.get $0 i32.load offset=4 + local.tee $2 i32.const 1 i32.and if (result i32) @@ -7776,8 +7782,7 @@ local.get $0 return end - local.get $0 - i32.load offset=4 + local.get $2 i32.const -2 i32.and local.set $0 @@ -7804,6 +7809,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 f32) local.get $1 i32.const 1 i32.add @@ -7817,7 +7823,7 @@ i32.shl i32.const 3 i32.div_s - local.tee $6 + local.tee $7 i32.const 3 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor @@ -7830,28 +7836,29 @@ i32.const 3 i32.shl i32.add - local.set $7 + local.set $8 local.get $3 local.set $2 loop $while-continue|0 local.get $4 - local.get $7 + local.get $8 i32.ne if local.get $4 + local.tee $6 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $2 - local.get $4 + local.get $6 f32.load + local.tee $9 f32.store local.get $2 local.get $5 - local.get $4 - f32.load + local.get $9 i32.reinterpret_f32 call $~lib/util/hash/hash32 local.get $1 @@ -7859,10 +7866,10 @@ i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $4 i32.load i32.store offset=4 - local.get $8 + local.get $4 local.get $2 i32.store local.get $2 @@ -7870,7 +7877,7 @@ i32.add local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add local.set $4 @@ -7878,20 +7885,20 @@ end end local.get $5 - local.tee $4 + local.tee $2 local.get $0 i32.load - local.tee $2 + local.tee $4 i32.ne if - local.get $4 - call $~lib/rt/pure/__retain - local.set $4 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $0 - local.get $4 + local.get $2 i32.store local.get $0 local.get $1 @@ -7900,20 +7907,20 @@ local.tee $1 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if local.get $1 call $~lib/rt/pure/__retain local.set $1 - local.get $4 + local.get $2 call $~lib/rt/pure/__release end local.get $0 local.get $1 i32.store offset=8 local.get $0 - local.get $6 + local.get $7 i32.store offset=12 local.get $0 local.get $0 @@ -8588,6 +8595,7 @@ if local.get $0 i32.load offset=8 + local.tee $2 i32.const 1 i32.and if (result i32) @@ -8602,8 +8610,7 @@ local.get $0 return end - local.get $0 - i32.load offset=8 + local.get $2 i32.const -2 i32.and local.set $0 @@ -8630,6 +8637,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 f64) local.get $1 i32.const 1 i32.add @@ -8643,7 +8651,7 @@ i32.shl i32.const 3 i32.div_s - local.tee $6 + local.tee $7 i32.const 4 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor @@ -8656,28 +8664,29 @@ i32.const 4 i32.shl i32.add - local.set $7 + local.set $8 local.get $3 local.set $2 loop $while-continue|0 local.get $4 - local.get $7 + local.get $8 i32.ne if local.get $4 + local.tee $6 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $2 - local.get $4 + local.get $6 f64.load + local.tee $9 f64.store local.get $2 local.get $5 - local.get $4 - f64.load + local.get $9 i64.reinterpret_f64 call $~lib/util/hash/hash64 local.get $1 @@ -8685,10 +8694,10 @@ i32.const 2 i32.shl i32.add - local.tee $8 + local.tee $4 i32.load i32.store offset=8 - local.get $8 + local.get $4 local.get $2 i32.store local.get $2 @@ -8696,7 +8705,7 @@ i32.add local.set $2 end - local.get $4 + local.get $6 i32.const 16 i32.add local.set $4 @@ -8704,20 +8713,20 @@ end end local.get $5 - local.tee $4 + local.tee $2 local.get $0 i32.load - local.tee $2 + local.tee $4 i32.ne if - local.get $4 - call $~lib/rt/pure/__retain - local.set $4 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $0 - local.get $4 + local.get $2 i32.store local.get $0 local.get $1 @@ -8726,20 +8735,20 @@ local.tee $1 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if local.get $1 call $~lib/rt/pure/__retain local.set $1 - local.get $4 + local.get $2 call $~lib/rt/pure/__release end local.get $0 local.get $1 i32.store offset=8 local.get $0 - local.get $6 + local.get $7 i32.store offset=12 local.get $0 local.get $0 diff --git a/tests/compiler/std/set.untouched.wat b/tests/compiler/std/set.untouched.wat index 64c91c214e..271db743ff 100644 --- a/tests/compiler/std/set.untouched.wat +++ b/tests/compiler/std/set.untouched.wat @@ -1808,6 +1808,7 @@ (func $~lib/set/Set#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -1826,6 +1827,8 @@ if local.get $3 i32.load offset=4 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -1845,8 +1848,7 @@ local.get $3 return end - local.get $3 - i32.load offset=4 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -1899,6 +1901,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -1950,14 +1953,15 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load8_s + local.set $12 + local.get $11 + local.get $12 i32.store8 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i32.load8_s - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -1968,24 +1972,24 @@ i32.const 1 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash8 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=4 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -2023,19 +2027,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -4474,6 +4478,7 @@ (func $~lib/set/Set#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -4492,6 +4497,8 @@ if local.get $3 i32.load offset=4 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -4509,8 +4516,7 @@ local.get $3 return end - local.get $3 - i32.load offset=4 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -4561,6 +4567,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -4612,14 +4619,15 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load8_u + local.set $12 + local.get $11 + local.get $12 i32.store8 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i32.load8_u - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -4630,24 +4638,24 @@ i32.const 1 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash8 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=4 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -4685,19 +4693,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -5604,6 +5612,7 @@ (func $~lib/set/Set#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -5622,6 +5631,8 @@ if local.get $3 i32.load offset=4 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -5641,8 +5652,7 @@ local.get $3 return end - local.get $3 - i32.load offset=4 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -5699,6 +5709,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -5750,14 +5761,15 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load16_s + local.set $12 + local.get $11 + local.get $12 i32.store16 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i32.load16_s - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -5772,24 +5784,24 @@ i32.const 2 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash16 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=4 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -5827,19 +5839,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -6744,6 +6756,7 @@ (func $~lib/set/Set#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -6762,6 +6775,8 @@ if local.get $3 i32.load offset=4 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -6779,8 +6794,7 @@ local.get $3 return end - local.get $3 - i32.load offset=4 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -6835,6 +6849,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -6886,14 +6901,15 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load16_u + local.set $12 + local.get $11 + local.get $12 i32.store16 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i32.load16_u - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -6908,24 +6924,24 @@ i32.const 2 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash16 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=4 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -6963,19 +6979,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -7910,6 +7926,7 @@ (func $~lib/set/Set#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -7928,6 +7945,8 @@ if local.get $3 i32.load offset=4 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -7943,8 +7962,7 @@ local.get $3 return end - local.get $3 - i32.load offset=4 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -8001,6 +8019,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -8052,14 +8071,15 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load + local.set $12 + local.get $11 + local.get $12 i32.store block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i32.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -8078,24 +8098,24 @@ i32.const 4 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=4 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -8133,19 +8153,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -9030,6 +9050,7 @@ (func $~lib/set/Set#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -9048,6 +9069,8 @@ if local.get $3 i32.load offset=4 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -9063,8 +9086,7 @@ local.get $3 return end - local.get $3 - i32.load offset=4 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -9121,6 +9143,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -9172,14 +9195,15 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load + local.set $12 + local.get $11 + local.get $12 i32.store block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i32.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -9198,24 +9222,24 @@ i32.const 4 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=4 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -9253,19 +9277,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/pure/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/pure/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -10238,6 +10262,7 @@ (func $~lib/set/Set#find (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -10256,6 +10281,8 @@ if local.get $3 i32.load offset=8 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -10271,8 +10298,7 @@ local.get $3 return end - local.get $3 - i32.load offset=8 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -10332,8 +10358,9 @@ (local $10 i32) (local $11 i32) (local $12 i64) - (local $13 i32) + (local $13 i64) (local $14 i32) + (local $15 i32) local.get $1 i32.const 1 i32.add @@ -10385,14 +10412,15 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i64.load + local.set $12 + local.get $11 + local.get $12 i64.store block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i64.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -10415,24 +10443,24 @@ i32.const 8 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $13 + local.set $14 local.get $3 - local.get $13 + local.get $14 i32.const 4 i32.mul i32.add - local.set $14 + local.set $15 local.get $11 - local.get $14 + local.get $15 i32.load i32.store offset=8 - local.get $14 + local.get $15 local.get $8 i32.store local.get $8 @@ -10450,28 +10478,28 @@ local.get $0 local.tee $11 local.get $3 - local.tee $13 + local.tee $14 local.get $11 i32.load local.tee $9 i32.ne if - local.get $13 + local.get $14 call $~lib/rt/pure/__retain - local.set $13 + local.set $14 local.get $9 call $~lib/rt/pure/__release end - local.get $13 + local.get $14 i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $14 + local.tee $15 local.get $5 local.tee $9 - local.get $14 + local.get $15 i32.load offset=8 local.tee $11 i32.ne @@ -11378,6 +11406,7 @@ (func $~lib/set/Set#find (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -11396,6 +11425,8 @@ if local.get $3 i32.load offset=8 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -11411,8 +11442,7 @@ local.get $3 return end - local.get $3 - i32.load offset=8 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -11472,8 +11502,9 @@ (local $10 i32) (local $11 i32) (local $12 i64) - (local $13 i32) + (local $13 i64) (local $14 i32) + (local $15 i32) local.get $1 i32.const 1 i32.add @@ -11525,14 +11556,15 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i64.load + local.set $12 + local.get $11 + local.get $12 i64.store block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i64.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -11555,24 +11587,24 @@ i32.const 8 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $13 + local.set $14 local.get $3 - local.get $13 + local.get $14 i32.const 4 i32.mul i32.add - local.set $14 + local.set $15 local.get $11 - local.get $14 + local.get $15 i32.load i32.store offset=8 - local.get $14 + local.get $15 local.get $8 i32.store local.get $8 @@ -11590,28 +11622,28 @@ local.get $0 local.tee $11 local.get $3 - local.tee $13 + local.tee $14 local.get $11 i32.load local.tee $9 i32.ne if - local.get $13 + local.get $14 call $~lib/rt/pure/__retain - local.set $13 + local.set $14 local.get $9 call $~lib/rt/pure/__release end - local.get $13 + local.get $14 i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $14 + local.tee $15 local.get $5 local.tee $9 - local.get $14 + local.get $15 i32.load offset=8 local.tee $11 i32.ne @@ -12518,6 +12550,7 @@ (func $~lib/set/Set#find (param $0 i32) (param $1 f32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -12536,6 +12569,8 @@ if local.get $3 i32.load offset=4 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -12551,8 +12586,7 @@ local.get $3 return end - local.get $3 - i32.load offset=4 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -12601,8 +12635,9 @@ (local $10 i32) (local $11 i32) (local $12 f32) - (local $13 i32) + (local $13 f32) (local $14 i32) + (local $15 i32) local.get $1 i32.const 1 i32.add @@ -12654,14 +12689,15 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 f32.load + local.set $12 + local.get $11 + local.get $12 f32.store block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - f32.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -12672,25 +12708,25 @@ i32.const 4 i32.eq drop - local.get $12 + local.get $13 i32.reinterpret_f32 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $13 + local.set $14 local.get $3 - local.get $13 + local.get $14 i32.const 4 i32.mul i32.add - local.set $14 + local.set $15 local.get $11 - local.get $14 + local.get $15 i32.load i32.store offset=4 - local.get $14 + local.get $15 local.get $8 i32.store local.get $8 @@ -12708,28 +12744,28 @@ local.get $0 local.tee $11 local.get $3 - local.tee $13 + local.tee $14 local.get $11 i32.load local.tee $9 i32.ne if - local.get $13 + local.get $14 call $~lib/rt/pure/__retain - local.set $13 + local.set $14 local.get $9 call $~lib/rt/pure/__release end - local.get $13 + local.get $14 i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $14 + local.tee $15 local.get $5 local.tee $9 - local.get $14 + local.get $15 i32.load offset=8 local.tee $11 i32.ne @@ -13614,6 +13650,7 @@ (func $~lib/set/Set#find (param $0 i32) (param $1 f64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -13632,6 +13669,8 @@ if local.get $3 i32.load offset=8 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -13647,8 +13686,7 @@ local.get $3 return end - local.get $3 - i32.load offset=8 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -13701,8 +13739,9 @@ (local $10 i32) (local $11 i32) (local $12 f64) - (local $13 i32) + (local $13 f64) (local $14 i32) + (local $15 i32) local.get $1 i32.const 1 i32.add @@ -13754,14 +13793,15 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 f64.load + local.set $12 + local.get $11 + local.get $12 f64.store block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - f64.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -13776,25 +13816,25 @@ i32.const 8 i32.eq drop - local.get $12 + local.get $13 i64.reinterpret_f64 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $13 + local.set $14 local.get $3 - local.get $13 + local.get $14 i32.const 4 i32.mul i32.add - local.set $14 + local.set $15 local.get $11 - local.get $14 + local.get $15 i32.load i32.store offset=8 - local.get $14 + local.get $15 local.get $8 i32.store local.get $8 @@ -13812,28 +13852,28 @@ local.get $0 local.tee $11 local.get $3 - local.tee $13 + local.tee $14 local.get $11 i32.load local.tee $9 i32.ne if - local.get $13 + local.get $14 call $~lib/rt/pure/__retain - local.set $13 + local.set $14 local.get $9 call $~lib/rt/pure/__release end - local.get $13 + local.get $14 i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $14 + local.tee $15 local.get $5 local.tee $9 - local.get $14 + local.get $15 i32.load offset=8 local.tee $11 i32.ne diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat index f9727bd33a..7b2fd6d543 100644 --- a/tests/compiler/std/symbol.optimized.wat +++ b/tests/compiler/std/symbol.optimized.wat @@ -515,6 +515,7 @@ if local.get $0 i32.load offset=8 + local.tee $1 i32.const 1 i32.and if (result i32) @@ -529,8 +530,7 @@ local.get $0 return end - local.get $0 - i32.load offset=8 + local.get $1 i32.const -2 i32.and local.set $0 @@ -550,65 +550,65 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $2 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor local.set $4 - local.get $5 + local.get $2 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $6 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $3 local.get $0 i32.load offset=8 - local.tee $5 + local.tee $8 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 + local.set $5 local.get $3 local.set $2 loop $while-continue|0 local.get $5 - local.get $7 + local.get $8 i32.ne if - local.get $5 + local.get $8 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $2 - local.get $5 + local.get $8 i32.load + local.tee $7 i32.store local.get $2 - local.get $5 + local.get $8 i32.load offset=4 i32.store offset=4 local.get $2 local.get $4 - local.get $5 - i32.load + local.get $7 call $~lib/util/hash/hashStr local.get $1 i32.and i32.const 2 i32.shl i32.add - local.tee $6 + local.tee $7 i32.load i32.store offset=8 - local.get $6 + local.get $7 local.get $2 i32.store local.get $2 @@ -616,21 +616,21 @@ i32.add local.set $2 end - local.get $5 + local.get $8 i32.const 12 i32.add - local.set $5 + local.set $8 br $while-continue|0 end end local.get $4 - local.tee $5 + local.tee $2 local.get $0 i32.load i32.ne drop local.get $0 - local.get $5 + local.get $2 i32.store local.get $0 local.get $1 @@ -645,7 +645,7 @@ local.get $1 i32.store offset=8 local.get $0 - local.get $8 + local.get $6 i32.store offset=12 local.get $0 local.get $0 @@ -700,6 +700,7 @@ if local.get $0 i32.load offset=8 + local.tee $2 i32.const 1 i32.and if (result i32) @@ -714,8 +715,7 @@ local.get $0 return end - local.get $0 - i32.load offset=8 + local.get $2 i32.const -2 i32.and local.set $0 @@ -735,65 +735,65 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $2 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor local.set $4 - local.get $5 + local.get $2 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $6 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $3 local.get $0 i32.load offset=8 - local.tee $5 + local.tee $8 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 + local.set $5 local.get $3 local.set $2 loop $while-continue|0 local.get $5 - local.get $7 + local.get $8 i32.ne if - local.get $5 + local.get $8 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $2 - local.get $5 + local.get $8 i32.load + local.tee $7 i32.store local.get $2 - local.get $5 + local.get $8 i32.load offset=4 i32.store offset=4 local.get $2 local.get $4 - local.get $5 - i32.load + local.get $7 call $~lib/util/hash/hash32 local.get $1 i32.and i32.const 2 i32.shl i32.add - local.tee $6 + local.tee $7 i32.load i32.store offset=8 - local.get $6 + local.get $7 local.get $2 i32.store local.get $2 @@ -801,21 +801,21 @@ i32.add local.set $2 end - local.get $5 + local.get $8 i32.const 12 i32.add - local.set $5 + local.set $8 br $while-continue|0 end end local.get $4 - local.tee $5 + local.tee $2 local.get $0 i32.load i32.ne drop local.get $0 - local.get $5 + local.get $2 i32.store local.get $0 local.get $1 @@ -830,7 +830,7 @@ local.get $1 i32.store offset=8 local.get $0 - local.get $8 + local.get $6 i32.store offset=12 local.get $0 local.get $0 @@ -953,7 +953,7 @@ if i32.const 1248 i32.const 1312 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -1132,7 +1132,7 @@ if i32.const 1248 i32.const 1312 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/symbol.untouched.wat b/tests/compiler/std/symbol.untouched.wat index ec1303ac73..8e803a5f0f 100644 --- a/tests/compiler/std/symbol.untouched.wat +++ b/tests/compiler/std/symbol.untouched.wat @@ -808,6 +808,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) local.get $1 call $~lib/rt/stub/__retain local.set $1 @@ -829,6 +830,8 @@ if local.get $3 i32.load offset=8 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -842,14 +845,13 @@ end if local.get $3 - local.set $5 + local.set $6 local.get $1 call $~lib/rt/stub/__release - local.get $5 + local.get $6 return end - local.get $3 - i32.load offset=8 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -924,7 +926,7 @@ if i32.const 224 i32.const 288 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable @@ -949,6 +951,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -1000,49 +1003,53 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load + call $~lib/rt/stub/__retain + local.set $12 + local.get $11 + local.get $12 i32.store local.get $11 local.get $10 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH<~lib/string/String>|inlined.3 (result i32) - local.get $10 - i32.load + local.get $12 call $~lib/rt/stub/__retain - local.set $12 + local.set $13 i32.const 1 drop - local.get $12 + local.get $13 call $~lib/util/hash/hashStr - local.set $13 - local.get $12 - call $~lib/rt/stub/__release + local.set $14 local.get $13 + call $~lib/rt/stub/__release + local.get $14 br $~lib/util/hash/HASH<~lib/string/String>|inlined.3 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=8 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 i32.const 12 i32.add local.set $8 + local.get $12 + call $~lib/rt/stub/__release end local.get $6 i32.const 12 @@ -1074,19 +1081,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/stub/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/stub/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -1267,6 +1274,7 @@ (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load local.get $2 @@ -1285,6 +1293,8 @@ if local.get $3 i32.load offset=8 + local.set $5 + local.get $5 i32.const 1 i32.and i32.eqz @@ -1300,8 +1310,7 @@ local.get $3 return end - local.get $3 - i32.load offset=8 + local.get $5 i32.const 1 i32.const -1 i32.xor @@ -1325,6 +1334,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -1376,18 +1386,19 @@ if local.get $8 local.set $11 - local.get $11 local.get $10 i32.load + local.set $12 + local.get $11 + local.get $12 i32.store local.get $11 local.get $10 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $10 - i32.load - local.set $12 + local.get $12 + local.set $13 i32.const 0 drop i32.const 0 @@ -1406,24 +1417,24 @@ i32.const 4 i32.eq drop - local.get $12 + local.get $13 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.1 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=8 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -1461,19 +1472,19 @@ local.get $0 local.tee $13 local.get $5 - local.tee $9 + local.tee $14 local.get $13 i32.load offset=8 local.tee $11 i32.ne if - local.get $9 + local.get $14 call $~lib/rt/stub/__retain - local.set $9 + local.set $14 local.get $11 call $~lib/rt/stub/__release end - local.get $9 + local.get $14 i32.store offset=8 local.get $0 local.get $4 @@ -1767,7 +1778,7 @@ if i32.const 224 i32.const 288 - i32.const 104 + i32.const 105 i32.const 17 call $~lib/builtins/abort unreachable