Skip to content

Commit bcaf232

Browse files
committed
finish
1 parent ca8ba07 commit bcaf232

1 file changed

Lines changed: 44 additions & 23 deletions

File tree

test/lit/passes/abstract-type-refining-desc.wast

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,14 +1097,44 @@
10971097
;; NO_TNH: (rec
10981098
;; NO_TNH-NEXT: (type $A (sub (descriptor $B (struct))))
10991099
(type $A (sub (descriptor $B (struct))))
1100-
;; YESTNH: (type $B (describes $A (struct)))
1101-
;; NO_TNH: (type $B (describes $A (struct)))
1100+
;; YESTNH: (type $B (sub (describes $A (struct))))
1101+
;; NO_TNH: (type $B (sub (describes $A (struct))))
11021102
(type $B (sub (describes $A (struct))))
11031103

1104+
;; YESTNH: (type $A.sub (sub $A (descriptor $B.sub (struct))))
1105+
;; NO_TNH: (type $A.sub (sub $A (descriptor $B.sub (struct))))
11041106
(type $A.sub (sub $A (descriptor $B.sub (struct))))
1107+
;; YESTNH: (type $B.sub (sub $B (describes $A.sub (struct))))
1108+
;; NO_TNH: (type $B.sub (sub $B (describes $A.sub (struct))))
11051109
(type $B.sub (sub $B (describes $A.sub (struct))))
11061110
)
11071111

1112+
;; YESTNH: (type $4 (func))
1113+
1114+
;; YESTNH: (type $5 (func (result (ref (exact $B.sub)))))
1115+
1116+
;; YESTNH: (type $6 (func (param (ref $A)) (result (ref $B.sub))))
1117+
1118+
;; YESTNH: (func $create (type $4)
1119+
;; YESTNH-NEXT: (drop
1120+
;; YESTNH-NEXT: (struct.new_default $A.sub
1121+
;; YESTNH-NEXT: (struct.new_default $B.sub)
1122+
;; YESTNH-NEXT: )
1123+
;; YESTNH-NEXT: )
1124+
;; YESTNH-NEXT: )
1125+
;; NO_TNH: (type $4 (func))
1126+
1127+
;; NO_TNH: (type $5 (func (result (ref (exact $B)))))
1128+
1129+
;; NO_TNH: (type $6 (func (param (ref $A)) (result (ref $B))))
1130+
1131+
;; NO_TNH: (func $create (type $4)
1132+
;; NO_TNH-NEXT: (drop
1133+
;; NO_TNH-NEXT: (struct.new_default $A.sub
1134+
;; NO_TNH-NEXT: (struct.new_default $B.sub)
1135+
;; NO_TNH-NEXT: )
1136+
;; NO_TNH-NEXT: )
1137+
;; NO_TNH-NEXT: )
11081138
(func $create
11091139
;; Make the subtypes not abstract.
11101140
(drop
@@ -1114,54 +1144,45 @@
11141144
)
11151145
)
11161146

1117-
;; YESTNH: (type $2 (func (result (ref none))))
1118-
1119-
;; YESTNH: (type $3 (func (param (ref $A)) (result (ref none))))
1120-
1121-
;; YESTNH: (func $test (type $2) (result (ref none))
1147+
;; YESTNH: (func $test (type $5) (result (ref (exact $B.sub)))
11221148
;; YESTNH-NEXT: (drop
11231149
;; YESTNH-NEXT: (struct.new_default $A
11241150
;; YESTNH-NEXT: (ref.null none)
11251151
;; YESTNH-NEXT: )
11261152
;; YESTNH-NEXT: )
11271153
;; YESTNH-NEXT: (unreachable)
11281154
;; YESTNH-NEXT: )
1129-
;; NO_TNH: (type $2 (func (result (ref none))))
1130-
1131-
;; NO_TNH: (type $3 (func (param (ref $A)) (result (ref none))))
1132-
1133-
;; NO_TNH: (func $test (type $2) (result (ref none))
1134-
;; NO_TNH-NEXT: (drop
1155+
;; NO_TNH: (func $test (type $5) (result (ref (exact $B)))
1156+
;; NO_TNH-NEXT: (ref.get_desc $A
11351157
;; NO_TNH-NEXT: (struct.new_default $A
11361158
;; NO_TNH-NEXT: (ref.null none)
11371159
;; NO_TNH-NEXT: )
11381160
;; NO_TNH-NEXT: )
1139-
;; NO_TNH-NEXT: (unreachable)
11401161
;; NO_TNH-NEXT: )
11411162
(func $test (result (ref (exact $B)))
1142-
;; We can still optimize here, thanks to exactness.
1163+
;; We can still optimize here, thanks to exactness (when TNH).
11431164
(ref.get_desc $A
11441165
(struct.new_default $A
11451166
(ref.null none)
11461167
)
11471168
)
11481169
)
11491170

1150-
;; YESTNH: (func $inexact (type $3) (param $inexact (ref $A)) (result (ref none))
1151-
;; YESTNH-NEXT: (drop
1152-
;; YESTNH-NEXT: (local.get $inexact)
1171+
;; YESTNH: (func $inexact (type $6) (param $inexact (ref $A)) (result (ref $B.sub))
1172+
;; YESTNH-NEXT: (ref.get_desc $A.sub
1173+
;; YESTNH-NEXT: (ref.cast (ref $A.sub)
1174+
;; YESTNH-NEXT: (local.get $inexact)
1175+
;; YESTNH-NEXT: )
11531176
;; YESTNH-NEXT: )
1154-
;; YESTNH-NEXT: (unreachable)
11551177
;; YESTNH-NEXT: )
1156-
;; NO_TNH: (func $inexact (type $3) (param $inexact (ref $A)) (result (ref none))
1157-
;; NO_TNH-NEXT: (drop
1178+
;; NO_TNH: (func $inexact (type $6) (param $inexact (ref $A)) (result (ref $B))
1179+
;; NO_TNH-NEXT: (ref.get_desc $A
11581180
;; NO_TNH-NEXT: (local.get $inexact)
11591181
;; NO_TNH-NEXT: )
1160-
;; NO_TNH-NEXT: (unreachable)
11611182
;; NO_TNH-NEXT: )
11621183
(func $inexact (param $inexact (ref $A)) (result (ref $B))
11631184
;; We do not optimize to an unreachable here, as the inexact reference may
1164-
;; contain an $A.sub. We optimize to that.
1185+
;; contain an $A.sub. We optimize to that, using a cast (in TNH).
11651186
(ref.get_desc $A
11661187
(local.get $inexact)
11671188
)

0 commit comments

Comments
 (0)