Skip to content

Commit d23771c

Browse files
committed
finish
1 parent 6707cd9 commit d23771c

2 files changed

Lines changed: 51 additions & 36 deletions

File tree

src/passes/OptimizeInstructions.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2694,7 +2694,7 @@ struct OptimizeInstructions
26942694

26952695
void visitRefGetDesc(RefGetDesc* curr) {
26962696
skipNonNullCast(curr->ref, curr);
2697-
//trapOnNull(curr, curr->ref);
2697+
trapOnNull(curr, curr->ref);
26982698
}
26992699

27002700
void visitTupleExtract(TupleExtract* curr) {

test/lit/passes/optimize-instructions-desc.wast

Lines changed: 50 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,12 @@
8080
)
8181
)
8282

83-
;; CHECK: (func $nonnull-cast-desc (type $17) (param $desc (ref null (exact $desc))) (result (ref (exact $struct)))
83+
;; CHECK: (func $nonnull-cast-desc (type $18) (param $desc (ref null (exact $desc))) (result (ref (exact $struct)))
8484
;; CHECK-NEXT: (struct.new_default $struct
8585
;; CHECK-NEXT: (local.get $desc)
8686
;; CHECK-NEXT: )
8787
;; CHECK-NEXT: )
88-
;; NTRAP: (func $nonnull-cast-desc (type $17) (param $desc (ref null (exact $desc))) (result (ref (exact $struct)))
88+
;; NTRAP: (func $nonnull-cast-desc (type $18) (param $desc (ref null (exact $desc))) (result (ref (exact $struct)))
8989
;; NTRAP-NEXT: (struct.new_default $struct
9090
;; NTRAP-NEXT: (local.get $desc)
9191
;; NTRAP-NEXT: )
@@ -100,15 +100,15 @@
100100

101101
;; Test that when we optimize a struct.new to a struct.new_default, we drop
102102
;; the field operands but keep the descriptor.
103-
;; CHECK: (func $new-default-keep-desc (type $18) (result anyref)
103+
;; CHECK: (func $new-default-keep-desc (type $10) (result anyref)
104104
;; CHECK-NEXT: (struct.new_default $struct-i32
105105
;; CHECK-NEXT: (block (result (ref (exact $struct-i32.desc)))
106106
;; CHECK-NEXT: (call $effect)
107107
;; CHECK-NEXT: (struct.new_default $struct-i32.desc)
108108
;; CHECK-NEXT: )
109109
;; CHECK-NEXT: )
110110
;; CHECK-NEXT: )
111-
;; NTRAP: (func $new-default-keep-desc (type $18) (result anyref)
111+
;; NTRAP: (func $new-default-keep-desc (type $10) (result anyref)
112112
;; NTRAP-NEXT: (struct.new_default $struct-i32
113113
;; NTRAP-NEXT: (block (result (ref (exact $struct-i32.desc)))
114114
;; NTRAP-NEXT: (call $effect)
@@ -229,12 +229,12 @@
229229
)
230230
)
231231

232-
;; CHECK: (func $cast-desc-unrelated-type (type $10) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc)))
232+
;; CHECK: (func $cast-desc-unrelated-type (type $11) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc)))
233233
;; CHECK-NEXT: (drop
234234
;; CHECK-NEXT: (unreachable)
235235
;; CHECK-NEXT: )
236236
;; CHECK-NEXT: )
237-
;; NTRAP: (func $cast-desc-unrelated-type (type $10) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc)))
237+
;; NTRAP: (func $cast-desc-unrelated-type (type $11) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc)))
238238
;; NTRAP-NEXT: (drop
239239
;; NTRAP-NEXT: (unreachable)
240240
;; NTRAP-NEXT: )
@@ -249,7 +249,7 @@
249249
)
250250
)
251251

