summaryrefslogtreecommitdiff
path: root/test/lit/passes/optimize-instructions-gc-iit.wast
diff options
context:
space:
mode:
Diffstat (limited to 'test/lit/passes/optimize-instructions-gc-iit.wast')
-rw-r--r--test/lit/passes/optimize-instructions-gc-iit.wast198
1 files changed, 36 insertions, 162 deletions
diff --git a/test/lit/passes/optimize-instructions-gc-iit.wast b/test/lit/passes/optimize-instructions-gc-iit.wast
index 4117dce19..3f0c926d3 100644
--- a/test/lit/passes/optimize-instructions-gc-iit.wast
+++ b/test/lit/passes/optimize-instructions-gc-iit.wast
@@ -33,107 +33,65 @@
(func $foo)
- ;; CHECK: (func $ref-cast-iit (param $parent (ref $parent)) (param $child (ref $child)) (param $other (ref $other)) (param $parent-rtt (rtt $parent)) (param $child-rtt (rtt $child)) (param $other-rtt (rtt $other))
+ ;; CHECK: (func $ref-cast-iit (param $parent (ref $parent)) (param $child (ref $child)) (param $other (ref $other))
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (block (result (ref $parent))
- ;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (local.get $parent-rtt)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: (local.get $parent)
- ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $parent)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (block (result (ref $child))
- ;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (local.get $parent-rtt)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: (local.get $child)
- ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $child)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (ref.cast
+ ;; CHECK-NEXT: (ref.cast_static $child
;; CHECK-NEXT: (local.get $parent)
- ;; CHECK-NEXT: (local.get $child-rtt)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (block (result (ref $other))
+ ;; CHECK-NEXT: (block
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (local.get $child)
;; CHECK-NEXT: )
- ;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (local.get $other-rtt)
- ;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
- ;; NOMNL: (func $ref-cast-iit (type $ref|$parent|_ref|$child|_ref|$other|_rtt_$parent_rtt_$child_rtt_$other_=>_none) (param $parent (ref $parent)) (param $child (ref $child)) (param $other (ref $other)) (param $parent-rtt (rtt $parent)) (param $child-rtt (rtt $child)) (param $other-rtt (rtt $other))
+ ;; NOMNL: (func $ref-cast-iit (type $ref|$parent|_ref|$child|_ref|$other|_=>_none) (param $parent (ref $parent)) (param $child (ref $child)) (param $other (ref $other))
;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (block (result (ref $parent))
- ;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (local.get $parent-rtt)
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: (local.get $parent)
- ;; NOMNL-NEXT: )
+ ;; NOMNL-NEXT: (local.get $parent)
;; NOMNL-NEXT: )
;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (block (result (ref $child))
- ;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (local.get $parent-rtt)
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: (local.get $child)
- ;; NOMNL-NEXT: )
+ ;; NOMNL-NEXT: (local.get $child)
;; NOMNL-NEXT: )
;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (ref.cast
+ ;; NOMNL-NEXT: (ref.cast_static $child
;; NOMNL-NEXT: (local.get $parent)
- ;; NOMNL-NEXT: (local.get $child-rtt)
;; NOMNL-NEXT: )
;; NOMNL-NEXT: )
;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (block (result (ref $other))
+ ;; NOMNL-NEXT: (block
;; NOMNL-NEXT: (drop
;; NOMNL-NEXT: (local.get $child)
;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (local.get $other-rtt)
- ;; NOMNL-NEXT: )
;; NOMNL-NEXT: (unreachable)
;; NOMNL-NEXT: )
;; NOMNL-NEXT: )
;; NOMNL-NEXT: )
- ;; NOMNL-TNH: (func $ref-cast-iit (type $ref|$parent|_ref|$child|_ref|$other|_rtt_$parent_rtt_$child_rtt_$other_=>_none) (param $parent (ref $parent)) (param $child (ref $child)) (param $other (ref $other)) (param $parent-rtt (rtt $parent)) (param $child-rtt (rtt $child)) (param $other-rtt (rtt $other))
+ ;; NOMNL-TNH: (func $ref-cast-iit (type $ref|$parent|_ref|$child|_ref|$other|_=>_none) (param $parent (ref $parent)) (param $child (ref $child)) (param $other (ref $other))
;; NOMNL-TNH-NEXT: (drop
- ;; NOMNL-TNH-NEXT: (block (result (ref $parent))
- ;; NOMNL-TNH-NEXT: (drop
- ;; NOMNL-TNH-NEXT: (local.get $parent-rtt)
- ;; NOMNL-TNH-NEXT: )
- ;; NOMNL-TNH-NEXT: (local.get $parent)
- ;; NOMNL-TNH-NEXT: )
+ ;; NOMNL-TNH-NEXT: (local.get $parent)
;; NOMNL-TNH-NEXT: )
;; NOMNL-TNH-NEXT: (drop
- ;; NOMNL-TNH-NEXT: (block (result (ref $child))
- ;; NOMNL-TNH-NEXT: (drop
- ;; NOMNL-TNH-NEXT: (local.get $parent-rtt)
- ;; NOMNL-TNH-NEXT: )
- ;; NOMNL-TNH-NEXT: (local.get $child)
- ;; NOMNL-TNH-NEXT: )
+ ;; NOMNL-TNH-NEXT: (local.get $child)
;; NOMNL-TNH-NEXT: )
;; NOMNL-TNH-NEXT: (drop
- ;; NOMNL-TNH-NEXT: (ref.cast
+ ;; NOMNL-TNH-NEXT: (ref.cast_static $child
;; NOMNL-TNH-NEXT: (local.get $parent)
- ;; NOMNL-TNH-NEXT: (local.get $child-rtt)
;; NOMNL-TNH-NEXT: )
;; NOMNL-TNH-NEXT: )
;; NOMNL-TNH-NEXT: (drop
- ;; NOMNL-TNH-NEXT: (block (result (ref $other))
+ ;; NOMNL-TNH-NEXT: (block
;; NOMNL-TNH-NEXT: (drop
;; NOMNL-TNH-NEXT: (local.get $child)
;; NOMNL-TNH-NEXT: )
- ;; NOMNL-TNH-NEXT: (drop
- ;; NOMNL-TNH-NEXT: (local.get $other-rtt)
- ;; NOMNL-TNH-NEXT: )
;; NOMNL-TNH-NEXT: (unreachable)
;; NOMNL-TNH-NEXT: )
;; NOMNL-TNH-NEXT: )
@@ -143,174 +101,91 @@
(param $child (ref $child))
(param $other (ref $other))
- (param $parent-rtt (rtt $parent))
- (param $child-rtt (rtt $child))
- (param $other-rtt (rtt $other))
-
- ;; a cast of parent to an rtt of parent: assuming no traps as we do, we can
- ;; optimize this as the new type will be valid.
+ ;; a cast of parent to parent. We can optimize this as the new type will be
+ ;; valid.
(drop
- (ref.cast
+ (ref.cast_static $parent
(local.get $parent)
- (local.get $parent-rtt)
)
)
;; a cast of child to a supertype: again, we replace with a valid type.
(drop
- (ref.cast
+ (ref.cast_static $parent
(local.get $child)
- (local.get $parent-rtt)
)
)
;; a cast of parent to a subtype: we cannot replace the original heap type
;; $child with one that is not equal or more specific, like $parent, so we
;; cannot optimize here.
(drop
- (ref.cast
+ (ref.cast_static $child
(local.get $parent)
- (local.get $child-rtt)
)
)
;; a cast of child to an unrelated type: it will trap anyhow
(drop
- (ref.cast
+ (ref.cast_static $other
(local.get $child)
- (local.get $other-rtt)
)
)
)
- ;; CHECK: (func $ref-cast-iit-bad (param $parent (ref $parent)) (param $parent-rtt (rtt $parent))
- ;; CHECK-NEXT: (local $2 (ref null $parent))
+ ;; CHECK: (func $ref-cast-iit-bad (param $parent (ref $parent))
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (block (result (ref $parent))
- ;; CHECK-NEXT: (local.set $2
- ;; CHECK-NEXT: (block $block (result (ref $parent))
- ;; CHECK-NEXT: (call $foo)
- ;; CHECK-NEXT: (local.get $parent)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (block $block0 (result (rtt $parent))
- ;; CHECK-NEXT: (call $foo)
- ;; CHECK-NEXT: (local.get $parent-rtt)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: (ref.as_non_null
- ;; CHECK-NEXT: (local.get $2)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (ref.cast
+ ;; CHECK-NEXT: (block $block (result (ref $parent))
+ ;; CHECK-NEXT: (call $foo)
;; CHECK-NEXT: (local.get $parent)
- ;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (ref.cast
+ ;; CHECK-NEXT: (ref.cast_static $parent
;; CHECK-NEXT: (unreachable)
- ;; CHECK-NEXT: (local.get $parent-rtt)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
- ;; NOMNL: (func $ref-cast-iit-bad (type $ref|$parent|_rtt_$parent_=>_none) (param $parent (ref $parent)) (param $parent-rtt (rtt $parent))
- ;; NOMNL-NEXT: (local $2 (ref null $parent))
+ ;; NOMNL: (func $ref-cast-iit-bad (type $ref|$parent|_=>_none) (param $parent (ref $parent))
;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (block (result (ref $parent))
- ;; NOMNL-NEXT: (local.set $2
- ;; NOMNL-NEXT: (block $block (result (ref $parent))
- ;; NOMNL-NEXT: (call $foo)
- ;; NOMNL-NEXT: (local.get $parent)
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (block $block0 (result (rtt $parent))
- ;; NOMNL-NEXT: (call $foo)
- ;; NOMNL-NEXT: (local.get $parent-rtt)
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: (ref.as_non_null
- ;; NOMNL-NEXT: (local.get $2)
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (ref.cast
+ ;; NOMNL-NEXT: (block $block (result (ref $parent))
+ ;; NOMNL-NEXT: (call $foo)
;; NOMNL-NEXT: (local.get $parent)
- ;; NOMNL-NEXT: (unreachable)
;; NOMNL-NEXT: )
;; NOMNL-NEXT: )
;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (ref.cast
+ ;; NOMNL-NEXT: (ref.cast_static $parent
;; NOMNL-NEXT: (unreachable)
- ;; NOMNL-NEXT: (local.get $parent-rtt)
;; NOMNL-NEXT: )
;; NOMNL-NEXT: )
;; NOMNL-NEXT: )
- ;; NOMNL-TNH: (func $ref-cast-iit-bad (type $ref|$parent|_rtt_$parent_=>_none) (param $parent (ref $parent)) (param $parent-rtt (rtt $parent))
- ;; NOMNL-TNH-NEXT: (local $2 (ref null $parent))
+ ;; NOMNL-TNH: (func $ref-cast-iit-bad (type $ref|$parent|_=>_none) (param $parent (ref $parent))
;; NOMNL-TNH-NEXT: (drop
- ;; NOMNL-TNH-NEXT: (block (result (ref $parent))
- ;; NOMNL-TNH-NEXT: (local.set $2
- ;; NOMNL-TNH-NEXT: (block $block (result (ref $parent))
- ;; NOMNL-TNH-NEXT: (call $foo)
- ;; NOMNL-TNH-NEXT: (local.get $parent)
- ;; NOMNL-TNH-NEXT: )
- ;; NOMNL-TNH-NEXT: )
- ;; NOMNL-TNH-NEXT: (drop
- ;; NOMNL-TNH-NEXT: (block $block0 (result (rtt $parent))
- ;; NOMNL-TNH-NEXT: (call $foo)
- ;; NOMNL-TNH-NEXT: (local.get $parent-rtt)
- ;; NOMNL-TNH-NEXT: )
- ;; NOMNL-TNH-NEXT: )
- ;; NOMNL-TNH-NEXT: (ref.as_non_null
- ;; NOMNL-TNH-NEXT: (local.get $2)
- ;; NOMNL-TNH-NEXT: )
- ;; NOMNL-TNH-NEXT: )
- ;; NOMNL-TNH-NEXT: )
- ;; NOMNL-TNH-NEXT: (drop
- ;; NOMNL-TNH-NEXT: (ref.cast
+ ;; NOMNL-TNH-NEXT: (block $block (result (ref $parent))
+ ;; NOMNL-TNH-NEXT: (call $foo)
;; NOMNL-TNH-NEXT: (local.get $parent)
- ;; NOMNL-TNH-NEXT: (unreachable)
;; NOMNL-TNH-NEXT: )
;; NOMNL-TNH-NEXT: )
;; NOMNL-TNH-NEXT: (drop
- ;; NOMNL-TNH-NEXT: (ref.cast
+ ;; NOMNL-TNH-NEXT: (ref.cast_static $parent
;; NOMNL-TNH-NEXT: (unreachable)
- ;; NOMNL-TNH-NEXT: (local.get $parent-rtt)
;; NOMNL-TNH-NEXT: )
;; NOMNL-TNH-NEXT: )
;; NOMNL-TNH-NEXT: )
(func $ref-cast-iit-bad
(param $parent (ref $parent))
- (param $parent-rtt (rtt $parent))
;; optimizing this cast away requires reordering.
(drop
- (ref.cast
+ (ref.cast_static $parent
(block (result (ref $parent))
(call $foo)
(local.get $parent)
)
- (block (result (rtt $parent))
- (call $foo)
- (local.get $parent-rtt)
- )
)
)
;; ignore unreachability
(drop
- (ref.cast
- (local.get $parent)
- (unreachable)
- )
- )
- (drop
- (ref.cast
+ (ref.cast_static $parent
(unreachable)
- (local.get $parent-rtt)
)
)
)
@@ -335,9 +210,8 @@
(drop
(ref.eq
(local.get $x)
- (ref.cast
+ (ref.cast_static $parent
(local.get $x)
- (rtt.canon $parent)
)
)
)