diff options
31 files changed, 525 insertions, 538 deletions
diff --git a/src/ir/module-utils.cpp b/src/ir/module-utils.cpp index da2d7bb9f..bd73a2be9 100644 --- a/src/ir/module-utils.cpp +++ b/src/ir/module-utils.cpp @@ -20,7 +20,7 @@ #include "ir/manipulation.h" #include "ir/properties.h" #include "support/insert_ordered.h" -#include "support/topological_sort.h" +#include "support/topological_orders.h" namespace wasm::ModuleUtils { @@ -684,95 +684,81 @@ std::vector<HeapType> getPrivateHeapTypes(Module& wasm) { IndexedHeapTypes getOptimizedIndexedHeapTypes(Module& wasm) { auto counts = getHeapTypeCounts(wasm); - // Types have to be arranged into topologically ordered recursion groups. - // Under isorecrsive typing, the topological sort has to take all referenced - // rec groups into account. First, sort the groups by average use count among - // their members so that the later topological sort will place frequently used - // types first. - struct GroupInfo { - size_t index; - double useCount = 0; - std::unordered_set<RecGroup> preds; - std::vector<RecGroup> sortedPreds; - GroupInfo(size_t index) : index(index) {} - bool operator<(const GroupInfo& other) const { - if (useCount != other.useCount) { - return useCount < other.useCount; - } - return index > other.index; + // Collect the rec groups. + std::unordered_map<RecGroup, size_t> groupIndices; + std::vector<RecGroup> groups; + for (auto& [type, _] : counts) { + auto group = type.getRecGroup(); + if (groupIndices.insert({group, groups.size()}).second) { + groups.push_back(group); } - }; + } - struct GroupInfoMap : std::unordered_map<RecGroup, GroupInfo> { - void sort(std::vector<RecGroup>& groups) { - std::sort(groups.begin(), groups.end(), [&](auto& a, auto& b) { - return this->at(a) < this->at(b); - }); + // Collect the total use counts for each group. + std::vector<size_t> groupCounts; + groupCounts.reserve(groups.size()); + for (auto group : groups) { + size_t count = 0; + for (auto type : group) { + count += counts.at(type); } - }; + groupCounts.push_back(count); + } - // Collect the information that will be used to sort the recursion groups. - GroupInfoMap groupInfos; - for (auto& [type, _] : counts) { - RecGroup group = type.getRecGroup(); - // Try to initialize a new info or get the existing info. - auto& info = groupInfos.insert({group, {groupInfos.size()}}).first->second; - // Update the reference count. - info.useCount += counts.at(type); - // Collect predecessor groups. - for (auto child : type.getReferencedHeapTypes()) { - if (!child.isBasic()) { - RecGroup otherGroup = child.getRecGroup(); - if (otherGroup != group) { - info.preds.insert(otherGroup); + // Collect the reverse dependencies of each group. + std::vector<std::unordered_set<size_t>> depSets(groups.size()); + for (size_t i = 0; i < groups.size(); ++i) { + for (auto type : groups[i]) { + for (auto child : type.getReferencedHeapTypes()) { + if (child.isBasic()) { + continue; } + auto childGroup = child.getRecGroup(); + if (childGroup == groups[i]) { + continue; + } + depSets[groupIndices.at(childGroup)].insert(i); } } } - - // Fix up the use counts to be averages to ensure groups are used comensurate - // with the amount of index space they occupy. Skip this for nominal types - // since their internal group size is always 1. - for (auto& [group, info] : groupInfos) { - info.useCount /= group.size(); + TopologicalSort::Graph deps; + deps.reserve(groups.size()); + for (size_t i = 0; i < groups.size(); ++i) { + deps.emplace_back(depSets[i].begin(), depSets[i].end()); } - // Sort the predecessors so the most used will be visited first. - for (auto& [group, info] : groupInfos) { - info.sortedPreds.insert( - info.sortedPreds.end(), info.preds.begin(), info.preds.end()); - groupInfos.sort(info.sortedPreds); - info.preds.clear(); - } + // Experimentally determined to be pretty good for a variety of programs in + // different languages. + constexpr double childFactor = 0.25; - struct RecGroupSort : TopologicalSort<RecGroup, RecGroupSort> { - GroupInfoMap& groupInfos; - RecGroupSort(GroupInfoMap& groupInfos) : groupInfos(groupInfos) { - // Sort all the groups so the topological sort visits the most used first. - std::vector<RecGroup> sortedGroups; - sortedGroups.reserve(groupInfos.size()); - for (auto& [group, _] : groupInfos) { - sortedGroups.push_back(group); - } - groupInfos.sort(sortedGroups); - for (auto group : sortedGroups) { - push(group); - } + // Each rec group's weight, adjusted for its size and incorporating the weight + // of its users. + std::vector<double> weights(groups.size()); + for (size_t i = 0; i < groups.size(); ++i) { + weights[i] = double(groupCounts[i]) / groups[i].size(); + } + auto sorted = TopologicalSort::sort(deps); + for (auto it = sorted.rbegin(); it != sorted.rend(); ++it) { + for (auto user : deps[*it]) { + weights[*it] += childFactor * weights[user]; } + } - void pushPredecessors(RecGroup group) { - for (auto pred : groupInfos.at(group).sortedPreds) { - push(pred); - } + auto order = TopologicalSort::minSort(deps, [&](size_t a, size_t b) { + auto weightA = weights[a]; + auto weightB = weights[b]; + if (weightA != weightB) { + return weightA > weightB; } - }; + return a < b; + }); - // Perform the topological sort and collect the types. IndexedHeapTypes indexedTypes; indexedTypes.types.reserve(counts.size()); - for (auto group : RecGroupSort(groupInfos)) { - for (auto member : group) { - indexedTypes.types.push_back(member); + + for (auto groupIndex : order) { + for (auto type : groups[groupIndex]) { + indexedTypes.types.push_back(type); } } setIndices(indexedTypes); diff --git a/test/lit/arrays.wast b/test/lit/arrays.wast index 4dde528cf..e1c170d17 100644 --- a/test/lit/arrays.wast +++ b/test/lit/arrays.wast @@ -10,11 +10,7 @@ ;; RUN: wasm-opt %s -all -S -o - | wasm-opt -all -S -o - | filecheck %s (module - ;; CHECK: (type $0 (func (param arrayref) (result i32))) - ;; CHECK: (type $byte-array (array (mut i8))) - ;; ROUNDTRIP: (type $0 (func (param arrayref) (result i32))) - ;; ROUNDTRIP: (type $byte-array (array (mut i8))) (type $byte-array (array (mut i8))) ;; CHECK: (type $func-array (array (mut funcref))) @@ -25,6 +21,8 @@ (elem func $len $impossible-len $unreachable-len) + ;; CHECK: (type $2 (func (param arrayref) (result i32))) + ;; CHECK: (type $3 (func (param (ref array)) (result i32))) ;; CHECK: (type $4 (func (param nullref) (result i32))) @@ -42,6 +40,8 @@ ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; ROUNDTRIP: (type $2 (func (param arrayref) (result i32))) + ;; ROUNDTRIP: (type $3 (func (param (ref array)) (result i32))) ;; ROUNDTRIP: (type $4 (func (param nullref) (result i32))) @@ -81,12 +81,12 @@ ) ) - ;; CHECK: (func $unreachable-len (type $0) (param $a arrayref) (result i32) + ;; CHECK: (func $unreachable-len (type $2) (param $a arrayref) (result i32) ;; CHECK-NEXT: (array.len ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; ROUNDTRIP: (func $unreachable-len (type $0) (param $a arrayref) (result i32) + ;; ROUNDTRIP: (func $unreachable-len (type $2) (param $a arrayref) (result i32) ;; ROUNDTRIP-NEXT: (unreachable) ;; ROUNDTRIP-NEXT: ) (func $unreachable-len (param $a arrayref) (result i32) @@ -95,12 +95,12 @@ ) ) - ;; CHECK: (func $unannotated-len (type $0) (param $a arrayref) (result i32) + ;; CHECK: (func $unannotated-len (type $2) (param $a arrayref) (result i32) ;; CHECK-NEXT: (array.len ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; ROUNDTRIP: (func $unannotated-len (type $0) (param $a arrayref) (result i32) + ;; ROUNDTRIP: (func $unannotated-len (type $2) (param $a arrayref) (result i32) ;; ROUNDTRIP-NEXT: (array.len ;; ROUNDTRIP-NEXT: (local.get $a) ;; ROUNDTRIP-NEXT: ) diff --git a/test/lit/basic/subtypes.wast b/test/lit/basic/subtypes.wast index d283ebefa..24ab1b193 100644 --- a/test/lit/basic/subtypes.wast +++ b/test/lit/basic/subtypes.wast @@ -28,15 +28,11 @@ ;; CHECK-TEXT: (type $struct-i31 (sub $struct-any (struct (field (ref i31))))) - ;; CHECK-TEXT: (type $5 (func (param (ref $vector-i32) (ref null $vector-i32)))) - ;; CHECK-TEXT: (type $vector-any (sub (array (ref any)))) ;; CHECK-BIN: (type $struct-any (sub (struct (field (ref any))))) ;; CHECK-BIN: (type $struct-i31 (sub $struct-any (struct (field (ref i31))))) - ;; CHECK-BIN: (type $5 (func (param (ref $vector-i32) (ref null $vector-i32)))) - ;; CHECK-BIN: (type $vector-any (sub (array (ref any)))) (type $vector-any (sub (array (ref any)))) ;; CHECK-TEXT: (type $vector-i31 (sub $vector-any (array (ref i31)))) @@ -50,15 +46,7 @@ (type $struct-i31 (sub $struct-any (struct (field (ref i31)) ))) - ;; CHECK-TEXT: (type $8 (func (param (ref $vector-i31) (ref $vector-any)))) - - ;; CHECK-TEXT: (type $9 (func (param (ref $struct-i31) (ref $struct-any)))) - ;; CHECK-TEXT: (type $struct-i31_any (sub $struct-i31 (struct (field (ref i31)) (field (ref any))))) - ;; CHECK-BIN: (type $8 (func (param (ref $vector-i31) (ref $vector-any)))) - - ;; CHECK-BIN: (type $9 (func (param (ref $struct-i31) (ref $struct-any)))) - ;; CHECK-BIN: (type $struct-i31_any (sub $struct-i31 (struct (field (ref i31)) (field (ref any))))) (type $struct-i31_any (sub $struct-i31(struct (field (ref i31)) @@ -74,20 +62,32 @@ (field (ref $struct-rec-two)) ))) + ;; CHECK-TEXT: (type $8 (func (param (ref $vector-i32) (ref null $vector-i32)))) + + ;; CHECK-TEXT: (type $9 (func (param (ref $vector-i31) (ref $vector-any)))) + + ;; CHECK-TEXT: (type $10 (func (param (ref $struct-i31) (ref $struct-any)))) + ;; CHECK-TEXT: (type $11 (func (param (ref $struct-i31) (ref $struct-i31_any)))) ;; CHECK-TEXT: (type $12 (func (param (ref $struct-rec-one) (ref $struct-rec-two)))) - ;; CHECK-TEXT: (func $foo (type $5) (param $no-null (ref $vector-i32)) (param $yes-null (ref null $vector-i32)) + ;; CHECK-TEXT: (func $foo (type $8) (param $no-null (ref $vector-i32)) (param $yes-null (ref null $vector-i32)) ;; CHECK-TEXT-NEXT: (local.set $yes-null ;; CHECK-TEXT-NEXT: (local.get $no-null) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) + ;; CHECK-BIN: (type $8 (func (param (ref $vector-i32) (ref null $vector-i32)))) + + ;; CHECK-BIN: (type $9 (func (param (ref $vector-i31) (ref $vector-any)))) + + ;; CHECK-BIN: (type $10 (func (param (ref $struct-i31) (ref $struct-any)))) + ;; CHECK-BIN: (type $11 (func (param (ref $struct-i31) (ref $struct-i31_any)))) ;; CHECK-BIN: (type $12 (func (param (ref $struct-rec-one) (ref $struct-rec-two)))) - ;; CHECK-BIN: (func $foo (type $5) (param $no-null (ref $vector-i32)) (param $yes-null (ref null $vector-i32)) + ;; CHECK-BIN: (func $foo (type $8) (param $no-null (ref $vector-i32)) (param $yes-null (ref null $vector-i32)) ;; CHECK-BIN-NEXT: (local.set $yes-null ;; CHECK-BIN-NEXT: (local.get $no-null) ;; CHECK-BIN-NEXT: ) @@ -98,12 +98,12 @@ (local.set $yes-null (local.get $no-null)) ) - ;; CHECK-TEXT: (func $bar (type $8) (param $v-i31 (ref $vector-i31)) (param $v-any (ref $vector-any)) + ;; CHECK-TEXT: (func $bar (type $9) (param $v-i31 (ref $vector-i31)) (param $v-any (ref $vector-any)) ;; CHECK-TEXT-NEXT: (local.set $v-any ;; CHECK-TEXT-NEXT: (local.get $v-i31) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-BIN: (func $bar (type $8) (param $v-i31 (ref $vector-i31)) (param $v-any (ref $vector-any)) + ;; CHECK-BIN: (func $bar (type $9) (param $v-i31 (ref $vector-i31)) (param $v-any (ref $vector-any)) ;; CHECK-BIN-NEXT: (local.set $v-any ;; CHECK-BIN-NEXT: (local.get $v-i31) ;; CHECK-BIN-NEXT: ) @@ -114,12 +114,12 @@ (local.set $v-any (local.get $v-i31)) ) - ;; CHECK-TEXT: (func $baz (type $9) (param $s-i31 (ref $struct-i31)) (param $s-any (ref $struct-any)) + ;; CHECK-TEXT: (func $baz (type $10) (param $s-i31 (ref $struct-i31)) (param $s-any (ref $struct-any)) ;; CHECK-TEXT-NEXT: (local.set $s-any ;; CHECK-TEXT-NEXT: (local.get $s-i31) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-BIN: (func $baz (type $9) (param $s-i31 (ref $struct-i31)) (param $s-any (ref $struct-any)) + ;; CHECK-BIN: (func $baz (type $10) (param $s-i31 (ref $struct-i31)) (param $s-any (ref $struct-any)) ;; CHECK-BIN-NEXT: (local.set $s-any ;; CHECK-BIN-NEXT: (local.get $s-i31) ;; CHECK-BIN-NEXT: ) @@ -172,41 +172,41 @@ ;; CHECK-BIN-NODEBUG: (type $4 (sub $3 (struct (field (ref i31))))) -;; CHECK-BIN-NODEBUG: (type $5 (func (param (ref $2) (ref null $2)))) +;; CHECK-BIN-NODEBUG: (type $5 (sub (array (ref any)))) -;; CHECK-BIN-NODEBUG: (type $6 (sub (array (ref any)))) +;; CHECK-BIN-NODEBUG: (type $6 (sub $5 (array (ref i31)))) -;; CHECK-BIN-NODEBUG: (type $7 (sub $6 (array (ref i31)))) +;; CHECK-BIN-NODEBUG: (type $7 (sub $4 (struct (field (ref i31)) (field (ref any))))) -;; CHECK-BIN-NODEBUG: (type $8 (func (param (ref $7) (ref $6)))) +;; CHECK-BIN-NODEBUG: (type $8 (func (param (ref $2) (ref null $2)))) -;; CHECK-BIN-NODEBUG: (type $9 (func (param (ref $4) (ref $3)))) +;; CHECK-BIN-NODEBUG: (type $9 (func (param (ref $6) (ref $5)))) -;; CHECK-BIN-NODEBUG: (type $10 (sub $4 (struct (field (ref i31)) (field (ref any))))) +;; CHECK-BIN-NODEBUG: (type $10 (func (param (ref $4) (ref $3)))) -;; CHECK-BIN-NODEBUG: (type $11 (func (param (ref $4) (ref $10)))) +;; CHECK-BIN-NODEBUG: (type $11 (func (param (ref $4) (ref $7)))) ;; CHECK-BIN-NODEBUG: (type $12 (func (param (ref $0) (ref $1)))) -;; CHECK-BIN-NODEBUG: (func $0 (type $5) (param $0 (ref $2)) (param $1 (ref null $2)) +;; CHECK-BIN-NODEBUG: (func $0 (type $8) (param $0 (ref $2)) (param $1 (ref null $2)) ;; CHECK-BIN-NODEBUG-NEXT: (local.set $1 ;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG: (func $1 (type $8) (param $0 (ref $7)) (param $1 (ref $6)) +;; CHECK-BIN-NODEBUG: (func $1 (type $9) (param $0 (ref $6)) (param $1 (ref $5)) ;; CHECK-BIN-NODEBUG-NEXT: (local.set $1 ;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG: (func $2 (type $9) (param $0 (ref $4)) (param $1 (ref $3)) +;; CHECK-BIN-NODEBUG: (func $2 (type $10) (param $0 (ref $4)) (param $1 (ref $3)) ;; CHECK-BIN-NODEBUG-NEXT: (local.set $1 ;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG: (func $3 (type $11) (param $0 (ref $4)) (param $1 (ref $10)) +;; CHECK-BIN-NODEBUG: (func $3 (type $11) (param $0 (ref $4)) (param $1 (ref $7)) ;; CHECK-BIN-NODEBUG-NEXT: (local.set $0 ;; CHECK-BIN-NODEBUG-NEXT: (local.get $1) ;; CHECK-BIN-NODEBUG-NEXT: ) diff --git a/test/lit/basic/types-function-references.wast b/test/lit/basic/types-function-references.wast index b85e1f422..792536cfe 100644 --- a/test/lit/basic/types-function-references.wast +++ b/test/lit/basic/types-function-references.wast @@ -10,39 +10,39 @@ ;; RUN: cat %t.bin.nodebug.wast | filecheck %s --check-prefix=CHECK-BIN-NODEBUG (module + ;; CHECK-TEXT: (type $mixed_results (func (result anyref f32 anyref f32))) + + ;; CHECK-TEXT: (type $i32-i32 (func (param i32) (result i32))) + ;; CHECK-TEXT: (type $void (func)) ;; CHECK-BIN: (type $mixed_results (func (result anyref f32 anyref f32))) + ;; CHECK-BIN: (type $i32-i32 (func (param i32) (result i32))) + ;; CHECK-BIN: (type $void (func)) (type $void (func)) ;; inline ref type in result - ;; CHECK-TEXT: (type $i32-i32 (func (param i32) (result i32))) - - ;; CHECK-TEXT: (type $mixed_results (func (result anyref f32 anyref f32))) - ;; CHECK-TEXT: (type $3 (func (result i32 (ref null $mixed_results) f64))) - ;; CHECK-TEXT: (type $4 (func (param (ref $i32-i32)) (result i32))) - - ;; CHECK-TEXT: (type $5 (func (param (ref null $i32-i32)) (result i32))) - - ;; CHECK-TEXT: (type $6 (func (result i32))) - ;; CHECK-TEXT: (type $_=>_eqref (func (result eqref))) - ;; CHECK-BIN: (type $i32-i32 (func (param i32) (result i32))) - ;; CHECK-BIN: (type $3 (func (result i32 (ref null $mixed_results) f64))) - ;; CHECK-BIN: (type $4 (func (param (ref $i32-i32)) (result i32))) + ;; CHECK-BIN: (type $_=>_eqref (func (result eqref))) + (type $_=>_eqref (func (result eqref))) - ;; CHECK-BIN: (type $5 (func (param (ref null $i32-i32)) (result i32))) + ;; CHECK-TEXT: (type $5 (func (param (ref $i32-i32)) (result i32))) - ;; CHECK-BIN: (type $6 (func (result i32))) + ;; CHECK-TEXT: (type $6 (func (param (ref null $i32-i32)) (result i32))) - ;; CHECK-BIN: (type $_=>_eqref (func (result eqref))) - (type $_=>_eqref (func (result eqref))) + ;; CHECK-TEXT: (type $7 (func (result i32))) ;; CHECK-TEXT: (type $f64_=>_ref_null<_->_eqref> (func (param f64) (result (ref null $_=>_eqref)))) + ;; CHECK-BIN: (type $5 (func (param (ref $i32-i32)) (result i32))) + + ;; CHECK-BIN: (type $6 (func (param (ref null $i32-i32)) (result i32))) + + ;; CHECK-BIN: (type $7 (func (result i32))) + ;; CHECK-BIN: (type $f64_=>_ref_null<_->_eqref> (func (param f64) (result (ref null $_=>_eqref)))) (type $f64_=>_ref_null<_->_eqref> (func (param f64) (result (ref null $_=>_eqref)))) (type $=>eqref (func (result eqref))) @@ -104,13 +104,13 @@ (call_ref $i32-i32 (i32.const 42) (ref.func $call-ref-more)) ) - ;; CHECK-TEXT: (func $call_from-param (type $4) (param $f (ref $i32-i32)) (result i32) + ;; CHECK-TEXT: (func $call_from-param (type $5) (param $f (ref $i32-i32)) (result i32) ;; CHECK-TEXT-NEXT: (call_ref $i32-i32 ;; CHECK-TEXT-NEXT: (i32.const 42) ;; CHECK-TEXT-NEXT: (local.get $f) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-BIN: (func $call_from-param (type $4) (param $f (ref $i32-i32)) (result i32) + ;; CHECK-BIN: (func $call_from-param (type $5) (param $f (ref $i32-i32)) (result i32) ;; CHECK-BIN-NEXT: (call_ref $i32-i32 ;; CHECK-BIN-NEXT: (i32.const 42) ;; CHECK-BIN-NEXT: (local.get $f) @@ -120,13 +120,13 @@ (call_ref $i32-i32 (i32.const 42) (local.get $f)) ) - ;; CHECK-TEXT: (func $call_from-param-null (type $5) (param $f (ref null $i32-i32)) (result i32) + ;; CHECK-TEXT: (func $call_from-param-null (type $6) (param $f (ref null $i32-i32)) (result i32) ;; CHECK-TEXT-NEXT: (call_ref $i32-i32 ;; CHECK-TEXT-NEXT: (i32.const 42) ;; CHECK-TEXT-NEXT: (local.get $f) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-BIN: (func $call_from-param-null (type $5) (param $f (ref null $i32-i32)) (result i32) + ;; CHECK-BIN: (func $call_from-param-null (type $6) (param $f (ref null $i32-i32)) (result i32) ;; CHECK-BIN-NEXT: (call_ref $i32-i32 ;; CHECK-BIN-NEXT: (i32.const 42) ;; CHECK-BIN-NEXT: (local.get $f) @@ -136,7 +136,7 @@ (call_ref $i32-i32 (i32.const 42) (local.get $f)) ) - ;; CHECK-TEXT: (func $call_from-local-null (type $6) (result i32) + ;; CHECK-TEXT: (func $call_from-local-null (type $7) (result i32) ;; CHECK-TEXT-NEXT: (local $f (ref null $i32-i32)) ;; CHECK-TEXT-NEXT: (local.set $f ;; CHECK-TEXT-NEXT: (ref.func $call-ref-more) @@ -146,7 +146,7 @@ ;; CHECK-TEXT-NEXT: (local.get $f) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-BIN: (func $call_from-local-null (type $6) (result i32) + ;; CHECK-BIN: (func $call_from-local-null (type $7) (result i32) ;; CHECK-BIN-NEXT: (local $f (ref null $i32-i32)) ;; CHECK-BIN-NEXT: (local.set $f ;; CHECK-BIN-NEXT: (ref.func $call-ref-more) @@ -354,21 +354,21 @@ ) ;; CHECK-BIN-NODEBUG: (type $0 (func (result anyref f32 anyref f32))) -;; CHECK-BIN-NODEBUG: (type $1 (func)) +;; CHECK-BIN-NODEBUG: (type $1 (func (param i32) (result i32))) -;; CHECK-BIN-NODEBUG: (type $2 (func (param i32) (result i32))) +;; CHECK-BIN-NODEBUG: (type $2 (func)) ;; CHECK-BIN-NODEBUG: (type $3 (func (result i32 (ref null $0) f64))) -;; CHECK-BIN-NODEBUG: (type $4 (func (param (ref $2)) (result i32))) +;; CHECK-BIN-NODEBUG: (type $4 (func (result eqref))) -;; CHECK-BIN-NODEBUG: (type $5 (func (param (ref null $2)) (result i32))) +;; CHECK-BIN-NODEBUG: (type $5 (func (param (ref $1)) (result i32))) -;; CHECK-BIN-NODEBUG: (type $6 (func (result i32))) +;; CHECK-BIN-NODEBUG: (type $6 (func (param (ref null $1)) (result i32))) -;; CHECK-BIN-NODEBUG: (type $7 (func (result eqref))) +;; CHECK-BIN-NODEBUG: (type $7 (func (result i32))) -;; CHECK-BIN-NODEBUG: (type $8 (func (param f64) (result (ref null $7)))) +;; CHECK-BIN-NODEBUG: (type $8 (func (param f64) (result (ref null $4)))) ;; CHECK-BIN-NODEBUG: (type $9 (func (result anyref))) @@ -376,62 +376,62 @@ ;; CHECK-BIN-NODEBUG: (elem declare func $0 $2) -;; CHECK-BIN-NODEBUG: (func $0 (type $1) -;; CHECK-BIN-NODEBUG-NEXT: (call_ref $1 +;; CHECK-BIN-NODEBUG: (func $0 (type $2) +;; CHECK-BIN-NODEBUG-NEXT: (call_ref $2 ;; CHECK-BIN-NODEBUG-NEXT: (ref.func $0) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG: (func $1 (type $1) -;; CHECK-BIN-NODEBUG-NEXT: (return_call_ref $1 +;; CHECK-BIN-NODEBUG: (func $1 (type $2) +;; CHECK-BIN-NODEBUG-NEXT: (return_call_ref $2 ;; CHECK-BIN-NODEBUG-NEXT: (ref.func $0) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG: (func $2 (type $2) (param $0 i32) (result i32) -;; CHECK-BIN-NODEBUG-NEXT: (call_ref $2 +;; CHECK-BIN-NODEBUG: (func $2 (type $1) (param $0 i32) (result i32) +;; CHECK-BIN-NODEBUG-NEXT: (call_ref $1 ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 42) ;; CHECK-BIN-NODEBUG-NEXT: (ref.func $2) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG: (func $3 (type $4) (param $0 (ref $2)) (result i32) -;; CHECK-BIN-NODEBUG-NEXT: (call_ref $2 +;; CHECK-BIN-NODEBUG: (func $3 (type $5) (param $0 (ref $1)) (result i32) +;; CHECK-BIN-NODEBUG-NEXT: (call_ref $1 ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 42) ;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG: (func $4 (type $5) (param $0 (ref null $2)) (result i32) -;; CHECK-BIN-NODEBUG-NEXT: (call_ref $2 +;; CHECK-BIN-NODEBUG: (func $4 (type $6) (param $0 (ref null $1)) (result i32) +;; CHECK-BIN-NODEBUG-NEXT: (call_ref $1 ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 42) ;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG: (func $5 (type $6) (result i32) -;; CHECK-BIN-NODEBUG-NEXT: (local $0 (ref null $2)) +;; CHECK-BIN-NODEBUG: (func $5 (type $7) (result i32) +;; CHECK-BIN-NODEBUG-NEXT: (local $0 (ref null $1)) ;; CHECK-BIN-NODEBUG-NEXT: (local.set $0 ;; CHECK-BIN-NODEBUG-NEXT: (ref.func $2) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG-NEXT: (call_ref $2 +;; CHECK-BIN-NODEBUG-NEXT: (call_ref $1 ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 42) ;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG: (func $6 (type $8) (param $0 f64) (result (ref null $7)) +;; CHECK-BIN-NODEBUG: (func $6 (type $8) (param $0 f64) (result (ref null $4)) ;; CHECK-BIN-NODEBUG-NEXT: (ref.null nofunc) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG: (func $7 (type $1) +;; CHECK-BIN-NODEBUG: (func $7 (type $2) ;; CHECK-BIN-NODEBUG-NEXT: (local $0 i32) ;; CHECK-BIN-NODEBUG-NEXT: (local $1 f64) ;; CHECK-BIN-NODEBUG-NEXT: (local $2 (ref null $9)) ;; CHECK-BIN-NODEBUG-NEXT: (nop) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG: (func $8 (type $1) +;; CHECK-BIN-NODEBUG: (func $8 (type $2) ;; CHECK-BIN-NODEBUG-NEXT: (local $0 (tuple i32 (ref null $0) f64)) ;; CHECK-BIN-NODEBUG-NEXT: (local $1 (ref null $0)) ;; CHECK-BIN-NODEBUG-NEXT: (local $2 i32) @@ -467,7 +467,7 @@ ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG: (func $9 (type $1) +;; CHECK-BIN-NODEBUG: (func $9 (type $2) ;; CHECK-BIN-NODEBUG-NEXT: (local $0 (ref null $0)) ;; CHECK-BIN-NODEBUG-NEXT: (local $1 (ref null $0)) ;; CHECK-BIN-NODEBUG-NEXT: (local $2 anyref) @@ -480,7 +480,7 @@ ;; CHECK-BIN-NODEBUG-NEXT: (nop) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG: (func $10 (type $1) +;; CHECK-BIN-NODEBUG: (func $10 (type $2) ;; CHECK-BIN-NODEBUG-NEXT: (local $0 i32) ;; CHECK-BIN-NODEBUG-NEXT: (local $1 i64) ;; CHECK-BIN-NODEBUG-NEXT: (local $2 i64) diff --git a/test/lit/isorecursive-good.wast b/test/lit/isorecursive-good.wast index 373f64ac6..4a03d715b 100644 --- a/test/lit/isorecursive-good.wast +++ b/test/lit/isorecursive-good.wast @@ -25,6 +25,8 @@ ) (rec + ;; CHECK: (type $final-root (struct)) + ;; CHECK: (rec ;; CHECK-NEXT: (type $super-func (sub (func (param (ref $sub-array)) (result (ref $super-array))))) (type $super-func (sub (func (param (ref $sub-array)) (result (ref $super-array))))) @@ -34,45 +36,44 @@ (type $final-func (sub final $sub-func (func (param (ref $super-array)) (result (ref $final-array))))) ) - ;; CHECK: (type $final-root (struct)) (type $final-root (sub final (struct))) - ;; CHECK: (func $make-super-struct (type $6) (result (ref $super-struct)) + ;; CHECK: (func $make-super-struct (type $10) (result (ref $super-struct)) ;; CHECK-NEXT: (call $make-final-struct) ;; CHECK-NEXT: ) (func $make-super-struct (result (ref $super-struct)) (call $make-final-struct) ) - ;; CHECK: (func $make-final-struct (type $7) (result (ref $final-struct)) + ;; CHECK: (func $make-final-struct (type $11) (result (ref $final-struct)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $make-final-struct (result (ref $final-struct)) (unreachable) ) - ;; CHECK: (func $make-super-array (type $8) (result (ref $super-array)) + ;; CHECK: (func $make-super-array (type $12) (result (ref $super-array)) ;; CHECK-NEXT: (call $make-final-array) ;; CHECK-NEXT: ) (func $make-super-array (result (ref $super-array)) (call $make-final-array) ) - ;; CHECK: (func $make-final-array (type $9) (result (ref $final-array)) + ;; CHECK: (func $make-final-array (type $13) (result (ref $final-array)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $make-final-array (result (ref $final-array)) (unreachable) ) - ;; CHECK: (func $make-super-func (type $13) (result (ref $super-func)) + ;; CHECK: (func $make-super-func (type $14) (result (ref $super-func)) ;; CHECK-NEXT: (call $make-final-func) ;; CHECK-NEXT: ) (func $make-super-func (result (ref $super-func)) (call $make-final-func) ) - ;; CHECK: (func $make-final-func (type $14) (result (ref $final-func)) + ;; CHECK: (func $make-final-func (type $15) (result (ref $final-func)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $make-final-func (result (ref $final-func)) diff --git a/test/lit/merge/names.wat b/test/lit/merge/names.wat index c4e814649..504dac102 100644 --- a/test/lit/merge/names.wat +++ b/test/lit/merge/names.wat @@ -6,10 +6,10 @@ ;; CHECK: (type $t (struct (field $a i32) (field $b i32))) - ;; CHECK: (type $2 (func (param (ref $t)))) - ;; CHECK: (type $u (struct (field $c i64) (field $d i32))) + ;; CHECK: (type $3 (func (param (ref $t)))) + ;; CHECK: (type $4 (func (param (ref $u)))) ;; CHECK: (global $glob0 i32 (i32.const 0)) @@ -120,7 +120,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) -;; CHECK: (func $2 (type $2) (param $x (ref $t)) +;; CHECK: (func $2 (type $3) (param $x (ref $t)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/cfp-reftest.wast b/test/lit/passes/cfp-reftest.wast index c9fbbdc61..3f903e8b4 100644 --- a/test/lit/passes/cfp-reftest.wast +++ b/test/lit/passes/cfp-reftest.wast @@ -122,17 +122,17 @@ (module ;; CHECK: (type $struct (sub (struct (field i32)))) (type $struct (sub (struct i32))) - ;; CHECK: (type $1 (func)) - ;; CHECK: (type $substruct (sub $struct (struct (field i32) (field f64)))) (type $substruct (sub $struct (struct i32 f64))) + ;; CHECK: (type $2 (func)) + ;; CHECK: (type $3 (func (param (ref null $struct)) (result i32))) ;; CHECK: (type $subsubstruct (sub $substruct (struct (field i32) (field f64)))) (type $subsubstruct (sub $substruct (struct i32 f64))) - ;; CHECK: (func $create (type $1) + ;; CHECK: (func $create (type $2) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 10) @@ -421,17 +421,17 @@ (module ;; CHECK: (type $struct (sub (struct (field i32)))) (type $struct (sub (struct i32))) - ;; CHECK: (type $1 (func)) - ;; CHECK: (type $substruct (sub $struct (struct (field i32) (field f64)))) (type $substruct (sub $struct (struct i32 f64))) + ;; CHECK: (type $2 (func)) + ;; CHECK: (type $subsubstruct (sub $substruct (struct (field i32) (field f64) (field anyref)))) (type $subsubstruct (sub $substruct (struct i32 f64 anyref))) ;; CHECK: (type $4 (func (param (ref null $struct)) (result i32))) - ;; CHECK: (func $create (type $1) + ;; CHECK: (func $create (type $2) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 10) @@ -490,17 +490,17 @@ (module ;; CHECK: (type $struct (sub (struct (field i32)))) (type $struct (sub (struct i32))) - ;; CHECK: (type $1 (func)) - ;; CHECK: (type $substruct (sub $struct (struct (field i32) (field f64)))) (type $substruct (sub $struct (struct i32 f64))) + ;; CHECK: (type $2 (func)) + ;; CHECK: (type $subsubstruct (sub $substruct (struct (field i32) (field f64) (field anyref)))) (type $subsubstruct (sub $substruct (struct i32 f64 anyref))) ;; CHECK: (type $4 (func (param (ref null $struct)) (result i32))) - ;; CHECK: (func $create (type $1) + ;; CHECK: (func $create (type $2) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 20) diff --git a/test/lit/passes/cfp.wast b/test/lit/passes/cfp.wast index cfc8c8d49..d386e7f34 100644 --- a/test/lit/passes/cfp.wast +++ b/test/lit/passes/cfp.wast @@ -555,16 +555,16 @@ ;; subtype, the get must trap anyhow (the reference it receives can ;; only be null in this closed world). (module - ;; CHECK: (type $0 (func)) - ;; CHECK: (type $struct (sub (struct (field i32)))) (type $struct (sub (struct i32))) ;; CHECK: (type $substruct (sub $struct (struct (field i32)))) (type $substruct (sub $struct (struct i32))) + ;; CHECK: (type $2 (func)) + ;; CHECK: (type $3 (func (param (ref null $substruct)))) - ;; CHECK: (func $create (type $0) + ;; CHECK: (func $create (type $2) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 10) @@ -604,14 +604,14 @@ (module ;; CHECK: (type $struct (sub (struct (field (mut i32))))) (type $struct (sub (struct (mut i32)))) - ;; CHECK: (type $1 (func (param (ref null $struct)))) - ;; CHECK: (type $substruct (sub $struct (struct (field (mut i32))))) (type $substruct (sub $struct (struct (mut i32)))) + ;; CHECK: (type $2 (func (param (ref null $struct)))) + ;; CHECK: (type $3 (func (param (ref null $substruct)))) - ;; CHECK: (func $create (type $1) (param $struct (ref null $struct)) + ;; CHECK: (func $create (type $2) (param $struct (ref null $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 10) diff --git a/test/lit/passes/coalesce-locals-gc.wast b/test/lit/passes/coalesce-locals-gc.wast index 0fc83d74e..d2b6fcaeb 100644 --- a/test/lit/passes/coalesce-locals-gc.wast +++ b/test/lit/passes/coalesce-locals-gc.wast @@ -79,7 +79,7 @@ ) ) - ;; CHECK: (func $nn-dead (type $3) + ;; CHECK: (func $nn-dead (type $4) ;; CHECK-NEXT: (local $0 funcref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.func $nn-dead) @@ -118,7 +118,7 @@ ) ) - ;; CHECK: (func $nn-dead-nameless (type $3) + ;; CHECK: (func $nn-dead-nameless (type $4) ;; CHECK-NEXT: (local $0 (ref func)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.func $nn-dead) @@ -149,7 +149,7 @@ ) ) - ;; CHECK: (func $unreachable-get-null (type $3) + ;; CHECK: (func $unreachable-get-null (type $4) ;; CHECK-NEXT: (local $0 anyref) ;; CHECK-NEXT: (local $1 i31ref) ;; CHECK-NEXT: (unreachable) @@ -306,9 +306,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $nn-tuple-global - ;; CHECK-NEXT: (block (type $0) (result (ref any) i32) + ;; CHECK-NEXT: (block (type $1) (result (ref any) i32) ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (if (type $0) (result (ref any) i32) + ;; CHECK-NEXT: (if (type $1) (result (ref any) i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (then ;; CHECK-NEXT: (tuple.make 2 diff --git a/test/lit/passes/dae-gc-refine-params.wast b/test/lit/passes/dae-gc-refine-params.wast index 77766e18f..f9e9c4651 100644 --- a/test/lit/passes/dae-gc-refine-params.wast +++ b/test/lit/passes/dae-gc-refine-params.wast @@ -19,7 +19,7 @@ (type $"{i32_f32}" (sub $"{i32}" (struct (field i32) (field f32)))) - ;; CHECK: (func $call-various-params-no (type $0) + ;; CHECK: (func $call-various-params-no (type $2) ;; CHECK-NEXT: (call $various-params-no ;; CHECK-NEXT: (call $"get_{}") ;; CHECK-NEXT: (call $"get_{i32}") @@ -45,7 +45,7 @@ ) ;; This function is called in ways that do not allow us to alter the types of ;; its parameters (see last function). - ;; CHECK: (func $various-params-no (type $7) (param $x (ref null $"{}")) (param $y (ref null $"{}")) + ;; CHECK: (func $various-params-no (type $8) (param $x (ref null $"{}")) (param $y (ref null $"{}")) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) @@ -59,7 +59,7 @@ (drop (local.get $y)) ) - ;; CHECK: (func $"get_{}" (type $8) (result (ref null $"{}")) + ;; CHECK: (func $"get_{}" (type $9) (result (ref null $"{}")) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $"get_{}" (result (ref null $"{}")) @@ -78,7 +78,7 @@ (unreachable) ) - ;; CHECK: (func $call-various-params-yes (type $0) + ;; CHECK: (func $call-various-params-yes (type $2) ;; CHECK-NEXT: (call $various-params-yes ;; CHECK-NEXT: (call $"get_null_{i32}") ;; CHECK-NEXT: (i32.const 0) @@ -125,7 +125,7 @@ (drop (local.get $y)) ) - ;; CHECK: (func $call-various-params-set (type $0) + ;; CHECK: (func $call-various-params-set (type $2) ;; CHECK-NEXT: (call $various-params-set ;; CHECK-NEXT: (call $"get_null_{i32}") ;; CHECK-NEXT: (call $"get_null_{i32}") @@ -196,7 +196,7 @@ ) ) - ;; CHECK: (func $call-various-params-tee (type $0) + ;; CHECK: (func $call-various-params-tee (type $2) ;; CHECK-NEXT: (call $various-params-tee ;; CHECK-NEXT: (call $"get_null_{i32}") ;; CHECK-NEXT: ) @@ -232,7 +232,7 @@ ) ) - ;; CHECK: (func $call-various-params-null (type $0) + ;; CHECK: (func $call-various-params-null (type $2) ;; CHECK-NEXT: (call $various-params-null ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null none) @@ -286,7 +286,7 @@ (local.set $temp (local.get $temp)) ) - ;; CHECK: (func $call-various-params-middle (type $0) + ;; CHECK: (func $call-various-params-middle (type $2) ;; CHECK-NEXT: (call $various-params-middle ;; CHECK-NEXT: (call $"get_null_{i32_i64}") ;; CHECK-NEXT: ) @@ -314,7 +314,7 @@ (drop (local.get $x)) ) - ;; CHECK: (func $unused-and-refinable (type $0) + ;; CHECK: (func $unused-and-refinable (type $2) ;; CHECK-NEXT: (local $0 structref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) @@ -330,7 +330,7 @@ ;; local). ) - ;; CHECK: (func $call-unused-and-refinable (type $0) + ;; CHECK: (func $call-unused-and-refinable (type $2) ;; CHECK-NEXT: (call $unused-and-refinable) ;; CHECK-NEXT: ) (func $call-unused-and-refinable @@ -357,7 +357,7 @@ ) ) - ;; CHECK: (func $call-non-nullable-fixup (type $0) + ;; CHECK: (func $call-non-nullable-fixup (type $2) ;; CHECK-NEXT: (call $non-nullable-fixup ;; CHECK-NEXT: (struct.new_default $"{}") ;; CHECK-NEXT: ) @@ -368,7 +368,7 @@ ) ) - ;; CHECK: (func $call-update-null (type $0) + ;; CHECK: (func $call-update-null (type $2) ;; CHECK-NEXT: (call $update-null ;; CHECK-NEXT: (ref.null none) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/dae-gc-refine-return.wast b/test/lit/passes/dae-gc-refine-return.wast index 1088cda25..abc1154da 100644 --- a/test/lit/passes/dae-gc-refine-return.wast +++ b/test/lit/passes/dae-gc-refine-return.wast @@ -20,7 +20,7 @@ (table 1 1 funcref) ;; We cannot refine the return type if nothing is actually returned. - ;; CHECK: (func $refine-return-no-return (type $2) (result anyref) + ;; CHECK: (func $refine-return-no-return (type $0) (result anyref) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $refine-return-no-return) @@ -37,7 +37,7 @@ ) ;; We cannot refine the return type if it is already the best it can be. - ;; CHECK: (func $refine-return-no-refining (type $2) (result anyref) + ;; CHECK: (func $refine-return-no-refining (type $0) (result anyref) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local $any anyref) ;; CHECK-NEXT: (local.set $temp @@ -170,7 +170,7 @@ (local.get $i31) ) - ;; CHECK: (func $refine-return-many-lub (type $5) (result eqref) + ;; CHECK: (func $refine-return-many-lub (type $7) (result eqref) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local $i31 i31ref) ;; CHECK-NEXT: (local $struct structref) @@ -218,7 +218,7 @@ (local.get $i31) ) - ;; CHECK: (func $refine-return-many-lub-2 (type $5) (result eqref) + ;; CHECK: (func $refine-return-many-lub-2 (type $7) (result eqref) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local $i31 i31ref) ;; CHECK-NEXT: (local $struct structref) @@ -267,7 +267,7 @@ ) ;; We can refine the return types of tuples. - ;; CHECK: (func $refine-return-tuple (type $6) (result i31ref i32) + ;; CHECK: (func $refine-return-tuple (type $8) (result i31ref i32) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local $i31 i31ref) ;; CHECK-NEXT: (local.set $temp @@ -300,13 +300,13 @@ ;; returns a ref.func of this one. They both begin by returning a funcref; ;; after refining the return type of the second function, it will have a more ;; specific type (which is ok as subtyping is allowed with tail calls). - ;; CHECK: (func $do-return-call (type $7) (result funcref) + ;; CHECK: (func $do-return-call (type $6) (result funcref) ;; CHECK-NEXT: (return_call $return-ref-func) ;; CHECK-NEXT: ) (func $do-return-call (result funcref) (return_call $return-ref-func) ) - ;; CHECK: (func $return-ref-func (type $9) (result (ref $7)) + ;; CHECK: (func $return-ref-func (type $9) (result (ref $6)) ;; CHECK-NEXT: (ref.func $do-return-call) ;; CHECK-NEXT: ) (func $return-ref-func (result funcref) @@ -329,7 +329,7 @@ ;; target's return type is more specific than anyref. (return_call $tail-callee) ) - ;; CHECK: (func $tail-caller-no (type $2) (result anyref) + ;; CHECK: (func $tail-caller-no (type $0) (result anyref) ;; CHECK-NEXT: (local $any anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) @@ -386,7 +386,7 @@ (func $tail-caller-indirect-yes (result anyref) (return_call_indirect (type $"return_{}") (i32.const 0)) ) - ;; CHECK: (func $tail-caller-indirect-no (type $2) (result anyref) + ;; CHECK: (func $tail-caller-indirect-no (type $0) (result anyref) ;; CHECK-NEXT: (local $any anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) @@ -445,7 +445,7 @@ (return_call_ref $"return_{}" (local.get $"return_{}")) ) - ;; CHECK: (func $tail-caller-call_ref-no (type $2) (result anyref) + ;; CHECK: (func $tail-caller-call_ref-no (type $0) (result anyref) ;; CHECK-NEXT: (local $any anyref) ;; CHECK-NEXT: (local $"return_{}" (ref null $"return_{}")) ;; CHECK-NEXT: (if @@ -471,7 +471,7 @@ ) (return_call_ref $"return_{}" (local.get $"return_{}")) ) - ;; CHECK: (func $tail-caller-call_ref-unreachable (type $2) (result anyref) + ;; CHECK: (func $tail-caller-call_ref-unreachable (type $0) (result anyref) ;; CHECK-NEXT: (block ;; (replaces unreachable CallRef we can't emit) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) @@ -554,7 +554,7 @@ ) ) - ;; CHECK: (func $call-update-null (type $2) (result anyref) + ;; CHECK: (func $call-update-null (type $0) (result anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $update-null ;; CHECK-NEXT: (i32.const 0) diff --git a/test/lit/passes/dae_tnh.wast b/test/lit/passes/dae_tnh.wast index 6d75aed30..2bba6570b 100644 --- a/test/lit/passes/dae_tnh.wast +++ b/test/lit/passes/dae_tnh.wast @@ -3,14 +3,14 @@ ;; RUN: foreach %s %t wasm-opt --dae --all-features -tnh -S -o - | filecheck %s (module - ;; CHECK: (type $0 (func)) - ;; CHECK: (type $struct (sub (struct (field i32)))) (type $struct (sub (struct (field i32)))) + ;; CHECK: (type $1 (func)) + ;; CHECK: (type $2 (func (param (ref null $struct)))) - ;; CHECK: (func $target (type $0) + ;; CHECK: (func $target (type $1) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/gufa-tnh.wast b/test/lit/passes/gufa-tnh.wast index ecf031bbf..e645c4560 100644 --- a/test/lit/passes/gufa-tnh.wast +++ b/test/lit/passes/gufa-tnh.wast @@ -1978,17 +1978,17 @@ ;; Control flow around calls. (module - ;; CHECK: (type $0 (func)) - ;; CHECK: (type $A (sub (struct))) (type $A (sub (struct))) + ;; CHECK: (type $1 (func)) + ;; CHECK: (type $B (sub $A (struct))) (type $B (sub $A (struct))) ;; CHECK: (type $3 (func (param (ref null $A)))) - ;; CHECK: (import "a" "b" (func $import-throw (type $0))) + ;; CHECK: (import "a" "b" (func $import-throw (type $1))) (import "a" "b" (func $import-throw)) ;; CHECK: (export "a" (func $caller)) @@ -2013,7 +2013,7 @@ ) ) - ;; CHECK: (func $caller (type $0) + ;; CHECK: (func $caller (type $1) ;; CHECK-NEXT: (call $called ;; CHECK-NEXT: (struct.new_default $B) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/gufa-vs-cfp.wast b/test/lit/passes/gufa-vs-cfp.wast index 45f111cb2..4e64ed350 100644 --- a/test/lit/passes/gufa-vs-cfp.wast +++ b/test/lit/passes/gufa-vs-cfp.wast @@ -1145,6 +1145,8 @@ ;; different values in the sub-most type. Create the top and bottom types, but ;; not the middle one. (module + ;; CHECK: (type $0 (func)) + ;; CHECK: (type $struct1 (sub (struct (field i32) (field i32)))) (type $struct1 (sub (struct i32 i32))) @@ -1154,8 +1156,6 @@ ;; CHECK: (type $struct3 (sub $struct2 (struct (field i32) (field i32) (field f64) (field f64) (field anyref) (field anyref)))) (type $struct3 (sub $struct2 (struct i32 i32 f64 f64 anyref anyref))) - ;; CHECK: (type $3 (func)) - ;; CHECK: (type $4 (func (result anyref))) ;; CHECK: (type $5 (func (result (ref $struct1)))) @@ -1200,7 +1200,7 @@ ) ) - ;; CHECK: (func $get-1 (type $3) + ;; CHECK: (func $get-1 (type $0) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop @@ -1235,7 +1235,7 @@ ) ) - ;; CHECK: (func $get-2 (type $3) + ;; CHECK: (func $get-2 (type $0) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop @@ -1295,7 +1295,7 @@ ) ) - ;; CHECK: (func $get-3 (type $3) + ;; CHECK: (func $get-3 (type $0) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop @@ -2027,6 +2027,8 @@ ;; sets, and the final subtype C has a create and a get. The set to A should ;; apply to it, preventing optimization. (module + ;; CHECK: (type $0 (func)) + ;; CHECK: (type $A (sub (struct (field (mut i32))))) (type $A (sub (struct (mut i32)))) @@ -2036,8 +2038,6 @@ ;; CHECK: (type $C (sub $B (struct (field (mut i32))))) (type $C (sub $B (struct (mut i32)))) - ;; CHECK: (type $3 (func)) - ;; CHECK: (type $4 (func (result (ref $C)))) ;; CHECK: (func $create-C (type $4) (result (ref $C)) @@ -2050,7 +2050,7 @@ (i32.const 10) ) ) - ;; CHECK: (func $set (type $3) + ;; CHECK: (func $set (type $0) ;; CHECK-NEXT: (struct.set $C 0 ;; CHECK-NEXT: (ref.cast (ref $C) ;; CHECK-NEXT: (call $create-C) @@ -2071,7 +2071,7 @@ (i32.const 20) ;; different value than in $create ) ) - ;; CHECK: (func $get (type $3) + ;; CHECK: (func $get (type $0) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $C 0 ;; CHECK-NEXT: (call $create-C) diff --git a/test/lit/passes/local-subtyping.wast b/test/lit/passes/local-subtyping.wast index 2985102e1..922d350c5 100644 --- a/test/lit/passes/local-subtyping.wast +++ b/test/lit/passes/local-subtyping.wast @@ -21,7 +21,7 @@ ;; CHECK: (import "out" "i32" (func $i32 (type $1) (result i32))) (import "out" "i32" (func $i32 (result i32))) - ;; CHECK: (import "out" "i64" (func $i64 (type $6) (result i64))) + ;; CHECK: (import "out" "i64" (func $i64 (type $4) (result i64))) (import "out" "i64" (func $i64 (result i64))) ;; CHECK: (tag $e-anyref (param anyref)) @@ -210,7 +210,7 @@ ;; Sometimes a refinalize is necessary in between the iterations. ;; CHECK: (func $multiple-iterations-refinalize (type $2) (param $i i32) ;; CHECK-NEXT: (local $x (ref $1)) - ;; CHECK-NEXT: (local $y (ref $6)) + ;; CHECK-NEXT: (local $y (ref $4)) ;; CHECK-NEXT: (local $z (ref func)) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.func $i32) diff --git a/test/lit/passes/monomorphize-context.wast b/test/lit/passes/monomorphize-context.wast index e4391d3a5..cc4bdfc9d 100644 --- a/test/lit/passes/monomorphize-context.wast +++ b/test/lit/passes/monomorphize-context.wast @@ -954,8 +954,6 @@ ;; CAREFUL-NEXT: ) (module ;; ALWAYS: (type $struct (struct (field i16) (field (mut i8)) (field (mut f64)))) - ;; CAREFUL: (type $0 (func)) - ;; CAREFUL: (type $struct (struct (field i16) (field (mut i8)) (field (mut f64)))) (type $struct (struct (field i16) (field (mut i8)) (field (mut f64)))) @@ -973,11 +971,13 @@ ;; ALWAYS-NEXT: (local.get $f64) ;; ALWAYS-NEXT: ) ;; ALWAYS-NEXT: ) + ;; CAREFUL: (type $1 (func)) + ;; CAREFUL: (type $2 (func (param (ref $struct)))) ;; CAREFUL: (type $3 (func (param i32 f64))) - ;; CAREFUL: (func $caller (type $0) + ;; CAREFUL: (func $caller (type $1) ;; CAREFUL-NEXT: (local $i32 i32) ;; CAREFUL-NEXT: (local $f64 f64) ;; CAREFUL-NEXT: (call $target_2 diff --git a/test/lit/passes/monomorphize-limits.wast b/test/lit/passes/monomorphize-limits.wast index 7b3baee5e..344f55b51 100644 --- a/test/lit/passes/monomorphize-limits.wast +++ b/test/lit/passes/monomorphize-limits.wast @@ -235,8 +235,6 @@ ;; CAREFUL-NEXT: ) (module ;; ALWAYS: (type $array (array (mut i32))) - ;; CAREFUL: (type $0 (func)) - ;; CAREFUL: (type $array (array (mut i32))) (type $array (array (mut i32))) @@ -249,11 +247,13 @@ ;; ALWAYS: (func $caller-consts (type $1) ;; ALWAYS-NEXT: (call $target_3) ;; ALWAYS-NEXT: ) + ;; CAREFUL: (type $1 (func)) + ;; CAREFUL: (type $2 (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32))) ;; CAREFUL: (type $3 (func (param (ref $array)))) - ;; CAREFUL: (func $caller-consts (type $0) + ;; CAREFUL: (func $caller-consts (type $1) ;; CAREFUL-NEXT: (call $target_3) ;; CAREFUL-NEXT: ) (func $caller-consts @@ -395,6 +395,6 @@ ;; ALWAYS-NEXT: (nop) ;; ALWAYS-NEXT: ) -;; CAREFUL: (func $target_3 (type $0) +;; CAREFUL: (func $target_3 (type $1) ;; CAREFUL-NEXT: (nop) ;; CAREFUL-NEXT: ) diff --git a/test/lit/passes/monomorphize-types.wast b/test/lit/passes/monomorphize-types.wast index 863ccc086..d0cd4edc2 100644 --- a/test/lit/passes/monomorphize-types.wast +++ b/test/lit/passes/monomorphize-types.wast @@ -11,24 +11,24 @@ ;; ALWAYS: (type $A (sub (struct))) ;; CAREFUL: (type $A (sub (struct))) (type $A (sub (struct))) - ;; ALWAYS: (type $1 (func (param (ref $A)))) - ;; ALWAYS: (type $B (sub $A (struct))) - ;; CAREFUL: (type $1 (func (param (ref $A)))) - ;; CAREFUL: (type $B (sub $A (struct))) (type $B (sub $A (struct))) + ;; ALWAYS: (type $2 (func (param (ref $A)))) + ;; ALWAYS: (type $3 (func (param (ref $B)))) ;; ALWAYS: (type $4 (func (param (ref $A) (ref $B)))) - ;; ALWAYS: (import "a" "b" (func $import (type $1) (param (ref $A)))) + ;; ALWAYS: (import "a" "b" (func $import (type $2) (param (ref $A)))) + ;; CAREFUL: (type $2 (func (param (ref $A)))) + ;; CAREFUL: (type $3 (func (param (ref $A) (ref $B)))) ;; CAREFUL: (type $4 (func (param (ref $B)))) - ;; CAREFUL: (import "a" "b" (func $import (type $1) (param (ref $A)))) + ;; CAREFUL: (import "a" "b" (func $import (type $2) (param (ref $A)))) (import "a" "b" (func $import (param (ref $A)))) ;; ALWAYS: (func $calls (type $4) (param $A (ref $A)) (param $B (ref $B)) @@ -96,12 +96,12 @@ ) ) - ;; ALWAYS: (func $refinable (type $1) (param $ref (ref $A)) + ;; ALWAYS: (func $refinable (type $2) (param $ref (ref $A)) ;; ALWAYS-NEXT: (drop ;; ALWAYS-NEXT: (local.get $ref) ;; ALWAYS-NEXT: ) ;; ALWAYS-NEXT: ) - ;; CAREFUL: (func $refinable (type $1) (param $0 (ref $A)) + ;; CAREFUL: (func $refinable (type $2) (param $0 (ref $A)) ;; CAREFUL-NEXT: (nop) ;; CAREFUL-NEXT: ) (func $refinable (param $ref (ref $A)) @@ -213,21 +213,19 @@ ;; CAREFUL: (type $A (sub (struct))) (type $A (sub (struct))) ;; ALWAYS: (type $B (sub $A (struct))) - ;; CAREFUL: (type $1 (func (param (ref $A)))) - ;; CAREFUL: (type $B (sub $A (struct))) (type $B (sub $A (struct))) - ;; ALWAYS: (type $2 (func (param (ref $A)))) - - ;; ALWAYS: (type $3 (func (param (ref $B)))) - ;; ALWAYS: (type $C (sub $B (struct))) - ;; CAREFUL: (type $3 (func (param (ref $A) (ref $B)))) + ;; CAREFUL: (type $2 (func (param (ref $A)))) ;; CAREFUL: (type $C (sub $B (struct))) (type $C (sub $B (struct))) + ;; ALWAYS: (type $3 (func (param (ref $A)))) + + ;; ALWAYS: (type $4 (func (param (ref $B)))) + ;; ALWAYS: (type $5 (func (param (ref $A) (ref $B)))) ;; ALWAYS: (type $6 (func (param (ref $C) (ref $B)))) @@ -242,9 +240,11 @@ ;; ALWAYS-NEXT: (local.get $B) ;; ALWAYS-NEXT: ) ;; ALWAYS-NEXT: ) + ;; CAREFUL: (type $4 (func (param (ref $A) (ref $B)))) + ;; CAREFUL: (type $5 (func (param (ref $C) (ref $B)))) - ;; CAREFUL: (func $calls1 (type $3) (param $A (ref $A)) (param $B (ref $B)) + ;; CAREFUL: (func $calls1 (type $4) (param $A (ref $A)) (param $B (ref $B)) ;; CAREFUL-NEXT: (call $refinable1 ;; CAREFUL-NEXT: (local.get $A) ;; CAREFUL-NEXT: ) @@ -286,12 +286,12 @@ ) ) - ;; ALWAYS: (func $refinable1 (type $2) (param $ref (ref $A)) + ;; ALWAYS: (func $refinable1 (type $3) (param $ref (ref $A)) ;; ALWAYS-NEXT: (drop ;; ALWAYS-NEXT: (local.get $ref) ;; ALWAYS-NEXT: ) ;; ALWAYS-NEXT: ) - ;; CAREFUL: (func $refinable1 (type $1) (param $0 (ref $A)) + ;; CAREFUL: (func $refinable1 (type $2) (param $0 (ref $A)) ;; CAREFUL-NEXT: (nop) ;; CAREFUL-NEXT: ) (func $refinable1 (param $ref (ref $A)) @@ -300,12 +300,12 @@ ) ) - ;; ALWAYS: (func $refinable2 (type $2) (param $ref (ref $A)) + ;; ALWAYS: (func $refinable2 (type $3) (param $ref (ref $A)) ;; ALWAYS-NEXT: (drop ;; ALWAYS-NEXT: (local.get $ref) ;; ALWAYS-NEXT: ) ;; ALWAYS-NEXT: ) - ;; CAREFUL: (func $refinable2 (type $1) (param $0 (ref $A)) + ;; CAREFUL: (func $refinable2 (type $2) (param $0 (ref $A)) ;; CAREFUL-NEXT: (nop) ;; CAREFUL-NEXT: ) (func $refinable2 (param $ref (ref $A)) @@ -315,7 +315,7 @@ ) ) -;; ALWAYS: (func $refinable1_4 (type $3) (param $0 (ref $B)) +;; ALWAYS: (func $refinable1_4 (type $4) (param $0 (ref $B)) ;; ALWAYS-NEXT: (local $ref (ref $A)) ;; ALWAYS-NEXT: (local.set $ref ;; ALWAYS-NEXT: (local.get $0) @@ -335,7 +335,7 @@ ;; ALWAYS-NEXT: ) ;; ALWAYS-NEXT: ) -;; ALWAYS: (func $refinable2_6 (type $3) (param $0 (ref $B)) +;; ALWAYS: (func $refinable2_6 (type $4) (param $0 (ref $B)) ;; ALWAYS-NEXT: (local $ref (ref $A)) ;; ALWAYS-NEXT: (local.set $ref ;; ALWAYS-NEXT: (local.get $0) diff --git a/test/lit/passes/optimize-instructions-gc-iit.wast b/test/lit/passes/optimize-instructions-gc-iit.wast index 4b9c46179..ab3005af5 100644 --- a/test/lit/passes/optimize-instructions-gc-iit.wast +++ b/test/lit/passes/optimize-instructions-gc-iit.wast @@ -18,10 +18,10 @@ ;; TNH: (type $other (struct (field i64) (field f32))) (type $other (struct (field i64) (field f32))) - ;; CHECK: (func $foo (type $2) + ;; CHECK: (func $foo (type $3) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) - ;; TNH: (func $foo (type $2) + ;; TNH: (func $foo (type $3) ;; TNH-NEXT: (nop) ;; TNH-NEXT: ) (func $foo) diff --git a/test/lit/passes/optimize-instructions-gc.wast b/test/lit/passes/optimize-instructions-gc.wast index 60fca14fc..954cb1999 100644 --- a/test/lit/passes/optimize-instructions-gc.wast +++ b/test/lit/passes/optimize-instructions-gc.wast @@ -122,7 +122,7 @@ ) ;; Similar, but for arrays. - ;; CHECK: (func $store-trunc2 (type $15) (param $x (ref null $array)) + ;; CHECK: (func $store-trunc2 (type $16) (param $x (ref null $array)) ;; CHECK-NEXT: (array.set $array ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) @@ -139,7 +139,7 @@ ;; ref.is_null is not needed on a non-nullable value, and if something is ;; cast to its own type, we don't need that either, etc. - ;; CHECK: (func $unneeded_test (type $16) (param $struct (ref $struct)) (param $func (ref func)) (param $i31 (ref i31)) + ;; CHECK: (func $unneeded_test (type $17) (param $struct (ref $struct)) (param $func (ref func)) (param $i31 (ref i31)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop @@ -182,7 +182,7 @@ ;; similar to $unneeded_is, but the values are nullable. we can at least ;; leave just the null check. - ;; CHECK: (func $unneeded_test_null (type $17) (param $struct (ref null $struct)) (param $func funcref) (param $i31 i31ref) + ;; CHECK: (func $unneeded_test_null (type $18) (param $struct (ref null $struct)) (param $func funcref) (param $i31 i31ref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $struct) @@ -223,7 +223,7 @@ ;; ref.as_non_null is not needed on a non-nullable value, and if something is ;; a func we don't need that either etc., and can just return the value. - ;; CHECK: (func $unneeded_cast (type $16) (param $struct (ref $struct)) (param $func (ref func)) (param $i31 (ref i31)) + ;; CHECK: (func $unneeded_cast (type $17) (param $struct (ref $struct)) (param $func (ref func)) (param $i31 (ref i31)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) @@ -251,7 +251,7 @@ ;; similar to $unneeded_cast, but the values are nullable. we can turn the ;; more specific things into ref.as_non_null. - ;; CHECK: (func $unneeded_cast_null (type $17) (param $struct (ref null $struct)) (param $func funcref) (param $i31 i31ref) + ;; CHECK: (func $unneeded_cast_null (type $18) (param $struct (ref null $struct)) (param $func funcref) (param $i31 i31ref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $struct) @@ -586,7 +586,7 @@ ) ) - ;; CHECK: (func $flip-cast-of-as-non-null (type $18) (param $x anyref) + ;; CHECK: (func $flip-cast-of-as-non-null (type $19) (param $x anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast (ref $struct) ;; CHECK-NEXT: (local.get $x) @@ -639,7 +639,7 @@ ) ) ) - ;; CHECK: (func $flip-tee-of-as-non-null (type $18) (param $x anyref) + ;; CHECK: (func $flip-tee-of-as-non-null (type $19) (param $x anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.tee $x @@ -708,7 +708,7 @@ ) ) ) - ;; CHECK: (func $select-identical-arms-but-side-effect (type $19) (param $x (ref null $struct)) (param $y (ref null $struct)) (param $z i32) + ;; CHECK: (func $select-identical-arms-but-side-effect (type $20) (param $x (ref null $struct)) (param $y (ref null $struct)) (param $z i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (struct.get_u $struct $i8 @@ -760,7 +760,7 @@ ) ) ) - ;; CHECK: (func $if-identical-arms-with-side-effect (type $19) (param $x (ref null $struct)) (param $y (ref null $struct)) (param $z i32) + ;; CHECK: (func $if-identical-arms-with-side-effect (type $20) (param $x (ref null $struct)) (param $y (ref null $struct)) (param $z i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get_u $struct $i8 ;; CHECK-NEXT: (if (result (ref null $struct)) @@ -3129,7 +3129,7 @@ (unreachable) ) - ;; CHECK: (func $array-copy-non-null (type $15) (param $x (ref null $array)) + ;; CHECK: (func $array-copy-non-null (type $16) (param $x (ref null $array)) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (array.copy $array $array ;; CHECK-NEXT: (ref.as_non_null diff --git a/test/lit/passes/simplify-locals-gc.wast b/test/lit/passes/simplify-locals-gc.wast index b5b843474..2eb784664 100644 --- a/test/lit/passes/simplify-locals-gc.wast +++ b/test/lit/passes/simplify-locals-gc.wast @@ -4,13 +4,13 @@ ;; RUN: | filecheck %s (module + ;; CHECK: (type $struct (struct (field (mut i32)))) + (type $struct (struct (field (mut i32)))) + ;; CHECK: (type $A (sub (struct (field structref)))) ;; CHECK: (type $B (sub $A (struct (field (ref struct))))) - ;; CHECK: (type $struct (struct (field (mut i32)))) - (type $struct (struct (field (mut i32)))) - ;; CHECK: (type $struct-immutable (struct (field i32))) (type $struct-immutable (struct (field i32))) @@ -21,7 +21,7 @@ (type $B (sub $A (struct (field (ref struct))))) ;; Writes to heap objects cannot be reordered with reads. - ;; CHECK: (func $no-reorder-past-write (type $4) (param $x (ref $struct)) (result i32) + ;; CHECK: (func $no-reorder-past-write (type $5) (param $x (ref $struct)) (result i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (struct.get $struct 0 @@ -289,7 +289,7 @@ ) ) - ;; CHECK: (func $call-vs-mutable-read (type $4) (param $0 (ref $struct)) (result i32) + ;; CHECK: (func $call-vs-mutable-read (type $5) (param $0 (ref $struct)) (result i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $side-effect) diff --git a/test/lit/passes/string-gathering.wast b/test/lit/passes/string-gathering.wast index 877a1771b..524c6a1f0 100644 --- a/test/lit/passes/string-gathering.wast +++ b/test/lit/passes/string-gathering.wast @@ -25,19 +25,19 @@ (global $global (ref string) (string.const "foo")) ;; CHECK: (global $global2 stringref (global.get $string.const_bar)) - ;; LOWER: (type $0 (func)) + ;; LOWER: (type $0 (array (mut i16))) - ;; LOWER: (type $1 (func (param externref externref) (result i32))) + ;; LOWER: (type $1 (func)) - ;; LOWER: (type $2 (array (mut i16))) + ;; LOWER: (type $2 (func (param externref externref) (result i32))) - ;; LOWER: (type $3 (func (param (ref null $2) i32 i32) (result (ref extern)))) + ;; LOWER: (type $3 (func (param (ref null $0) i32 i32) (result (ref extern)))) ;; LOWER: (type $4 (func (param i32) (result (ref extern)))) ;; LOWER: (type $5 (func (param externref externref) (result (ref extern)))) - ;; LOWER: (type $6 (func (param externref (ref null $2) i32) (result i32))) + ;; LOWER: (type $6 (func (param externref (ref null $0) i32) (result i32))) ;; LOWER: (type $7 (func (param externref) (result i32))) @@ -51,17 +51,17 @@ ;; LOWER: (import "string.const" "2" (global $global (ref extern))) - ;; LOWER: (import "wasm:js-string" "fromCharCodeArray" (func $fromCharCodeArray (type $3) (param (ref null $2) i32 i32) (result (ref extern)))) + ;; LOWER: (import "wasm:js-string" "fromCharCodeArray" (func $fromCharCodeArray (type $3) (param (ref null $0) i32 i32) (result (ref extern)))) ;; LOWER: (import "wasm:js-string" "fromCodePoint" (func $fromCodePoint (type $4) (param i32) (result (ref extern)))) ;; LOWER: (import "wasm:js-string" "concat" (func $concat (type $5) (param externref externref) (result (ref extern)))) - ;; LOWER: (import "wasm:js-string" "intoCharCodeArray" (func $intoCharCodeArray (type $6) (param externref (ref null $2) i32) (result i32))) + ;; LOWER: (import "wasm:js-string" "intoCharCodeArray" (func $intoCharCodeArray (type $6) (param externref (ref null $0) i32) (result i32))) - ;; LOWER: (import "wasm:js-string" "equals" (func $equals (type $1) (param externref externref) (result i32))) + ;; LOWER: (import "wasm:js-string" "equals" (func $equals (type $2) (param externref externref) (result i32))) - ;; LOWER: (import "wasm:js-string" "compare" (func $compare (type $1) (param externref externref) (result i32))) + ;; LOWER: (import "wasm:js-string" "compare" (func $compare (type $2) (param externref externref) (result i32))) ;; LOWER: (import "wasm:js-string" "length" (func $length (type $7) (param externref) (result i32))) @@ -80,7 +80,7 @@ ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; LOWER: (func $a (type $0) + ;; LOWER: (func $a (type $1) ;; LOWER-NEXT: (drop ;; LOWER-NEXT: (global.get $string.const_bar) ;; LOWER-NEXT: ) @@ -111,7 +111,7 @@ ;; CHECK-NEXT: (global.get $global2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; LOWER: (func $b (type $0) + ;; LOWER: (func $b (type $1) ;; LOWER-NEXT: (drop ;; LOWER-NEXT: (global.get $string.const_bar) ;; LOWER-NEXT: ) @@ -147,17 +147,17 @@ ;; Multiple possible reusable globals. Also test ignoring of imports. (module ;; CHECK: (import "a" "b" (global $import (ref string))) - ;; LOWER: (type $0 (func (param externref externref) (result i32))) + ;; LOWER: (type $0 (array (mut i16))) - ;; LOWER: (type $1 (array (mut i16))) + ;; LOWER: (type $1 (func (param externref externref) (result i32))) - ;; LOWER: (type $2 (func (param (ref null $1) i32 i32) (result (ref extern)))) + ;; LOWER: (type $2 (func (param (ref null $0) i32 i32) (result (ref extern)))) ;; LOWER: (type $3 (func (param i32) (result (ref extern)))) ;; LOWER: (type $4 (func (param externref externref) (result (ref extern)))) - ;; LOWER: (type $5 (func (param externref (ref null $1) i32) (result i32))) + ;; LOWER: (type $5 (func (param externref (ref null $0) i32) (result i32))) ;; LOWER: (type $6 (func (param externref) (result i32))) @@ -176,17 +176,17 @@ ;; LOWER: (import "string.const" "1" (global $global4 (ref extern))) - ;; LOWER: (import "wasm:js-string" "fromCharCodeArray" (func $fromCharCodeArray (type $2) (param (ref null $1) i32 i32) (result (ref extern)))) + ;; LOWER: (import "wasm:js-string" "fromCharCodeArray" (func $fromCharCodeArray (type $2) (param (ref null $0) i32 i32) (result (ref extern)))) ;; LOWER: (import "wasm:js-string" "fromCodePoint" (func $fromCodePoint (type $3) (param i32) (result (ref extern)))) ;; LOWER: (import "wasm:js-string" "concat" (func $concat (type $4) (param externref externref) (result (ref extern)))) - ;; LOWER: (import "wasm:js-string" "intoCharCodeArray" (func $intoCharCodeArray (type $5) (param externref (ref null $1) i32) (result i32))) + ;; LOWER: (import "wasm:js-string" "intoCharCodeArray" (func $intoCharCodeArray (type $5) (param externref (ref null $0) i32) (result i32))) - ;; LOWER: (import "wasm:js-string" "equals" (func $equals (type $0) (param externref externref) (result i32))) + ;; LOWER: (import "wasm:js-string" "equals" (func $equals (type $1) (param externref externref) (result i32))) - ;; LOWER: (import "wasm:js-string" "compare" (func $compare (type $0) (param externref externref) (result i32))) + ;; LOWER: (import "wasm:js-string" "compare" (func $compare (type $1) (param externref externref) (result i32))) ;; LOWER: (import "wasm:js-string" "length" (func $length (type $6) (param externref) (result i32))) @@ -220,19 +220,19 @@ ;; CHECK: (global $string.const_foo (ref string) (string.const "foo")) ;; CHECK: (global $global (mut (ref string)) (global.get $string.const_foo)) - ;; LOWER: (type $0 (func (param externref externref) (result i32))) + ;; LOWER: (type $0 (array (mut i16))) - ;; LOWER: (type $1 (array (mut i16))) + ;; LOWER: (type $1 (func (param externref externref) (result i32))) ;; LOWER: (type $2 (func)) - ;; LOWER: (type $3 (func (param (ref null $1) i32 i32) (result (ref extern)))) + ;; LOWER: (type $3 (func (param (ref null $0) i32 i32) (result (ref extern)))) ;; LOWER: (type $4 (func (param i32) (result (ref extern)))) ;; LOWER: (type $5 (func (param externref externref) (result (ref extern)))) - ;; LOWER: (type $6 (func (param externref (ref null $1) i32) (result i32))) + ;; LOWER: (type $6 (func (param externref (ref null $0) i32) (result i32))) ;; LOWER: (type $7 (func (param externref) (result i32))) @@ -242,17 +242,17 @@ ;; LOWER: (import "string.const" "0" (global $string.const_foo (ref extern))) - ;; LOWER: (import "wasm:js-string" "fromCharCodeArray" (func $fromCharCodeArray (type $3) (param (ref null $1) i32 i32) (result (ref extern)))) + ;; LOWER: (import "wasm:js-string" "fromCharCodeArray" (func $fromCharCodeArray (type $3) (param (ref null $0) i32 i32) (result (ref extern)))) ;; LOWER: (import "wasm:js-string" "fromCodePoint" (func $fromCodePoint (type $4) (param i32) (result (ref extern)))) ;; LOWER: (import "wasm:js-string" "concat" (func $concat (type $5) (param externref externref) (result (ref extern)))) - ;; LOWER: (import "wasm:js-string" "intoCharCodeArray" (func $intoCharCodeArray (type $6) (param externref (ref null $1) i32) (result i32))) + ;; LOWER: (import "wasm:js-string" "intoCharCodeArray" (func $intoCharCodeArray (type $6) (param externref (ref null $0) i32) (result i32))) - ;; LOWER: (import "wasm:js-string" "equals" (func $equals (type $0) (param externref externref) (result i32))) + ;; LOWER: (import "wasm:js-string" "equals" (func $equals (type $1) (param externref externref) (result i32))) - ;; LOWER: (import "wasm:js-string" "compare" (func $compare (type $0) (param externref externref) (result i32))) + ;; LOWER: (import "wasm:js-string" "compare" (func $compare (type $1) (param externref externref) (result i32))) ;; LOWER: (import "wasm:js-string" "length" (func $length (type $7) (param externref) (result i32))) diff --git a/test/lit/passes/string-lowering_types.wast b/test/lit/passes/string-lowering_types.wast index 54367e85a..cab84a1b8 100644 --- a/test/lit/passes/string-lowering_types.wast +++ b/test/lit/passes/string-lowering_types.wast @@ -8,9 +8,9 @@ ;; types must remain separate. (module (rec - ;; CHECK: (type $0 (func (param externref externref) (result i32))) + ;; CHECK: (type $0 (array (mut i16))) - ;; CHECK: (type $1 (array (mut i16))) + ;; CHECK: (type $1 (func (param externref externref) (result i32))) ;; CHECK: (type $2 (func (param externref))) @@ -23,13 +23,13 @@ ) (type $public (func (param stringref))) - ;; CHECK: (type $6 (func (param (ref null $1) i32 i32) (result (ref extern)))) + ;; CHECK: (type $6 (func (param (ref null $0) i32 i32) (result (ref extern)))) ;; CHECK: (type $7 (func (param i32) (result (ref extern)))) ;; CHECK: (type $8 (func (param externref externref) (result (ref extern)))) - ;; CHECK: (type $9 (func (param externref (ref null $1) i32) (result i32))) + ;; CHECK: (type $9 (func (param externref (ref null $0) i32) (result i32))) ;; CHECK: (type $10 (func (param externref) (result i32))) @@ -43,17 +43,17 @@ ;; CHECK: (import "a" "b" (func $import-implicit (type $3) (param (ref extern)))) (import "a" "b" (func $import-implicit (param (ref string)))) - ;; CHECK: (import "wasm:js-string" "fromCharCodeArray" (func $fromCharCodeArray (type $6) (param (ref null $1) i32 i32) (result (ref extern)))) + ;; CHECK: (import "wasm:js-string" "fromCharCodeArray" (func $fromCharCodeArray (type $6) (param (ref null $0) i32 i32) (result (ref extern)))) ;; CHECK: (import "wasm:js-string" "fromCodePoint" (func $fromCodePoint (type $7) (param i32) (result (ref extern)))) ;; CHECK: (import "wasm:js-string" "concat" (func $concat (type $8) (param externref externref) (result (ref extern)))) - ;; CHECK: (import "wasm:js-string" "intoCharCodeArray" (func $intoCharCodeArray (type $9) (param externref (ref null $1) i32) (result i32))) + ;; CHECK: (import "wasm:js-string" "intoCharCodeArray" (func $intoCharCodeArray (type $9) (param externref (ref null $0) i32) (result i32))) - ;; CHECK: (import "wasm:js-string" "equals" (func $equals (type $0) (param externref externref) (result i32))) + ;; CHECK: (import "wasm:js-string" "equals" (func $equals (type $1) (param externref externref) (result i32))) - ;; CHECK: (import "wasm:js-string" "compare" (func $compare (type $0) (param externref externref) (result i32))) + ;; CHECK: (import "wasm:js-string" "compare" (func $compare (type $1) (param externref externref) (result i32))) ;; CHECK: (import "wasm:js-string" "length" (func $length (type $10) (param externref) (result i32))) diff --git a/test/lit/passes/type-generalizing.wast b/test/lit/passes/type-generalizing.wast index e9c92ff86..00a809648 100644 --- a/test/lit/passes/type-generalizing.wast +++ b/test/lit/passes/type-generalizing.wast @@ -862,12 +862,12 @@ ) (module + ;; CHECK: (type $0 (func (result eqref))) + ;; CHECK: (type $top (sub (func (param i31ref) (result anyref)))) (type $top (sub (func (param i31ref) (result anyref)))) ;; CHECK: (type $mid (sub $top (func (param eqref) (result anyref)))) (type $mid (sub $top (func (param eqref) (result anyref)))) - ;; CHECK: (type $2 (func (result eqref))) - ;; CHECK: (type $bot (sub $mid (func (param eqref) (result eqref)))) (type $bot (sub $mid (func (param eqref) (result eqref)))) @@ -893,7 +893,7 @@ ) ) - ;; CHECK: (func $call-ref-results-limited (type $2) (result eqref) + ;; CHECK: (func $call-ref-results-limited (type $0) (result eqref) ;; CHECK-NEXT: (local $f (ref null $bot)) ;; CHECK-NEXT: (local $arg eqref) ;; CHECK-NEXT: (call_ref $bot @@ -912,7 +912,7 @@ ) ) - ;; CHECK: (func $call-ref-impossible (type $2) (result eqref) + ;; CHECK: (func $call-ref-impossible (type $0) (result eqref) ;; CHECK-NEXT: (local $f nullfuncref) ;; CHECK-NEXT: (local $arg anyref) ;; CHECK-NEXT: (block ;; (replaces unreachable CallRef we can't emit) @@ -963,12 +963,12 @@ (module - ;; CHECK: (type $0 (func (result anyref))) - ;; CHECK: (type $top (sub (struct (field (mut eqref)) (field eqref)))) (type $top (sub (struct (field (mut eqref)) (field eqref)))) ;; CHECK: (type $mid (sub $top (struct (field (mut eqref)) (field eqref) (field (mut eqref))))) (type $mid (sub $top (struct (field (mut eqref)) (field eqref) (field (mut eqref))))) + ;; CHECK: (type $2 (func (result anyref))) + ;; CHECK: (type $3 (func)) ;; CHECK: (type $bot (sub $mid (struct (field (mut eqref)) (field i31ref) (field (mut eqref))))) @@ -979,7 +979,7 @@ ;; CHECK: (type $6 (func (result i31ref))) - ;; CHECK: (func $struct-new (type $0) (result anyref) + ;; CHECK: (func $struct-new (type $2) (result anyref) ;; CHECK-NEXT: (local $var1 eqref) ;; CHECK-NEXT: (local $var2 anyref) ;; CHECK-NEXT: (struct.new $struct @@ -997,7 +997,7 @@ ) ) - ;; CHECK: (func $struct-get (type $0) (result anyref) + ;; CHECK: (func $struct-get (type $2) (result anyref) ;; CHECK-NEXT: (local $var (ref null $top)) ;; CHECK-NEXT: (struct.get $top 1 ;; CHECK-NEXT: (local.get $var) @@ -1027,7 +1027,7 @@ ) ) - ;; CHECK: (func $struct-get-index (type $0) (result anyref) + ;; CHECK: (func $struct-get-index (type $2) (result anyref) ;; CHECK-NEXT: (local $var (ref null $mid)) ;; CHECK-NEXT: (struct.get $mid 2 ;; CHECK-NEXT: (local.get $var) @@ -1042,7 +1042,7 @@ ) ) - ;; CHECK: (func $struct-get-impossible (type $0) (result anyref) + ;; CHECK: (func $struct-get-impossible (type $2) (result anyref) ;; CHECK-NEXT: (local $var nullref) ;; CHECK-NEXT: (block ;; (replaces unreachable StructGet we can't emit) ;; CHECK-NEXT: (drop diff --git a/test/lit/passes/type-refining.wast b/test/lit/passes/type-refining.wast index 002b1c078..ab82aeb36 100644 --- a/test/lit/passes/type-refining.wast +++ b/test/lit/passes/type-refining.wast @@ -545,8 +545,6 @@ ;; CHECK: (type $X (sub (struct))) (type $X (sub (struct))) - ;; CHECK: (type $1 (func)) - ;; CHECK: (type $A (sub (struct (field (ref $X))))) ;; CHECK: (type $Y (sub $X (struct))) @@ -554,10 +552,12 @@ (type $A (sub (struct (field (ref $X))))) + ;; CHECK: (type $3 (func)) + ;; CHECK: (type $B (sub $A (struct (field (ref $Y))))) (type $B (sub $A (struct (field (ref $Y))))) - ;; CHECK: (func $foo (type $1) + ;; CHECK: (func $foo (type $3) ;; CHECK-NEXT: (local $unused2 (ref null $B)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $A diff --git a/test/lit/passes/type-ssa-shared.wast b/test/lit/passes/type-ssa-shared.wast index e3e1db2f2..d4049d1fa 100644 --- a/test/lit/passes/type-ssa-shared.wast +++ b/test/lit/passes/type-ssa-shared.wast @@ -76,10 +76,10 @@ ;; doing so we should apply shareability properly and not error. (Specifically, ;; when we create a new subtype of $A, it must differ from $B.) (module - ;; CHECK: (type $0 (func)) - ;; CHECK: (type $A (sub (shared (array (mut i32))))) (type $A (sub (shared (array (mut i32))))) + ;; CHECK: (type $1 (func)) + ;; CHECK: (type $B (sub $A (shared (array (mut i32))))) (type $B (sub $A (shared (array (mut i32))))) @@ -88,7 +88,7 @@ ;; CHECK: (type $4 (struct (field (mut i32)) (field (mut i32)) (field (mut f64)) (field (mut f64)) (field (mut i32)) (field (mut f64)) (field (mut f64)) (field (mut i32)) (field (mut i32)) (field (mut i32)) (field (mut i32)))) - ;; CHECK: (func $func (type $0) + ;; CHECK: (func $func (type $1) ;; CHECK-NEXT: (local $local (ref $B)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (array.new_default $A_1 diff --git a/test/lit/passes/type-ssa.wast b/test/lit/passes/type-ssa.wast index 4cc5f6494..599c0504e 100644 --- a/test/lit/passes/type-ssa.wast +++ b/test/lit/passes/type-ssa.wast @@ -133,11 +133,11 @@ ;; Some of these are uninteresting and should not get a new type. (module - ;; CHECK: (type $0 (func (param anyref arrayref))) - ;; CHECK: (type $struct (sub (struct (field anyref)))) (type $struct (sub (struct (field (ref null any))))) + ;; CHECK: (type $1 (func (param anyref arrayref))) + ;; CHECK: (rec ;; CHECK-NEXT: (type $struct_1 (sub $struct (struct (field anyref)))) @@ -145,7 +145,7 @@ ;; CHECK: (type $struct_3 (sub $struct (struct (field anyref)))) - ;; CHECK: (func $foo (type $0) (param $any anyref) (param $array arrayref) + ;; CHECK: (func $foo (type $1) (param $any anyref) (param $array arrayref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_default $struct_1) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/vacuum-gc.wast b/test/lit/passes/vacuum-gc.wast index a59b2da1e..dd4934e0a 100644 --- a/test/lit/passes/vacuum-gc.wast +++ b/test/lit/passes/vacuum-gc.wast @@ -38,7 +38,7 @@ ) ) - ;; CHECK: (func $vacuum-nonnull (type $0) + ;; CHECK: (func $vacuum-nonnull (type $1) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $vacuum-nonnull @@ -101,7 +101,7 @@ ) ) - ;; CHECK: (func $dropped-calls (type $0) + ;; CHECK: (func $dropped-calls (type $1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper-i32) diff --git a/test/lit/passes/vacuum-tnh.wast b/test/lit/passes/vacuum-tnh.wast index 8a93a720f..1bb4ba139 100644 --- a/test/lit/passes/vacuum-tnh.wast +++ b/test/lit/passes/vacuum-tnh.wast @@ -294,7 +294,7 @@ ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: ) - ;; NO_TNH: (func $if-unreachable (type $1) (param $p i32) + ;; NO_TNH: (func $if-unreachable (type $2) (param $p i32) ;; NO_TNH-NEXT: (if ;; NO_TNH-NEXT: (local.get $p) ;; NO_TNH-NEXT: (then @@ -433,7 +433,7 @@ ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: ) - ;; NO_TNH: (func $block-unreachable (type $1) (param $p i32) + ;; NO_TNH: (func $block-unreachable (type $2) (param $p i32) ;; NO_TNH-NEXT: (if ;; NO_TNH-NEXT: (local.get $p) ;; NO_TNH-NEXT: (then @@ -499,7 +499,7 @@ ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: ) - ;; NO_TNH: (func $block-unreachable-named (type $1) (param $p i32) + ;; NO_TNH: (func $block-unreachable-named (type $2) (param $p i32) ;; NO_TNH-NEXT: (if ;; NO_TNH-NEXT: (local.get $p) ;; NO_TNH-NEXT: (then @@ -547,7 +547,7 @@ ;; YESTNH: (func $block-unreachable-all (type $1) (param $p i32) ;; YESTNH-NEXT: (nop) ;; YESTNH-NEXT: ) - ;; NO_TNH: (func $block-unreachable-all (type $1) (param $p i32) + ;; NO_TNH: (func $block-unreachable-all (type $2) (param $p i32) ;; NO_TNH-NEXT: (if ;; NO_TNH-NEXT: (local.get $p) ;; NO_TNH-NEXT: (then @@ -688,7 +688,7 @@ ;; YESTNH-NEXT: (unreachable) ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: ) - ;; NO_TNH: (func $loop-unreachable (type $1) (param $p i32) + ;; NO_TNH: (func $loop-unreachable (type $2) (param $p i32) ;; NO_TNH-NEXT: (loop $loop ;; NO_TNH-NEXT: (i32.store ;; NO_TNH-NEXT: (i32.const 0) diff --git a/test/lit/subtypes.wast b/test/lit/subtypes.wast index 628246934..43ba961d8 100644 --- a/test/lit/subtypes.wast +++ b/test/lit/subtypes.wast @@ -28,28 +28,28 @@ (type $sub-func (sub $super-func (func (param (ref $super-array)) (result (ref $sub-array))))) ) - ;; CHECK: (func $make-super-struct (type $4) (result (ref $super-struct)) + ;; CHECK: (func $make-super-struct (type $6) (result (ref $super-struct)) ;; CHECK-NEXT: (call $make-sub-struct) ;; CHECK-NEXT: ) (func $make-super-struct (result (ref $super-struct)) (call $make-sub-struct) ) - ;; CHECK: (func $make-sub-struct (type $5) (result (ref $sub-struct)) + ;; CHECK: (func $make-sub-struct (type $7) (result (ref $sub-struct)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $make-sub-struct (result (ref $sub-struct)) (unreachable) ) - ;; CHECK: (func $make-super-array (type $6) (result (ref $super-array)) + ;; CHECK: (func $make-super-array (type $8) (result (ref $super-array)) ;; CHECK-NEXT: (call $make-sub-array) ;; CHECK-NEXT: ) (func $make-super-array (result (ref $super-array)) (call $make-sub-array) ) - ;; CHECK: (func $make-sub-array (type $7) (result (ref $sub-array)) + ;; CHECK: (func $make-sub-array (type $9) (result (ref $sub-array)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $make-sub-array (result (ref $sub-array)) diff --git a/test/lit/wat-kitchen-sink.wast b/test/lit/wat-kitchen-sink.wast index de16f6923..3936354a1 100644 --- a/test/lit/wat-kitchen-sink.wast +++ b/test/lit/wat-kitchen-sink.wast @@ -9,20 +9,20 @@ ;; CHECK: (type $1 (func (result i32))) + ;; CHECK: (type $pair (struct (field $first (mut i32)) (field $second (mut i64)))) + ;; CHECK: (type $ret2 (func (result i32 i32))) (type $ret2 (func (result i32 i32))) (rec - ;; CHECK: (type $pair (struct (field $first (mut i32)) (field $second (mut i64)))) - - ;; CHECK: (type $4 (func (result i32 i64))) - ;; CHECK: (type $void (sub (func))) - ;; CHECK: (type $6 (func (param i32 i64))) + ;; CHECK: (type $5 (func (result i32 i64))) ;; CHECK: (type $a2 (array (mut f32))) + ;; CHECK: (type $7 (func (param i32 i64))) + ;; CHECK: (type $a1 (array i64)) ;; CHECK: (type $9 (func (param anyref))) @@ -46,29 +46,29 @@ ;; CHECK: (type $many (sub (func (param i32 i64 f32 f64) (result anyref (ref func))))) - ;; CHECK: (type $17 (func (param i32))) - ;; CHECK: (type $a0 (array i32)) - ;; CHECK: (type $19 (func (param i32 i64) (result i32 i64))) + ;; CHECK: (type $18 (func (param i32))) + + ;; CHECK: (type $packed-i16 (array (mut i16))) - ;; CHECK: (type $20 (func (result exnref))) + ;; CHECK: (type $any-array (array (mut anyref))) - ;; CHECK: (type $21 (func (result i64))) + ;; CHECK: (type $21 (func (param i32 i64) (result i32 i64))) - ;; CHECK: (type $22 (func (result i64 f32))) + ;; CHECK: (type $22 (func (result exnref))) - ;; CHECK: (type $23 (func (param i32 i32 i32))) + ;; CHECK: (type $23 (func (result i64))) - ;; CHECK: (type $24 (func (param v128 i32) (result v128))) + ;; CHECK: (type $24 (func (result i64 f32))) - ;; CHECK: (type $25 (func (param i32) (result i32))) + ;; CHECK: (type $25 (func (param i32 i32 i32))) - ;; CHECK: (type $26 (func (param i32) (result i32 i64))) + ;; CHECK: (type $26 (func (param v128 i32) (result v128))) - ;; CHECK: (type $packed-i16 (array (mut i16))) + ;; CHECK: (type $27 (func (param i32) (result i32))) - ;; CHECK: (type $any-array (array (mut anyref))) + ;; CHECK: (type $28 (func (param i32) (result i32 i64))) ;; CHECK: (type $29 (func (param stringref stringref) (result i32))) @@ -76,165 +76,161 @@ ;; CHECK: (type $31 (func (param i64 v128))) - ;; CHECK: (type $cont-bind-before-func (func (param i32 i64 i32 i64) (result f32))) - - ;; CHECK: (type $cont-bind-before (cont $cont-bind-before-func)) - - ;; CHECK: (type $34 (func (result structref arrayref))) + ;; CHECK: (type $32 (func (result structref arrayref))) - ;; CHECK: (type $35 (func (result arrayref structref))) + ;; CHECK: (type $33 (func (result arrayref structref))) - ;; CHECK: (type $36 (func (result i32 i64 (ref null $simple-cont)))) + ;; CHECK: (type $34 (func (result i32 i64 (ref null $simple-cont)))) - ;; CHECK: (type $37 (func (param i32 i32))) + ;; CHECK: (type $cont-bind-before-func (func (param i32 i64 i32 i64) (result f32))) - ;; CHECK: (type $38 (func (param exnref))) + ;; CHECK: (type $cont-bind-before (cont $cont-bind-before-func)) - ;; CHECK: (type $39 (func (result anyref anyref))) + ;; CHECK: (type $to-f32 (func (result f32))) - ;; CHECK: (type $40 (func (param i32 i32 f64 f64))) + ;; CHECK: (type $s2 (struct (field i32))) + (type $s2 (struct i32)) + ;; CHECK: (type $s3 (struct (field i64))) + (type $s3 (struct (field i64))) + ;; CHECK: (type $s4 (struct (field $x f32))) + (type $s4 (struct (field $x f32))) + ;; CHECK: (type $s5 (struct (field i32) (field i64))) + (type $s5 (struct i32 i64)) + ;; CHECK: (type $s6 (struct (field i64) (field f32))) + (type $s6 (struct (field i64 f32))) + ;; CHECK: (type $s7 (struct (field $x f32) (field $y f64))) + (type $s7 (struct (field $x f32) (field $y f64))) + ;; CHECK: (type $s8 (struct (field i32) (field i64) (field $z f32) (field f64) (field (mut i32)))) + (type $s8 (struct i32 (field) i64 (field $z f32) (field f64 (mut i32)))) - ;; CHECK: (type $41 (func (param i64))) + (type $a0 (array i32)) + (type $a1 (array (field i64))) + (type $a2 (array (mut f32))) + ;; CHECK: (type $a3 (array (mut f64))) + (type $a3 (array (field $x (mut f64)))) - ;; CHECK: (type $42 (func (param v128) (result i32))) + (type $pair (struct (field $first (mut i32)) (field $second (mut i64)))) - ;; CHECK: (type $43 (func (param v128 v128) (result v128))) + (type $packed-i8 (array (mut i8))) - ;; CHECK: (type $44 (func (param v128 v128 v128) (result v128))) + (type $packed-i16 (array (mut i16))) - ;; CHECK: (type $45 (func (param i32 i32 i64 i64))) + (type $any-array (array (mut anyref))) - ;; CHECK: (type $46 (func (param i64) (result i32 i64))) + (rec + (type $void (sub (func))) + ) - ;; CHECK: (type $47 (func (param anyref) (result i32))) + ;; CHECK: (type $subvoid (sub final $void (func))) + (type $subvoid (sub final $void (func))) - ;; CHECK: (type $48 (func (param eqref eqref) (result i32))) + (type $simple (func (param $x i32) (param $y i64) (result f32))) + (type $to-f32 (func (result f32))) - ;; CHECK: (type $49 (func (param i32) (result i31ref))) + (type $many (sub (func (param $x i32) (param i64 f32) (param) (param $y f64) + (result anyref (ref func))))) - ;; CHECK: (type $50 (func (param i31ref))) + ;; CHECK: (type $submany (sub final $many (func (param i32 i64 f32 f64) (result anyref (ref func))))) + (type $submany (sub final $many (func (param i32 i64 f32 f64) (result anyref (ref func))))) - ;; CHECK: (type $51 (func (param i32 i64) (result (ref $pair)))) + (type $simple-cont (cont $simple)) + ;; CHECK: (type $all-types (struct (field externref) (field (ref extern)) (field (ref null (shared extern))) (field (ref (shared extern))) (field funcref) (field (ref func)) (field (ref null (shared func))) (field (ref (shared func))) (field anyref) (field (ref any)) (field (ref null (shared any))) (field (ref (shared any))) (field eqref) (field (ref eq)) (field (ref null (shared eq))) (field (ref (shared eq))) (field i31ref) (field (ref i31)) (field (ref null (shared i31))) (field (ref (shared i31))) (field structref) (field (ref struct)) (field (ref null (shared struct))) (field (ref (shared struct))) (field arrayref) (field (ref array)) (field (ref null (shared array))) (field (ref (shared array))) (field exnref) (field (ref exn)) (field (ref null (shared exn))) (field (ref (shared exn))) (field stringref) (field (ref string)) (field (ref null (shared string))) (field (ref (shared string))) (field contref) (field (ref cont)) (field (ref null (shared cont))) (field (ref (shared cont))) (field nullref) (field (ref none)) (field (ref null (shared none))) (field (ref (shared none))) (field nullexternref) (field (ref noextern)) (field (ref null (shared noextern))) (field (ref (shared noextern))) (field nullfuncref) (field (ref nofunc)) (field (ref null (shared nofunc))) (field (ref (shared nofunc))) (field nullexnref) (field (ref noexn)) (field (ref null (shared noexn))) (field (ref (shared noexn))) (field nullcontref) (field (ref nocont)) (field (ref null (shared nocont))) (field (ref (shared nocont))))) - ;; CHECK: (type $52 (func (result (ref $pair)))) + ;; CHECK: (type $49 (func (param i32 i32))) - ;; CHECK: (type $53 (func (param (ref $pair)) (result i32))) + ;; CHECK: (type $50 (func (param exnref))) - ;; CHECK: (type $54 (func (param (ref $pair)) (result i64))) + ;; CHECK: (type $51 (func (result anyref anyref))) - ;; CHECK: (type $55 (func (param (ref null $pair)) (result i32))) + ;; CHECK: (type $52 (func (param i32 i32 f64 f64))) - ;; CHECK: (type $56 (func (param (ref $pair) i32))) + ;; CHECK: (type $53 (func (param i64))) - ;; CHECK: (type $57 (func (param (ref $pair) i64))) + ;; CHECK: (type $54 (func (param v128) (result i32))) - ;; CHECK: (type $58 (func (param (ref null $pair) i64))) + ;; CHECK: (type $55 (func (param v128 v128) (result v128))) - ;; CHECK: (type $59 (func (param i64 i32) (result (ref $a1)))) + ;; CHECK: (type $56 (func (param v128 v128 v128) (result v128))) - ;; CHECK: (type $60 (func (param i32) (result (ref $a1)))) + ;; CHECK: (type $57 (func (param i32 i32 i64 i64))) - ;; CHECK: (type $61 (func (param i32 i32) (result (ref $a1)))) + ;; CHECK: (type $58 (func (param i64) (result i32 i64))) - ;; CHECK: (type $62 (func (param (ref $a1) i32) (result i64))) + ;; CHECK: (type $59 (func (param anyref) (result i32))) - ;; CHECK: (type $63 (func (param (ref $packed-i8) i32) (result i32))) + ;; CHECK: (type $60 (func (param eqref eqref) (result i32))) - ;; CHECK: (type $64 (func (param (ref $packed-i16) i32) (result i32))) + ;; CHECK: (type $61 (func (param i32) (result i31ref))) - ;; CHECK: (type $65 (func (param (ref $a2) i32 f32))) + ;; CHECK: (type $62 (func (param i31ref))) - ;; CHECK: (type $66 (func (param arrayref) (result i32))) + ;; CHECK: (type $63 (func (param i32 i64) (result (ref $pair)))) - ;; CHECK: (type $67 (func (param (ref $a2) i32 (ref $a2) i32 i32))) + ;; CHECK: (type $64 (func (result (ref $pair)))) - ;; CHECK: (type $68 (func (param (ref $a2) i32 f32 i32))) + ;; CHECK: (type $65 (func (param (ref $pair)) (result i32))) - ;; CHECK: (type $69 (func (param (ref $a2) i32 i32 i32))) + ;; CHECK: (type $66 (func (param (ref $pair)) (result i64))) - ;; CHECK: (type $70 (func (param (ref $any-array) i32 i32 i32))) + ;; CHECK: (type $67 (func (param (ref null $pair)) (result i32))) - ;; CHECK: (type $71 (func (param externref))) + ;; CHECK: (type $68 (func (param (ref $pair) i32))) - ;; CHECK: (type $72 (func (param (ref $packed-i8) i32 i32) (result stringref))) + ;; CHECK: (type $69 (func (param (ref $pair) i64))) - ;; CHECK: (type $73 (func (param i32) (result stringref))) + ;; CHECK: (type $70 (func (param (ref null $pair) i64))) - ;; CHECK: (type $74 (func (result (ref string)))) + ;; CHECK: (type $71 (func (param i64 i32) (result (ref $a1)))) - ;; CHECK: (type $75 (func (param stringref))) + ;; CHECK: (type $72 (func (param i32) (result (ref $a1)))) - ;; CHECK: (type $76 (func (param stringref (ref $packed-i8) i32) (result i32))) + ;; CHECK: (type $73 (func (param i32 i32) (result (ref $a1)))) - ;; CHECK: (type $77 (func (param stringref stringref) (result (ref string)))) + ;; CHECK: (type $74 (func (param (ref $a1) i32) (result i64))) - ;; CHECK: (type $78 (func (param stringref i32) (result i32))) + ;; CHECK: (type $75 (func (param (ref $packed-i8) i32) (result i32))) - ;; CHECK: (type $79 (func (param stringref i32 i32) (result (ref string)))) + ;; CHECK: (type $76 (func (param (ref $packed-i16) i32) (result i32))) - ;; CHECK: (type $80 (func (param (ref $simple-cont)))) + ;; CHECK: (type $77 (func (param (ref $a2) i32 f32))) - ;; CHECK: (type $to-f32 (func (result f32))) + ;; CHECK: (type $78 (func (param arrayref) (result i32))) - ;; CHECK: (type $to-f32-cont (cont $to-f32)) + ;; CHECK: (type $79 (func (param (ref $a2) i32 (ref $a2) i32 i32))) - ;; CHECK: (type $83 (func (param (ref $simple)) (result (ref $simple-cont)))) + ;; CHECK: (type $80 (func (param (ref $a2) i32 f32 i32))) - ;; CHECK: (type $84 (func (param (ref $cont-bind-before)) (result (ref $simple-cont)))) + ;; CHECK: (type $81 (func (param (ref $a2) i32 i32 i32))) - ;; CHECK: (type $s2 (struct (field i32))) - (type $s2 (struct i32)) - ;; CHECK: (type $s3 (struct (field i64))) - (type $s3 (struct (field i64))) - ;; CHECK: (type $s4 (struct (field $x f32))) - (type $s4 (struct (field $x f32))) - ;; CHECK: (type $s5 (struct (field i32) (field i64))) - (type $s5 (struct i32 i64)) - ;; CHECK: (type $s6 (struct (field i64) (field f32))) - (type $s6 (struct (field i64 f32))) - ;; CHECK: (type $s7 (struct (field $x f32) (field $y f64))) - (type $s7 (struct (field $x f32) (field $y f64))) - ;; CHECK: (type $s8 (struct (field i32) (field i64) (field $z f32) (field f64) (field (mut i32)))) - (type $s8 (struct i32 (field) i64 (field $z f32) (field f64 (mut i32)))) + ;; CHECK: (type $82 (func (param (ref $any-array) i32 i32 i32))) - (type $a0 (array i32)) - (type $a1 (array (field i64))) - (type $a2 (array (mut f32))) - ;; CHECK: (type $a3 (array (mut f64))) - (type $a3 (array (field $x (mut f64)))) + ;; CHECK: (type $83 (func (param externref))) - (type $pair (struct (field $first (mut i32)) (field $second (mut i64)))) + ;; CHECK: (type $84 (func (param (ref $packed-i8) i32 i32) (result stringref))) - (type $packed-i8 (array (mut i8))) + ;; CHECK: (type $85 (func (param i32) (result stringref))) - (type $packed-i16 (array (mut i16))) + ;; CHECK: (type $86 (func (result (ref string)))) - (type $any-array (array (mut anyref))) + ;; CHECK: (type $87 (func (param stringref))) - (rec - (type $void (sub (func))) - ) + ;; CHECK: (type $88 (func (param stringref (ref $packed-i8) i32) (result i32))) - ;; CHECK: (type $subvoid (sub final $void (func))) - (type $subvoid (sub final $void (func))) + ;; CHECK: (type $89 (func (param stringref stringref) (result (ref string)))) - (type $simple (func (param $x i32) (param $y i64) (result f32))) - (type $to-f32 (func (result f32))) + ;; CHECK: (type $90 (func (param stringref i32) (result i32))) - (type $many (sub (func (param $x i32) (param i64 f32) (param) (param $y f64) - (result anyref (ref func))))) + ;; CHECK: (type $91 (func (param stringref i32 i32) (result (ref string)))) - ;; CHECK: (type $submany (sub final $many (func (param i32 i64 f32 f64) (result anyref (ref func))))) - (type $submany (sub final $many (func (param i32 i64 f32 f64) (result anyref (ref func))))) + ;; CHECK: (type $92 (func (param (ref $simple-cont)))) - (type $simple-cont (cont $simple)) + ;; CHECK: (type $to-f32-cont (cont $to-f32)) (type $to-f32-cont (cont $to-f32)) (type $cont-bind-before-func (func (param i32) (param i64) (param i32) (param i64) (result f32))) (type $cont-bind-before (cont $cont-bind-before-func)) - ;; CHECK: (type $all-types (struct (field externref) (field (ref extern)) (field (ref null (shared extern))) (field (ref (shared extern))) (field funcref) (field (ref func)) (field (ref null (shared func))) (field (ref (shared func))) (field anyref) (field (ref any)) (field (ref null (shared any))) (field (ref (shared any))) (field eqref) (field (ref eq)) (field (ref null (shared eq))) (field (ref (shared eq))) (field i31ref) (field (ref i31)) (field (ref null (shared i31))) (field (ref (shared i31))) (field structref) (field (ref struct)) (field (ref null (shared struct))) (field (ref (shared struct))) (field arrayref) (field (ref array)) (field (ref null (shared array))) (field (ref (shared array))) (field exnref) (field (ref exn)) (field (ref null (shared exn))) (field (ref (shared exn))) (field stringref) (field (ref string)) (field (ref null (shared string))) (field (ref (shared string))) (field contref) (field (ref cont)) (field (ref null (shared cont))) (field (ref (shared cont))) (field nullref) (field (ref none)) (field (ref null (shared none))) (field (ref (shared none))) (field nullexternref) (field (ref noextern)) (field (ref null (shared noextern))) (field (ref (shared noextern))) (field nullfuncref) (field (ref nofunc)) (field (ref null (shared nofunc))) (field (ref (shared nofunc))) (field nullexnref) (field (ref noexn)) (field (ref null (shared noexn))) (field (ref (shared noexn))) (field nullcontref) (field (ref nocont)) (field (ref null (shared nocont))) (field (ref (shared nocont))))) (type $all-types (struct externref (ref extern) (ref null (shared extern)) (ref (shared extern)) funcref (ref func) (ref null (shared func)) (ref (shared func)) anyref (ref any) (ref null (shared any)) (ref (shared any)) @@ -253,6 +249,10 @@ ;; imported memories (memory (export "mem") (export "mem2") (import "" "mem") 0) + ;; CHECK: (type $94 (func (param (ref $simple)) (result (ref $simple-cont)))) + + ;; CHECK: (type $95 (func (param (ref $cont-bind-before)) (result (ref $simple-cont)))) + ;; CHECK: (type $96 (func (param (ref $s0) (ref $s1) (ref $s2) (ref $s3) (ref $s4) (ref $s5) (ref $s6) (ref $s7) (ref $s8) (ref $a0) (ref $a1) (ref $a2) (ref $a3) (ref $subvoid) (ref $submany) (ref $all-types)))) ;; CHECK: (import "" "mem" (memory $mimport$0 0)) @@ -298,7 +298,7 @@ ;; CHECK: (import "mod" "f5" (func $fimport$0 (type $0))) - ;; CHECK: (import "mod" "imported-f" (func $fimport$1 (type $4) (result i32 i64))) + ;; CHECK: (import "mod" "imported-f" (func $fimport$1 (type $5) (result i32 i64))) ;; CHECK: (import "mod" "t0" (tag $imported (param i32 i64))) @@ -478,11 +478,11 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) - ;; CHECK: (func $f1 (type $17) (param $0 i32) + ;; CHECK: (func $f1 (type $18) (param $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $f1 (param i32)) - ;; CHECK: (func $f2 (type $17) (param $x i32) + ;; CHECK: (func $f2 (type $18) (param $x i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $f2 (param $x i32)) @@ -925,7 +925,7 @@ drop ) - ;; CHECK: (func $locals (type $37) (param $0 i32) (param $x i32) + ;; CHECK: (func $locals (type $49) (param $0 i32) (param $x i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (drop @@ -1852,8 +1852,8 @@ end ) - ;; CHECK: (func $try-catch-params (type $4) (result i32 i64) - ;; CHECK-NEXT: (try (type $4) (result i32 i64) + ;; CHECK: (func $try-catch-params (type $5) (result i32 i64) + ;; CHECK-NEXT: (try (type $5) (result i32 i64) ;; CHECK-NEXT: (do ;; CHECK-NEXT: (tuple.make 2 ;; CHECK-NEXT: (i32.const 0) @@ -1873,8 +1873,8 @@ end ) - ;; CHECK: (func $try-catch-pop (type $4) (result i32 i64) - ;; CHECK-NEXT: (try (type $4) (result i32 i64) + ;; CHECK: (func $try-catch-pop (type $5) (result i32 i64) + ;; CHECK-NEXT: (try (type $5) (result i32 i64) ;; CHECK-NEXT: (do ;; CHECK-NEXT: (tuple.make 2 ;; CHECK-NEXT: (i32.const 0) @@ -2442,7 +2442,7 @@ end ) - ;; CHECK: (func $try-table-catch-ref (type $20) (result exnref) + ;; CHECK: (func $try-table-catch-ref (type $22) (result exnref) ;; CHECK-NEXT: (block $label (result exnref) ;; CHECK-NEXT: (try_table (result exnref) (catch_ref $empty $label) ;; CHECK-NEXT: (unreachable) @@ -2468,7 +2468,7 @@ end ) - ;; CHECK: (func $try-table-catch-all-ref (type $20) (result exnref) + ;; CHECK: (func $try-table-catch-all-ref (type $22) (result exnref) ;; CHECK-NEXT: (block $label (result exnref) ;; CHECK-NEXT: (try_table (result exnref) (catch_all_ref $label) ;; CHECK-NEXT: (unreachable) @@ -2542,7 +2542,7 @@ ) ) - ;; CHECK: (func $try-table-throw-ref (type $38) (param $0 exnref) + ;; CHECK: (func $try-table-throw-ref (type $50) (param $0 exnref) ;; CHECK-NEXT: (throw_ref ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -2692,8 +2692,8 @@ br 0 ) - ;; CHECK: (func $br-multivalue (type $4) (result i32 i64) - ;; CHECK-NEXT: (block $label (type $4) (result i32 i64) + ;; CHECK: (func $br-multivalue (type $5) (result i32 i64) + ;; CHECK-NEXT: (block $label (type $5) (result i32 i64) ;; CHECK-NEXT: (br $label ;; CHECK-NEXT: (tuple.make 2 ;; CHECK-NEXT: (i32.const 0) @@ -2708,8 +2708,8 @@ br 0 ) - ;; CHECK: (func $br-multivalue-drop (type $4) (result i32 i64) - ;; CHECK-NEXT: (block $label (type $4) (result i32 i64) + ;; CHECK: (func $br-multivalue-drop (type $5) (result i32 i64) + ;; CHECK-NEXT: (block $label (type $5) (result i32 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) @@ -2804,7 +2804,7 @@ br_if 0 ) - ;; CHECK: (func $br_if-value (type $21) (result i64) + ;; CHECK: (func $br_if-value (type $23) (result i64) ;; CHECK-NEXT: (block $l (result i64) ;; CHECK-NEXT: (br_if $l ;; CHECK-NEXT: (i64.const 0) @@ -2820,8 +2820,8 @@ end ) - ;; CHECK: (func $br_if-multivalue (type $22) (result i64 f32) - ;; CHECK-NEXT: (block $l (type $22) (result i64 f32) + ;; CHECK: (func $br_if-multivalue (type $24) (result i64 f32) + ;; CHECK-NEXT: (block $l (type $24) (result i64 f32) ;; CHECK-NEXT: (br_if $l ;; CHECK-NEXT: (tuple.make 2 ;; CHECK-NEXT: (i64.const 0) @@ -2840,7 +2840,7 @@ end ) - ;; CHECK: (func $br_if-loop (type $21) (result i64) + ;; CHECK: (func $br_if-loop (type $23) (result i64) ;; CHECK-NEXT: (local $scratch i64) ;; CHECK-NEXT: (loop $l (result i64) ;; CHECK-NEXT: (local.set $scratch @@ -2944,9 +2944,9 @@ end ) - ;; CHECK: (func $br-table-multivalue (type $4) (result i32 i64) - ;; CHECK-NEXT: (block $a (type $4) (result i32 i64) - ;; CHECK-NEXT: (block $b (type $4) (result i32 i64) + ;; CHECK: (func $br-table-multivalue (type $5) (result i32 i64) + ;; CHECK-NEXT: (block $a (type $5) (result i32 i64) + ;; CHECK-NEXT: (block $b (type $5) (result i32 i64) ;; CHECK-NEXT: (br_table $a $b ;; CHECK-NEXT: (tuple.make 2 ;; CHECK-NEXT: (i32.const 42) @@ -2968,10 +2968,10 @@ end ) - ;; CHECK: (func $br-table-multivalue-glb (type $39) (result anyref anyref) - ;; CHECK-NEXT: (block $a (type $35) (result arrayref structref) + ;; CHECK: (func $br-table-multivalue-glb (type $51) (result anyref anyref) + ;; CHECK-NEXT: (block $a (type $33) (result arrayref structref) ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (block $b (type $34) (result structref arrayref) + ;; CHECK-NEXT: (block $b (type $32) (result structref arrayref) ;; CHECK-NEXT: (br_table $a $b ;; CHECK-NEXT: (tuple.make 2 ;; CHECK-NEXT: (ref.null none) @@ -3018,7 +3018,7 @@ end ) - ;; CHECK: (func $binary (type $40) (param $0 i32) (param $1 i32) (param $2 f64) (param $3 f64) + ;; CHECK: (func $binary (type $52) (param $0 i32) (param $1 i32) (param $2 f64) (param $3 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) @@ -3043,7 +3043,7 @@ drop ) - ;; CHECK: (func $unary (type $41) (param $0 i64) + ;; CHECK: (func $unary (type $53) (param $0 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (local.get $0) @@ -3056,7 +3056,7 @@ drop ) - ;; CHECK: (func $select (type $23) (param $0 i32) (param $1 i32) (param $2 i32) + ;; CHECK: (func $select (type $25) (param $0 i32) (param $1 i32) (param $2 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $0) @@ -3129,7 +3129,7 @@ drop ) - ;; CHECK: (func $memory-grow (type $6) (param $0 i32) (param $1 i64) + ;; CHECK: (func $memory-grow (type $7) (param $0 i32) (param $1 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (memory.grow $mimport$0 ;; CHECK-NEXT: (local.get $0) @@ -3187,7 +3187,7 @@ global.set $pair ) - ;; CHECK: (func $load (type $6) (param $0 i32) (param $1 i64) + ;; CHECK: (func $load (type $7) (param $0 i32) (param $1 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load $mimport$0 offset=42 ;; CHECK-NEXT: (local.get $0) @@ -3216,7 +3216,7 @@ drop ) - ;; CHECK: (func $store (type $6) (param $0 i32) (param $1 i64) + ;; CHECK: (func $store (type $7) (param $0 i32) (param $1 i64) ;; CHECK-NEXT: (i32.store $mimport$0 offset=42 align=1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) @@ -3242,7 +3242,7 @@ f32.store $mem-i64 ) - ;; CHECK: (func $atomic-rmw (type $6) (param $0 i32) (param $1 i64) + ;; CHECK: (func $atomic-rmw (type $7) (param $0 i32) (param $1 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.atomic.rmw16.add_u $mimport$0 ;; CHECK-NEXT: (local.get $0) @@ -3267,7 +3267,7 @@ drop ) - ;; CHECK: (func $atomic-cmpxchg (type $6) (param $0 i32) (param $1 i64) + ;; CHECK: (func $atomic-cmpxchg (type $7) (param $0 i32) (param $1 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.atomic.rmw8.cmpxchg_u $mem ;; CHECK-NEXT: (local.get $0) @@ -3296,7 +3296,7 @@ drop ) - ;; CHECK: (func $atomic-wait (type $6) (param $0 i32) (param $1 i64) + ;; CHECK: (func $atomic-wait (type $7) (param $0 i32) (param $1 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (memory.atomic.wait32 $mimport$0 ;; CHECK-NEXT: (local.get $0) @@ -3325,7 +3325,7 @@ drop ) - ;; CHECK: (func $atomic-notify (type $6) (param $0 i32) (param $1 i64) + ;; CHECK: (func $atomic-notify (type $7) (param $0 i32) (param $1 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (memory.atomic.notify $mimport$0 offset=8 ;; CHECK-NEXT: (local.get $0) @@ -3392,7 +3392,7 @@ drop ) - ;; CHECK: (func $simd-extract (type $42) (param $0 v128) (result i32) + ;; CHECK: (func $simd-extract (type $54) (param $0 v128) (result i32) ;; CHECK-NEXT: (i32x4.extract_lane 3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -3402,7 +3402,7 @@ i32x4.extract_lane 3 ) - ;; CHECK: (func $simd-replace (type $24) (param $0 v128) (param $1 i32) (result v128) + ;; CHECK: (func $simd-replace (type $26) (param $0 v128) (param $1 i32) (result v128) ;; CHECK-NEXT: (i32x4.replace_lane 2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -3414,7 +3414,7 @@ i32x4.replace_lane 2 ) - ;; CHECK: (func $simd-shuffle (type $43) (param $0 v128) (param $1 v128) (result v128) + ;; CHECK: (func $simd-shuffle (type $55) (param $0 v128) (param $1 v128) (result v128) ;; CHECK-NEXT: (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -3426,7 +3426,7 @@ i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 ) - ;; CHECK: (func $simd-ternary (type $44) (param $0 v128) (param $1 v128) (param $2 v128) (result v128) + ;; CHECK: (func $simd-ternary (type $56) (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-NEXT: (v128.bitselect ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -3440,7 +3440,7 @@ v128.bitselect ) - ;; CHECK: (func $simd-shift (type $24) (param $0 v128) (param $1 i32) (result v128) + ;; CHECK: (func $simd-shift (type $26) (param $0 v128) (param $1 i32) (result v128) ;; CHECK-NEXT: (i8x16.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -3452,7 +3452,7 @@ i8x16.shl ) - ;; CHECK: (func $simd-load (type $6) (param $0 i32) (param $1 i64) + ;; CHECK: (func $simd-load (type $7) (param $0 i32) (param $1 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (v128.load8x8_s $mimport$0 offset=8 ;; CHECK-NEXT: (local.get $0) @@ -3495,7 +3495,7 @@ v128.store64_lane 5 align=4 0 ) - ;; CHECK: (func $memory-init (type $23) (param $0 i32) (param $1 i32) (param $2 i32) + ;; CHECK: (func $memory-init (type $25) (param $0 i32) (param $1 i32) (param $2 i32) ;; CHECK-NEXT: (memory.init $mem-i32 $passive ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -3536,7 +3536,7 @@ data.drop $passive ) - ;; CHECK: (func $memory-copy (type $45) (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) + ;; CHECK: (func $memory-copy (type $57) (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) ;; CHECK-NEXT: (memory.copy $mimport$0 $mimport$0 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -3568,7 +3568,7 @@ memory.copy $mem-i64 5 ) - ;; CHECK: (func $memory-fill (type $6) (param $0 i32) (param $1 i64) + ;; CHECK: (func $memory-fill (type $7) (param $0 i32) (param $1 i64) ;; CHECK-NEXT: (memory.fill $mimport$0 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) @@ -3607,7 +3607,7 @@ return ) - ;; CHECK: (func $return-one (type $25) (param $0 i32) (result i32) + ;; CHECK: (func $return-one (type $27) (param $0 i32) (result i32) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -3617,7 +3617,7 @@ return ) - ;; CHECK: (func $return-two (type $19) (param $0 i32) (param $1 i64) (result i32 i64) + ;; CHECK: (func $return-two (type $21) (param $0 i32) (param $1 i64) (result i32 i64) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (tuple.make 2 ;; CHECK-NEXT: (local.get $0) @@ -3631,7 +3631,7 @@ return ) - ;; CHECK: (func $return-two-first-unreachable (type $46) (param $0 i64) (result i32 i64) + ;; CHECK: (func $return-two-first-unreachable (type $58) (param $0 i64) (result i32 i64) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (tuple.make 2 ;; CHECK-NEXT: (unreachable) @@ -3645,7 +3645,7 @@ return ) - ;; CHECK: (func $return-two-second-unreachable (type $26) (param $0 i32) (result i32 i64) + ;; CHECK: (func $return-two-second-unreachable (type $28) (param $0 i32) (result i32 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -3659,7 +3659,7 @@ return ) - ;; CHECK: (func $return-two-second-unreachable-tuple (type $26) (param $0 i32) (result i32 i64) + ;; CHECK: (func $return-two-second-unreachable-tuple (type $28) (param $0 i32) (result i32 i64) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (tuple.make 2 ;; CHECK-NEXT: (local.get $0) @@ -3674,7 +3674,7 @@ return ) - ;; CHECK: (func $return-multivalue (type $4) (result i32 i64) + ;; CHECK: (func $return-multivalue (type $5) (result i32 i64) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (call $return-multivalue) ;; CHECK-NEXT: ) @@ -3684,7 +3684,7 @@ return ) - ;; CHECK: (func $ref-is-null (type $47) (param $0 anyref) (result i32) + ;; CHECK: (func $ref-is-null (type $59) (param $0 anyref) (result i32) ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -3728,7 +3728,7 @@ throw $tag-pair ) - ;; CHECK: (func $ref-eq (type $48) (param $0 eqref) (param $1 eqref) (result i32) + ;; CHECK: (func $ref-eq (type $60) (param $0 eqref) (param $1 eqref) (result i32) ;; CHECK-NEXT: (ref.eq ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -3905,7 +3905,7 @@ table.copy 2 $funcs ) - ;; CHECK: (func $i31-new (type $49) (param $0 i32) (result i31ref) + ;; CHECK: (func $i31-new (type $61) (param $0 i32) (result i31ref) ;; CHECK-NEXT: (ref.i31 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -3915,7 +3915,7 @@ ref.i31 ) - ;; CHECK: (func $i31-get (type $50) (param $0 i31ref) + ;; CHECK: (func $i31-get (type $62) (param $0 i31ref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i31.get_s ;; CHECK-NEXT: (local.get $0) @@ -4134,7 +4134,7 @@ drop ) - ;; CHECK: (func $struct-new (type $51) (param $0 i32) (param $1 i64) (result (ref $pair)) + ;; CHECK: (func $struct-new (type $63) (param $0 i32) (param $1 i64) (result (ref $pair)) ;; CHECK-NEXT: (struct.new $pair ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4146,14 +4146,14 @@ struct.new $pair ) - ;; CHECK: (func $struct-new-default (type $52) (result (ref $pair)) + ;; CHECK: (func $struct-new-default (type $64) (result (ref $pair)) ;; CHECK-NEXT: (struct.new_default $pair) ;; CHECK-NEXT: ) (func $struct-new-default (result (ref $pair)) struct.new_default 14 ) - ;; CHECK: (func $struct-get-0 (type $53) (param $0 (ref $pair)) (result i32) + ;; CHECK: (func $struct-get-0 (type $65) (param $0 (ref $pair)) (result i32) ;; CHECK-NEXT: (struct.get $pair $first ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -4163,7 +4163,7 @@ struct.get 14 0 ) - ;; CHECK: (func $struct-get-1 (type $54) (param $0 (ref $pair)) (result i64) + ;; CHECK: (func $struct-get-1 (type $66) (param $0 (ref $pair)) (result i64) ;; CHECK-NEXT: (struct.get $pair $second ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -4173,7 +4173,7 @@ struct.get $pair 1 ) - ;; CHECK: (func $struct-get-named (type $55) (param $0 (ref null $pair)) (result i32) + ;; CHECK: (func $struct-get-named (type $67) (param $0 (ref null $pair)) (result i32) ;; CHECK-NEXT: (struct.get $pair $first ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -4183,7 +4183,7 @@ struct.get $pair $first ) - ;; CHECK: (func $struct-set-0 (type $56) (param $0 (ref $pair)) (param $1 i32) + ;; CHECK: (func $struct-set-0 (type $68) (param $0 (ref $pair)) (param $1 i32) ;; CHECK-NEXT: (struct.set $pair $first ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4195,7 +4195,7 @@ struct.set $pair 0 ) - ;; CHECK: (func $struct-set-1 (type $57) (param $0 (ref $pair)) (param $1 i64) + ;; CHECK: (func $struct-set-1 (type $69) (param $0 (ref $pair)) (param $1 i64) ;; CHECK-NEXT: (struct.set $pair $second ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4207,7 +4207,7 @@ struct.set 14 1 ) - ;; CHECK: (func $struct-set-named (type $58) (param $0 (ref null $pair)) (param $1 i64) + ;; CHECK: (func $struct-set-named (type $70) (param $0 (ref null $pair)) (param $1 i64) ;; CHECK-NEXT: (struct.set $pair $second ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4219,7 +4219,7 @@ struct.set 14 $second ) - ;; CHECK: (func $array-new (type $59) (param $0 i64) (param $1 i32) (result (ref $a1)) + ;; CHECK: (func $array-new (type $71) (param $0 i64) (param $1 i32) (result (ref $a1)) ;; CHECK-NEXT: (array.new $a1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4231,7 +4231,7 @@ array.new $a1 ) - ;; CHECK: (func $array-new-default (type $60) (param $0 i32) (result (ref $a1)) + ;; CHECK: (func $array-new-default (type $72) (param $0 i32) (result (ref $a1)) ;; CHECK-NEXT: (array.new_default $a1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -4241,7 +4241,7 @@ array.new_default 11 ) - ;; CHECK: (func $array-new-data (type $61) (param $0 i32) (param $1 i32) (result (ref $a1)) + ;; CHECK: (func $array-new-data (type $73) (param $0 i32) (param $1 i32) (result (ref $a1)) ;; CHECK-NEXT: (array.new_data $a1 $implicit-data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4275,7 +4275,7 @@ drop ) - ;; CHECK: (func $array-get (type $62) (param $0 (ref $a1)) (param $1 i32) (result i64) + ;; CHECK: (func $array-get (type $74) (param $0 (ref $a1)) (param $1 i32) (result i64) ;; CHECK-NEXT: (array.get $a1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4287,7 +4287,7 @@ array.get $a1 ) - ;; CHECK: (func $array-get-s (type $63) (param $0 (ref $packed-i8)) (param $1 i32) (result i32) + ;; CHECK: (func $array-get-s (type $75) (param $0 (ref $packed-i8)) (param $1 i32) (result i32) ;; CHECK-NEXT: (array.get_s $packed-i8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4299,7 +4299,7 @@ array.get_s 15 ) - ;; CHECK: (func $array-get-u (type $64) (param $0 (ref $packed-i16)) (param $1 i32) (result i32) + ;; CHECK: (func $array-get-u (type $76) (param $0 (ref $packed-i16)) (param $1 i32) (result i32) ;; CHECK-NEXT: (array.get_u $packed-i16 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4311,7 +4311,7 @@ array.get_u $packed-i16 ) - ;; CHECK: (func $array-set (type $65) (param $0 (ref $a2)) (param $1 i32) (param $2 f32) + ;; CHECK: (func $array-set (type $77) (param $0 (ref $a2)) (param $1 i32) (param $2 f32) ;; CHECK-NEXT: (array.set $a2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4325,7 +4325,7 @@ array.set $a2 ) - ;; CHECK: (func $array-len (type $66) (param $0 arrayref) (result i32) + ;; CHECK: (func $array-len (type $78) (param $0 arrayref) (result i32) ;; CHECK-NEXT: (array.len ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -4335,7 +4335,7 @@ array.len ) - ;; CHECK: (func $array-copy (type $67) (param $0 (ref $a2)) (param $1 i32) (param $2 (ref $a2)) (param $3 i32) (param $4 i32) + ;; CHECK: (func $array-copy (type $79) (param $0 (ref $a2)) (param $1 i32) (param $2 (ref $a2)) (param $3 i32) (param $4 i32) ;; CHECK-NEXT: (array.copy $a2 $a2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4353,7 +4353,7 @@ array.copy $a2 $a2 ) - ;; CHECK: (func $array-fill (type $68) (param $0 (ref $a2)) (param $1 i32) (param $2 f32) (param $3 i32) + ;; CHECK: (func $array-fill (type $80) (param $0 (ref $a2)) (param $1 i32) (param $2 f32) (param $3 i32) ;; CHECK-NEXT: (array.fill $a2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4369,7 +4369,7 @@ array.fill $a2 ) - ;; CHECK: (func $array-init-data (type $69) (param $0 (ref $a2)) (param $1 i32) (param $2 i32) (param $3 i32) + ;; CHECK: (func $array-init-data (type $81) (param $0 (ref $a2)) (param $1 i32) (param $2 i32) (param $3 i32) ;; CHECK-NEXT: (array.init_data $a2 $implicit-data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4385,7 +4385,7 @@ array.init_data $a2 0 ) - ;; CHECK: (func $array-init-elem (type $70) (param $0 (ref $any-array)) (param $1 i32) (param $2 i32) (param $3 i32) + ;; CHECK: (func $array-init-elem (type $82) (param $0 (ref $any-array)) (param $1 i32) (param $2 i32) (param $3 i32) ;; CHECK-NEXT: (array.init_elem $any-array $passive-2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4414,7 +4414,7 @@ drop ) - ;; CHECK: (func $any-convert-extern (type $71) (param $0 externref) + ;; CHECK: (func $any-convert-extern (type $83) (param $0 externref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (any.convert_extern ;; CHECK-NEXT: (local.get $0) @@ -4440,7 +4440,7 @@ drop ) - ;; CHECK: (func $string-new-gc (type $72) (param $0 (ref $packed-i8)) (param $1 i32) (param $2 i32) (result stringref) + ;; CHECK: (func $string-new-gc (type $84) (param $0 (ref $packed-i8)) (param $1 i32) (param $2 i32) (result stringref) ;; CHECK-NEXT: (string.new_lossy_utf8_array ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4454,7 +4454,7 @@ string.new_lossy_utf8_array ) - ;; CHECK: (func $string-new-code-point (type $73) (param $0 i32) (result stringref) + ;; CHECK: (func $string-new-code-point (type $85) (param $0 i32) (result stringref) ;; CHECK-NEXT: (string.from_code_point ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -4464,7 +4464,7 @@ string.from_code_point ) - ;; CHECK: (func $string-const (type $74) (result (ref string)) + ;; CHECK: (func $string-const (type $86) (result (ref string)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (string.const "foobar") ;; CHECK-NEXT: ) @@ -4476,7 +4476,7 @@ string.const "\00\00\00" ) - ;; CHECK: (func $string-measure (type $75) (param $0 stringref) + ;; CHECK: (func $string-measure (type $87) (param $0 stringref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (string.measure_utf8 ;; CHECK-NEXT: (local.get $0) @@ -4497,7 +4497,7 @@ drop ) - ;; CHECK: (func $string-encode-gc (type $76) (param $0 stringref) (param $1 (ref $packed-i8)) (param $2 i32) (result i32) + ;; CHECK: (func $string-encode-gc (type $88) (param $0 stringref) (param $1 (ref $packed-i8)) (param $2 i32) (result i32) ;; CHECK-NEXT: (string.encode_wtf16_array ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4511,7 +4511,7 @@ string.encode_wtf16_array ) - ;; CHECK: (func $string-concat (type $77) (param $0 stringref) (param $1 stringref) (result (ref string)) + ;; CHECK: (func $string-concat (type $89) (param $0 stringref) (param $1 stringref) (result (ref string)) ;; CHECK-NEXT: (string.concat ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4547,7 +4547,7 @@ string.compare ) - ;; CHECK: (func $string-get (type $78) (param $0 stringref) (param $1 i32) (result i32) + ;; CHECK: (func $string-get (type $90) (param $0 stringref) (param $1 i32) (result i32) ;; CHECK-NEXT: (stringview_wtf16.get_codeunit ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4559,7 +4559,7 @@ stringview_wtf16.get_codeunit ) - ;; CHECK: (func $string-slice (type $79) (param $0 stringref) (param $1 i32) (param $2 i32) (result (ref string)) + ;; CHECK: (func $string-slice (type $91) (param $0 stringref) (param $1 i32) (param $2 i32) (result (ref string)) ;; CHECK-NEXT: (stringview_wtf16.slice ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -4860,13 +4860,13 @@ ) ) - ;; CHECK: (func $resume (type $80) (param $ct (ref $simple-cont)) + ;; CHECK: (func $resume (type $92) (param $ct (ref $simple-cont)) ;; CHECK-NEXT: (local $f f32) ;; CHECK-NEXT: (block $label ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $block (result (ref $to-f32-cont)) ;; CHECK-NEXT: (tuple.drop 3 - ;; CHECK-NEXT: (block $block0 (type $36) (result i32 i64 (ref null $simple-cont)) + ;; CHECK-NEXT: (block $block0 (type $34) (result i32 i64 (ref null $simple-cont)) ;; CHECK-NEXT: (local.set $f ;; CHECK-NEXT: (resume $simple-cont (on $empty $block) (on $tag-pair-to-pair $block0) ;; CHECK-NEXT: (i32.const 0) @@ -4899,7 +4899,7 @@ br 0 ) - ;; CHECK: (func $contnew (type $83) (param $f (ref $simple)) (result (ref $simple-cont)) + ;; CHECK: (func $contnew (type $94) (param $f (ref $simple)) (result (ref $simple-cont)) ;; CHECK-NEXT: (cont.new $simple-cont ;; CHECK-NEXT: (local.get $f) ;; CHECK-NEXT: ) @@ -4909,7 +4909,7 @@ cont.new $simple-cont ) - ;; CHECK: (func $contbind (type $84) (param $c (ref $cont-bind-before)) (result (ref $simple-cont)) + ;; CHECK: (func $contbind (type $95) (param $c (ref $cont-bind-before)) (result (ref $simple-cont)) ;; CHECK-NEXT: (cont.bind $cont-bind-before $simple-cont ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: (i64.const 123) @@ -4923,7 +4923,7 @@ cont.bind $cont-bind-before $simple-cont ) - ;; CHECK: (func $suspend (type $4) (result i32 i64) + ;; CHECK: (func $suspend (type $5) (result i32 i64) ;; CHECK-NEXT: (suspend $tag-pair-to-pair ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: (i64.const 456) @@ -5058,7 +5058,7 @@ ;; The if is unreachable except through the break; make sure this is ;; parse correctly - ;; CHECK: (func $if-else-br-return (type $25) (param $a i32) (result i32) + ;; CHECK: (func $if-else-br-return (type $27) (param $a i32) (result i32) ;; CHECK-NEXT: (block $label ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $a) |