diff options
Diffstat (limited to 'test/lit/passes/remove-unused-brs-gc.wast')
-rw-r--r-- | test/lit/passes/remove-unused-brs-gc.wast | 96 |
1 files changed, 64 insertions, 32 deletions
diff --git a/test/lit/passes/remove-unused-brs-gc.wast b/test/lit/passes/remove-unused-brs-gc.wast index 7a620193e..84c16cab2 100644 --- a/test/lit/passes/remove-unused-brs-gc.wast +++ b/test/lit/passes/remove-unused-brs-gc.wast @@ -36,8 +36,12 @@ ;; (that is not specifically intended to be tested here). (if (result (ref struct)) (i32.const 0) - (local.get $0) - (local.get $0) + (then + (local.get $0) + ) + (else + (local.get $0) + ) ) ) ) @@ -639,36 +643,48 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (ref.test (ref none) - ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (ref.test (ref none) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result nullref) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (ref.null none) - ;; CHECK-NEXT: (ref.cast nullref + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (ref.null none) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (ref.cast nullref + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result (ref null $struct)) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block $something (result (ref null $struct)) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (block (result nullref) - ;; CHECK-NEXT: (br_on_non_null $something - ;; CHECK-NEXT: (local.get $struct) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $something (result (ref null $struct)) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result nullref) + ;; CHECK-NEXT: (br_on_non_null $something + ;; CHECK-NEXT: (local.get $struct) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (ref.null none) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (ref.null none) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (ref.null none) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -699,19 +715,27 @@ (drop (if (result i32) (local.get $x) - (ref.test (ref $struct) - (ref.null any) + (then + (ref.test (ref $struct) + (ref.null any) + ) + ) + (else + (i32.const 0) ) - (i32.const 0) ) ) (drop (if (result anyref) (local.get $x) - (ref.null any) - (ref.cast (ref null $struct) + (then (ref.null any) ) + (else + (ref.cast (ref null $struct) + (ref.null any) + ) + ) ) ) ;; We do not selectify here because the amount of work in the if is @@ -719,34 +743,42 @@ (drop (if (result anyref) (local.get $x) - (block (result anyref) - (block $something (result anyref) - (drop - (br_on_cast $something anyref (ref $struct) - (local.get $struct) + (then + (block (result anyref) + (block $something (result anyref) + (drop + (br_on_cast $something anyref (ref $struct) + (local.get $struct) + ) ) + (ref.null any) ) - (ref.null any) ) ) - (ref.null any) + (else + (ref.null any) + ) ) ) ;; However, null checks are fairly fast, and we will emit a select here. (drop (if (result anyref) (local.get $x) - (block (result anyref) - (block $nothing - (drop - (br_on_null $nothing - (ref.null $struct) + (then + (block (result anyref) + (block $nothing + (drop + (br_on_null $nothing + (ref.null $struct) + ) ) ) + (ref.null any) ) + ) + (else (ref.null any) ) - (ref.null any) ) ) ) |