252-
;; CHECK: (func $cast-desc-unrelated-type-effects (type $10) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc)))
252+
;; CHECK: (func $cast-desc-unrelated-type-effects (type $11) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc)))
253253
;; CHECK-NEXT: (drop
254254
;; CHECK-NEXT: (block
255255
;; CHECK-NEXT: (drop
@@ -268,7 +268,7 @@
268268
;; CHECK-NEXT: )
269269
;; CHECK-NEXT: )
270270
;; CHECK-NEXT: )
271-
;; NTRAP: (func $cast-desc-unrelated-type-effects (type $10) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc)))
271+
;; NTRAP: (func $cast-desc-unrelated-type-effects (type $11) (param $struct (ref $struct)) (param $desc-i32 (ref (exact $struct-i32.desc)))
272272
;; NTRAP-NEXT: (drop
273273
;; NTRAP-NEXT: (block
274274
;; NTRAP-NEXT: (drop
@@ -303,15 +303,15 @@
303303
)
304304
)
305305

306-
;; CHECK: (func $cast-desc-unrelated-type-nullable (type $11) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc))
306+
;; CHECK: (func $cast-desc-unrelated-type-nullable (type $12) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc))
307307
;; CHECK-NEXT: (drop
308308
;; CHECK-NEXT: (ref.cast_desc (ref null $struct)
309309
;; CHECK-NEXT: (local.get $struct-i32)
310310
;; CHECK-NEXT: (local.get $desc)
311311
;; CHECK-NEXT: )
312312
;; CHECK-NEXT: )
313313
;; CHECK-NEXT: )
314-
;; NTRAP: (func $cast-desc-unrelated-type-nullable (type $11) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc))
314+
;; NTRAP: (func $cast-desc-unrelated-type-nullable (type $12) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc))
315315
;; NTRAP-NEXT: (drop
316316
;; NTRAP-NEXT: (ref.null none)
317317
;; NTRAP-NEXT: )
@@ -326,7 +326,7 @@
326326
)
327327
)
328328

