diff options
Diffstat (limited to 'test/lit/passes/optimize-casts.wast')
-rw-r--r-- | test/lit/passes/optimize-casts.wast | 182 |
1 files changed, 91 insertions, 91 deletions
diff --git a/test/lit/passes/optimize-casts.wast b/test/lit/passes/optimize-casts.wast index 097f03c62..422734eb4 100644 --- a/test/lit/passes/optimize-casts.wast +++ b/test/lit/passes/optimize-casts.wast @@ -112,7 +112,7 @@ ;; CHECK-NEXT: (local $1 (ref $A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -128,7 +128,7 @@ ;; As $ref.as but with ref.casts: we should use the cast value after it has ;; been computed, in both gets. (drop - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -144,7 +144,7 @@ ;; CHECK-NEXT: (local $1 (ref $A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -161,7 +161,7 @@ ;; CHECK-NEXT: ) (func $not-past-set (param $x (ref struct)) (drop - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -181,7 +181,7 @@ ;; CHECK-NEXT: (local $1 (ref $A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -195,7 +195,7 @@ ;; CHECK-NEXT: ) (func $yes-past-call (param $x (ref struct)) (drop - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -213,7 +213,7 @@ ;; CHECK-NEXT: (local $1 (ref $A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -227,7 +227,7 @@ ;; CHECK-NEXT: ) (func $not-past-call_ref (param $x (ref struct)) (drop - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -246,7 +246,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $void) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -259,7 +259,7 @@ ) (call $void) (drop - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -273,7 +273,7 @@ ;; CHECK-NEXT: (ref.func $void) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -287,7 +287,7 @@ (ref.func $void) ) (drop - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -298,7 +298,7 @@ ;; CHECK-NEXT: (local $2 (ref $B)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -314,7 +314,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $2 - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -328,7 +328,7 @@ ;; CHECK-NEXT: ) (func $best (param $x (ref struct)) (drop - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -345,7 +345,7 @@ (i32.const 20) ) (drop - (ref.cast $B + (ref.cast (ref $B) (local.get $x) ) ) @@ -362,7 +362,7 @@ ;; CHECK-NEXT: (local $1 (ref $B)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -371,7 +371,7 @@ ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -383,7 +383,7 @@ ;; As above, but with the casts reversed. Now we should use $B in both ;; gets. (drop - (ref.cast $B + (ref.cast (ref $B) (local.get $x) ) ) @@ -391,7 +391,7 @@ (local.get $x) ) (drop - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -404,7 +404,7 @@ ;; CHECK-NEXT: (local $1 (ref $A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (block (result (ref struct)) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) @@ -417,7 +417,7 @@ ;; CHECK-NEXT: ) (func $fallthrough (param $x (ref struct)) (drop - (ref.cast $A + (ref.cast (ref $A) ;; We look through the block, and optimize. (block (result (ref struct)) (local.get $x) @@ -431,7 +431,7 @@ ;; CHECK: (func $past-basic-block (type $ref|struct|_=>_none) (param $x (ref struct)) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -445,7 +445,7 @@ ;; CHECK-NEXT: ) (func $past-basic-block (param $x (ref struct)) (drop - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -473,14 +473,14 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $4 - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $b) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -512,12 +512,12 @@ (local.get $y) ) (drop - (ref.cast $A + (ref.cast (ref $A) (local.get $a) ) ) (drop - (ref.cast $A + (ref.cast (ref $A) (local.get $b) ) ) @@ -543,9 +543,9 @@ ;; CHECK: (func $move-cast-1 (type $ref|struct|_=>_none) (param $x (ref struct)) ;; CHECK-NEXT: (local $1 (ref $B)) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -555,7 +555,7 @@ ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -565,7 +565,7 @@ ;; The later cast to $B will be moved between ref.cast $A ;; and local.get $x. This will cause this ref.cast $A to be ;; converted to a second ref.cast $B due to ReFinalize(). - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -575,7 +575,7 @@ (drop ;; The most refined cast of $x is to $B, which we can move up to ;; the top and reuse from there. - (ref.cast $B + (ref.cast (ref $B) (local.get $x) ) ) @@ -584,16 +584,16 @@ ;; CHECK: (func $move-cast-2 (type $ref|struct|_=>_none) (param $x (ref struct)) ;; CHECK-NEXT: (local $1 (ref $B)) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -606,13 +606,13 @@ ;; As in $move-cast-1, the later cast to $B will be moved ;; between ref.cast $A and local.get $x, causing ref.cast $A ;; to be converted into a second ref.cast $B by ReFinalize(); - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) (drop ;; This will be moved up to the first local.get $x. - (ref.cast $B + (ref.cast (ref $B) (local.get $x) ) ) @@ -625,18 +625,18 @@ ;; CHECK-NEXT: (local $1 (ref $B)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -647,13 +647,13 @@ ) (drop ;; Converted to $B by ReFinalize(). - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) (drop ;; This will be moved up to the first local.get $x. - (ref.cast $B + (ref.cast (ref $B) (local.get $x) ) ) @@ -663,18 +663,18 @@ ;; CHECK-NEXT: (local $1 (ref $B)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -685,13 +685,13 @@ ) (drop ;; This will be moved up to the first local.get $x. - (ref.cast $B + (ref.cast (ref $B) (local.get $x) ) ) (drop ;; Converted to $B by ReFinalize(). - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -701,13 +701,13 @@ ;; CHECK-NEXT: (local $1 (ref $B)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -719,13 +719,13 @@ (drop ;; The first location is already the most refined cast, so nothing will be moved up. ;; (But we will save the cast to a local and re-use it below.) - (ref.cast $B + (ref.cast (ref $B) (local.get $x) ) ) (drop ;; Converted to $B by ReFinalize(). - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -738,7 +738,7 @@ ;; CHECK-NEXT: (local $1 (ref $B)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -747,7 +747,7 @@ ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -755,7 +755,7 @@ (func $move-cast-6 (param $x (ref struct)) (drop ;; This is already the most refined cast, so nothing will be moved. - (ref.cast $B + (ref.cast (ref $B) (local.get $x) ) ) @@ -764,7 +764,7 @@ ) (drop ;; Converted to $B by ReFinalize(). - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -775,7 +775,7 @@ ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -787,7 +787,7 @@ (drop ;; Since we know $x is of type $B, this cast to a less refined type $A ;; will not be moved higher. - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -823,7 +823,7 @@ ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $D + ;; CHECK-NEXT: (ref.cast (ref $D) ;; CHECK-NEXT: (block (result anyref) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) @@ -842,7 +842,7 @@ (local.get $x) ) (drop - (ref.cast $D + (ref.cast (ref $D) (block (result anyref) (local.get $x) ) @@ -915,20 +915,20 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $2 - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -936,12 +936,12 @@ ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -965,7 +965,7 @@ (local.get $y) ) (drop - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -975,13 +975,13 @@ ) (drop ;; This can be moved past local.set $x. - (ref.cast $B + (ref.cast (ref $B) (local.get $y) ) ) (drop ;; This cannot be moved past local.set $x. - (ref.cast $B + (ref.cast (ref $B) (local.get $x) ) ) @@ -1044,7 +1044,7 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (ref.as_non_null - ;; CHECK-NEXT: (ref.cast null $A + ;; CHECK-NEXT: (ref.cast (ref null $A) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1052,7 +1052,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1069,7 +1069,7 @@ (ref.as_non_null ;; This will be converted to a non-nullable cast because the local we ;; save to in the optimization ($1) is now non-nullable. - (ref.cast null $A + (ref.cast (ref null $A) (local.get $x) ) ) @@ -1081,14 +1081,14 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (ref.as_non_null - ;; CHECK-NEXT: (ref.cast null $A + ;; CHECK-NEXT: (ref.cast (ref null $A) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1108,7 +1108,7 @@ (drop ;; This is converted to ref.cast $A, because we will save $x to ;; a non-nullable $A local as part of the optimization. - (ref.cast null $A + (ref.cast (ref null $A) (local.get $x) ) ) @@ -1124,7 +1124,7 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (ref.as_non_null - ;; CHECK-NEXT: (ref.cast null $A + ;; CHECK-NEXT: (ref.cast (ref null $A) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1136,7 +1136,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1157,7 +1157,7 @@ (drop ;; This is converted to ref.cast $A, because we will save $x to ;; a non-nullable $A local as part of the optimization. - (ref.cast null $A + (ref.cast (ref null $A) (local.get $x) ) ) @@ -1165,7 +1165,7 @@ ;; CHECK: (func $unoptimizable-nested-casts (type $structref_=>_none) (param $x structref) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $B + ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) @@ -1176,7 +1176,7 @@ ;; No optimizations should be made here for this nested cast. ;; This test is here to ensure this. (drop - (ref.cast $B + (ref.cast (ref $B) (ref.as_non_null (local.get $x) ) @@ -1189,7 +1189,7 @@ ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) @@ -1204,7 +1204,7 @@ ;; We do not move this ref.cast of $x because $x is set by the local.tee, ;; and we do not move casts past a set of a local index. This is treated ;; like a local.set and we do not have a special case for this. - (ref.cast $A + (ref.cast (ref $A) (local.tee $x (local.get $x) ) @@ -1217,13 +1217,13 @@ ;; CHECK-NEXT: (local $3 (ref $A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.tee $a ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) @@ -1237,7 +1237,7 @@ ) (drop ;; We can move this ref.cast because the local.tee sets another local index. - (ref.cast $A + (ref.cast (ref $A) (local.tee $a (local.get $x) ) @@ -1249,18 +1249,18 @@ ;; CHECK-NEXT: (local $1 (ref $A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1273,12 +1273,12 @@ (local.get $x) ) (drop - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) (drop - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) @@ -1307,7 +1307,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.cast $A + ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1340,7 +1340,7 @@ ;; This cannot be moved earlier because it is blocked by ;; the if statement. All state information is cleared when ;; entering and leaving the if statement. - (ref.cast $A + (ref.cast (ref $A) (local.get $x) ) ) |