329-
;; CHECK: (func $cast-desc-unrelated-type-nullable-effects (type $11) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc))
329+
;; CHECK: (func $cast-desc-unrelated-type-nullable-effects (type $12) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc))
330330
;; CHECK-NEXT: (drop
331331
;; CHECK-NEXT: (ref.cast_desc (ref null $struct)
332332
;; CHECK-NEXT: (block (result (ref null $struct-i32))
@@ -340,7 +340,7 @@
340340
;; CHECK-NEXT: )
341341
;; CHECK-NEXT: )
342342
;; CHECK-NEXT: )
343-
;; NTRAP: (func $cast-desc-unrelated-type-nullable-effects (type $11) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc))
343+
;; NTRAP: (func $cast-desc-unrelated-type-nullable-effects (type $12) (param $struct-i32 (ref null $struct-i32)) (param $desc (ref $desc))
344344
;; NTRAP-NEXT: (drop
345345
;; NTRAP-NEXT: (block (result nullref)
346346
;; NTRAP-NEXT: (drop
@@ -466,15 +466,15 @@
466466
)
467467
)
468468

469-
;; CHECK: (func $cast-desc-weaker-nondesc-child (type $12) (param $ref anyref) (param $desc (ref $sub.desc))
469+
;; CHECK: (func $cast-desc-weaker-nondesc-child (type $13) (param $ref anyref) (param $desc (ref $sub.desc))
470470
;; CHECK-NEXT: (drop
471471
;; CHECK-NEXT: (ref.cast_desc (ref $sub)
472472
;; CHECK-NEXT: (local.get $ref)
473473
;; CHECK-NEXT: (local.get $desc)
474474
;; CHECK-NEXT: )
475475
;; CHECK-NEXT: )
476476
;; CHECK-NEXT: )
477-
;; NTRAP: (func $cast-desc-weaker-nondesc-child (type $12) (param $ref anyref) (param $desc (ref $sub.desc))
477+
;; NTRAP: (func $cast-desc-weaker-nondesc-child (type $13) (param $ref anyref) (param $desc (ref $sub.desc))
478478
;; NTRAP-NEXT: (drop
479479
;; NTRAP-NEXT: (ref.cast_desc (ref $sub)
480480
;; NTRAP-NEXT: (local.get $ref)
@@ -494,7 +494,7 @@
494494
)
495495
)
496496

497-
;; CHECK: (func $cast-desc-weaker-nondesc-child-effects (type $12) (param $ref anyref) (param $desc (ref $sub.desc))
497+
;; CHECK: (func $cast-desc-weaker-nondesc-child-effects (type $13) (param $ref anyref) (param $desc (ref $sub.desc))
498498
;; CHECK-NEXT: (drop
499499
;; CHECK-NEXT: (ref.cast_desc (ref $sub)
500500
;; CHECK-NEXT: (block (result anyref)
@@ -508,7 +508,7 @@
508508
;; CHECK-NEXT: )
509509
;; CHECK-NEXT: )
510510
;; CHECK-NEXT: )
511-
;; NTRAP: (func $cast-desc-weaker-nondesc-child-effects (type $12) (param $ref anyref) (param $desc (ref $sub.desc))
511+
;; NTRAP: (func $cast-desc-weaker-nondesc-child-effects (type $13) (param $ref anyref) (param $desc (ref $sub.desc))
512512
;; NTRAP-NEXT: (drop
513513
;; NTRAP-NEXT: (ref.cast_desc (ref $sub)
514514
;; NTRAP-NEXT: (block (result anyref)
@@ -629,7 +629,7 @@
629629
)
630630
)
631631

632-
;; CHECK: (func $cast-desc-weaker-desc-child (type $13) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc))
632+
;; CHECK: (func $cast-desc-weaker-desc-child (type $14) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc))
633633
;; CHECK-NEXT: (drop
634634
;; CHECK-NEXT: (ref.cast_desc (ref $sub)
635635
;; CHECK-NEXT: (ref.cast_desc (ref $struct)
@@ -640,7 +640,7 @@
640640
;; CHECK-NEXT: )
641641
;; CHECK-NEXT: )
642642
;; CHECK-NEXT: )
643-
;; NTRAP: (func $cast-desc-weaker-desc-child (type $13) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc))
643+
;; NTRAP: (func $cast-desc-weaker-desc-child (type $14) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc))
644644
;; NTRAP-NEXT: (drop
645645
;; NTRAP-NEXT: (ref.cast_desc (ref $sub)
646646
;; NTRAP-NEXT: (block (result anyref)
@@ -665,7 +665,7 @@
665665
)
666666
)
667667

668-
;; CHECK: (func $cast-desc-stronger-desc-child (type $13) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc))
668+
;; CHECK: (func $cast-desc-stronger-desc-child (type $14) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc))
669669
;; CHECK-NEXT: (drop
670670
;; CHECK-NEXT: (ref.cast_desc (ref $struct)
671671
;; CHECK-NEXT: (ref.cast_desc (ref $sub)
@@ -676,7 +676,7 @@
676676
;; CHECK-NEXT: )
677677
;; CHECK-NEXT: )
678678
;; CHECK-NEXT: )
679-
;; NTRAP: (func $cast-desc-stronger-desc-child (type $13) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc))
679+
;; NTRAP: (func $cast-desc-stronger-desc-child (type $14) (param $ref anyref) (param $desc (ref $desc)) (param $sub.desc (ref $sub.desc))
680680
;; NTRAP-NEXT: (drop
681681
;; NTRAP-NEXT: (block (result (ref $sub))
682682
;; NTRAP-NEXT: (ref.cast_desc (ref $sub)
@@ -790,7 +790,7 @@
790790
)
791791
)
792792

793-
;; CHECK: (func $cast-desc-stronger-fallthrough-nullck (type $14) (param $sub (ref null $sub)) (param $desc (ref $desc))
793+
;; CHECK: (func $cast-desc-stronger-fallthrough-nullck (type $15) (param $sub (ref null $sub)) (param $desc (ref $desc))
794794
;; CHECK-NEXT: (drop
795795
;; CHECK-NEXT: (ref.cast_desc (ref $struct)
796796
;; CHECK-NEXT: (block (result anyref)
@@ -800,7 +800,7 @@
800800
;; CHECK-NEXT: )
801801
;; CHECK-NEXT: )
802802
;; CHECK-NEXT: )
803-
;; NTRAP: (func $cast-desc-stronger-fallthrough-nullck (type $14) (param $sub (ref null $sub)) (param $desc (ref $desc))
803+
;; NTRAP: (func $cast-desc-stronger-fallthrough-nullck (type $15) (param $sub (ref null $sub)) (param $desc (ref $desc))
804804
;; NTRAP-NEXT: (local $2 (ref null $sub))
805805
;; NTRAP-NEXT: (drop
806806
;; NTRAP-NEXT: (block (result (ref $sub))
@@ -829,7 +829,7 @@
829829
)
830830
)
831831

832-
;; CHECK: (func $cast-desc-stronger-fallthrough-nullck-effects (type $14) (param $sub (ref null $sub)) (param $desc (ref $desc))
832+
;; CHECK: (func $cast-desc-stronger-fallthrough-nullck-effects (type $15) (param $sub (ref null $sub)) (param $desc (ref $desc))
833833
;; CHECK-NEXT: (drop
834834
;; CHECK-NEXT: (ref.cast_desc (ref $struct)
835835
;; CHECK-NEXT: (block (result anyref)
@@ -843,7 +843,7 @@
843843
;; CHECK-NEXT: )
844844
;; CHECK-NEXT: )
845845
;; CHECK-NEXT: )
846-
;; NTRAP: (func $cast-desc-stronger-fallthrough-nullck-effects (type $14) (param $sub (ref null $sub)) (param $desc (ref $desc))
846+
;; NTRAP: (func $cast-desc-stronger-fallthrough-nullck-effects (type $15) (param $sub (ref null $sub)) (param $desc (ref $desc))
847847
;; NTRAP-NEXT: (local $2 (ref null $sub))
848848
;; NTRAP-NEXT: (drop
849849
;; NTRAP-NEXT: (block (result (ref $sub))
@@ -883,12 +883,12 @@
883883
)
884884
)
885885

886-
;; CHECK: (func $cast-desc-stronger-fallthrough-null (type $15) (param $null nullref) (param $desc (ref $desc))
886+
;; CHECK: (func $cast-desc-stronger-fallthrough-null (type $16) (param $null nullref) (param $desc (ref $desc))
887887
;; CHECK-NEXT: (drop
888888
;; CHECK-NEXT: (ref.null none)
889889
;; CHECK-NEXT: )
890890
;; CHECK-NEXT: )
891-
;; NTRAP: (func $cast-desc-stronger-fallthrough-null (type $15) (param $null nullref) (param $desc (ref $desc))
891+
;; NTRAP: (func $cast-desc-stronger-fallthrough-null (type $16) (param $null nullref) (param $desc (ref $desc))
892892
;; NTRAP-NEXT: (drop
893893
;; NTRAP-NEXT: (ref.null none)
894894
;; NTRAP-NEXT: )
@@ -905,7 +905,7 @@
905905
)
906906
)
907907

908-
;; CHECK: (func $cast-desc-stronger-fallthrough-null-effects (type $15) (param $null nullref) (param $desc (ref $desc))
908+
;; CHECK: (func $cast-desc-stronger-fallthrough-null-effects (type $16) (param $null nullref) (param $desc (ref $desc))
909909
;; CHECK-NEXT: (drop
910910
;; CHECK-NEXT: (block (result nullref)
911911
;; CHECK-NEXT: (drop
@@ -924,7 +924,7 @@
924924
;; CHECK-NEXT: )
925925
;; CHECK-NEXT: )
926926
;; CHECK-NEXT: )
927-
;; NTRAP: (func $cast-desc-stronger-fallthrough-null-effects (type $15) (param $null nullref) (param $desc (ref $desc))
927+
;; NTRAP: (func $cast-desc-stronger-fallthrough-null-effects (type $16) (param $null nullref) (param $desc (ref $desc))
928928
;; NTRAP-NEXT: (drop
929929
;; NTRAP-NEXT: (block (result nullref)
930930
;; NTRAP-NEXT: (drop
@@ -959,7 +959,7 @@
959959
)
960960
)
961961

962-
;; CHECK: (func $cast-desc-stronger-fallthrough-null-null-desc (type $16) (param $null nullref) (param $desc (ref null $desc))
962+
;; CHECK: (func $cast-desc-stronger-fallthrough-null-null-desc (type $17) (param $null nullref) (param $desc (ref null $desc))
963963
;; CHECK-NEXT: (drop
964964
;; CHECK-NEXT: (block (result nullref)
965965
;; CHECK-NEXT: (drop
@@ -971,7 +971,7 @@
971971
;; CHECK-NEXT: )
972972
;; CHECK-NEXT: )
973973
;; CHECK-NEXT: )
974-
;; NTRAP: (func $cast-desc-stronger-fallthrough-null-null-desc (type $16) (param $null nullref) (param $desc (ref null $desc))
974+
;; NTRAP: (func $cast-desc-stronger-fallthrough-null-null-desc (type $17) (param $null nullref) (param $desc (ref null $desc))
975975
;; NTRAP-NEXT: (drop
976976
;; NTRAP-NEXT: (ref.null none)
977977
;; NTRAP-NEXT: )
@@ -989,7 +989,7 @@
989989
)
990990
)
991991

992-
;; CHECK: (func $cast-desc-stronger-fallthrough-null-null-desc-effects (type $16) (param $null nullref) (param $desc (ref null $desc))
992+
;; CHECK: (func $cast-desc-stronger-fallthrough-null-null-desc-effects (type $17) (param $null nullref) (param $desc (ref null $desc))
993993
;; CHECK-NEXT: (drop
994994
;; CHECK-NEXT: (block (result nullref)
995995
;; CHECK-NEXT: (drop
@@ -1010,7 +1010,7 @@
10101010
;; CHECK-NEXT: )
10111011
;; CHECK-NEXT: )
10121012
;; CHECK-NEXT: )
1013-
;; NTRAP: (func $cast-desc-stronger-fallthrough-null-null-desc-effects (type $16) (param $null nullref) (param $desc (ref null $desc))
1013+
;; NTRAP: (func $cast-desc-stronger-fallthrough-null-null-desc-effects (type $17) (param $null nullref) (param $desc (ref null $desc))
10141014
;; NTRAP-NEXT: (drop
10151015
;; NTRAP-NEXT: (block (result nullref)
10161016
;; NTRAP-NEXT: (drop
@@ -1109,22 +1109,37 @@
11091109
)
11101110
)
11111111

1112-
;; CHECK: (func $skip-non-null (type $20) (param $ref (ref null $struct)) (result anyref)
1112+
;; CHECK: (func $ref.get_desc-skip-non-null (type $20) (param $ref (ref null $struct)) (result anyref)
11131113
;; CHECK-NEXT: (ref.get_desc $struct
11141114
;; CHECK-NEXT: (local.get $ref)
11151115
;; CHECK-NEXT: )
11161116
;; CHECK-NEXT: )
1117-
;; NTRAP: (func $skip-non-null (type $20) (param $ref (ref null $struct)) (result anyref)
1117+
;; NTRAP: (func $ref.get_desc-skip-non-null (type $20) (param $ref (ref null $struct)) (result anyref)
11181118
;; NTRAP-NEXT: (ref.get_desc $struct
11191119
;; NTRAP-NEXT: (local.get $ref)
11201120
;; NTRAP-NEXT: )
11211121
;; NTRAP-NEXT: )
1122-
(func $skip-non-null (param $ref (ref null $struct)) (result anyref)
1122+
(func $ref.get_desc-skip-non-null (param $ref (ref null $struct)) (result anyref)
11231123
(ref.get_desc $struct
11241124
;; This is not needed, as the parent traps on null anyhow.
11251125
(ref.as_non_null
11261126
(local.get $ref)
11271127
)
11281128
)
11291129
)
1130+
1131+
;; CHECK: (func $ref.get_desc-trap-on-null (type $10) (result anyref)
1132+
;; CHECK-NEXT: (unreachable)
1133+
;; CHECK-NEXT: )
1134+
;; NTRAP: (func $ref.get_desc-trap-on-null (type $10) (result anyref)
1135+
;; NTRAP-NEXT: (unreachable)
1136+
;; NTRAP-NEXT: )
1137+
(func $ref.get_desc-trap-on-null (result anyref)
1138+
;; This traps.
1139+
(ref.get_desc $struct
1140+
(block (result (ref null $struct))
1141+
(ref.null $struct)
1142+
)
1143+
)
1144+
)
11301145
)

0 commit comments

Comments
 (0)