summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2023-09-21 15:35:12 -0700
committerGitHub <noreply@github.com>2023-09-21 15:35:12 -0700
commitc290aadaf6c08a35311fc6fcaee557bbd66968e4 (patch)
tree9a98e4bac4374296ea9dbc622630c0281b198e51 /test
parent38197b57aa5bd94a879c0203b75a35cb826db929 (diff)
downloadbinaryen-c290aadaf6c08a35311fc6fcaee557bbd66968e4.tar.gz
binaryen-c290aadaf6c08a35311fc6fcaee557bbd66968e4.tar.bz2
binaryen-c290aadaf6c08a35311fc6fcaee557bbd66968e4.zip
[Parser] Support loops (#5966)
Parse loops in the new wat parser and add support for them to the IRBuilder.
Diffstat (limited to 'test')
-rw-r--r--test/lit/wat-kitchen-sink.wast246
1 files changed, 224 insertions, 22 deletions
diff --git a/test/lit/wat-kitchen-sink.wast b/test/lit/wat-kitchen-sink.wast
index 45d2c5d96..6475b7f99 100644
--- a/test/lit/wat-kitchen-sink.wast
+++ b/test/lit/wat-kitchen-sink.wast
@@ -810,6 +810,38 @@
nop
)
+
+ ;; CHECK: (func $multivalue-nested (type $ret2) (result i32 i32)
+ ;; CHECK-NEXT: (local $scratch (i32 i32))
+ ;; CHECK-NEXT: (block (result i32 i32)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (local.set $scratch
+ ;; CHECK-NEXT: (block (result i32 i32)
+ ;; CHECK-NEXT: (block (result i32 i32)
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (local.get $scratch)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $multivalue-nested (type $ret2)
+ block (type $ret2)
+ nop
+ block (type $ret2)
+ block (type $ret2)
+ i32.const 0
+ i32.const 1
+ end
+ end
+ nop
+ end
+ )
+
;; CHECK: (func $if-else (type $void)
;; CHECK-NEXT: (if
;; CHECK-NEXT: (i32.const 0)
@@ -886,6 +918,30 @@
end
)
+ ;; CHECK: (func $if-else-folded-body (type $void)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $if-else-folded-body
+ i32.const 0
+ if
+ (drop
+ (f32.const 1)
+ )
+ else
+ (drop
+ (f32.const 2)
+ )
+ end
+ )
+
;; CHECK: (func $if-else-labeled (type $void)
;; CHECK-NEXT: (block $l
;; CHECK-NEXT: (if
@@ -1190,37 +1246,183 @@
end
)
- ;; CHECK: (func $multivalue-nested (type $ret2) (result i32 i32)
- ;; CHECK-NEXT: (local $scratch (i32 i32))
- ;; CHECK-NEXT: (block (result i32 i32)
+ ;; CHECK: (func $loop (type $void)
+ ;; CHECK-NEXT: (loop
;; CHECK-NEXT: (nop)
- ;; CHECK-NEXT: (local.set $scratch
- ;; CHECK-NEXT: (block (result i32 i32)
- ;; CHECK-NEXT: (block (result i32 i32)
- ;; CHECK-NEXT: (tuple.make
- ;; CHECK-NEXT: (i32.const 0)
- ;; CHECK-NEXT: (i32.const 1)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $loop
+ loop
+ nop
+ end
+ )
+
+ ;; CHECK: (func $loop-empty (type $void)
+ ;; CHECK-NEXT: (loop
;; CHECK-NEXT: (nop)
- ;; CHECK-NEXT: (local.get $scratch)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
- (func $multivalue-nested (type $ret2)
- block (type $ret2)
+ (func $loop-empty
+ loop
+ end
+ )
+
+ ;; CHECK: (func $loop-many (type $void)
+ ;; CHECK-NEXT: (loop
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $loop-many
+ loop
nop
- block (type $ret2)
- block (type $ret2)
- i32.const 0
- i32.const 1
- end
- end
nop
end
)
+ ;; CHECK: (func $loop-nested (type $void)
+ ;; CHECK-NEXT: (loop
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $loop-nested
+ loop
+ i32.const 0
+ drop
+ end
+ )
+
+ ;; CHECK: (func $loop-folded-body (type $void)
+ ;; CHECK-NEXT: (loop
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $loop-folded-body
+ loop
+ (drop
+ (i32.const 0)
+ )
+ end
+ )
+
+ ;; CHECK: (func $loop-labeled (type $void)
+ ;; CHECK-NEXT: (loop $l
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $loop-labeled
+ loop $l
+ nop
+ end $l
+ )
+
+ ;; CHECK: (func $loop-result (type $2) (result i32)
+ ;; CHECK-NEXT: (loop (result i32)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $loop-result (result i32)
+ loop (result i32)
+ i32.const 0
+ end
+ )
+
+ ;; CHECK: (func $loop-labeled-result (type $2) (result i32)
+ ;; CHECK-NEXT: (loop $l (result i32)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $loop-labeled-result (result i32)
+ loop $l (result i32)
+ i32.const 0
+ end $l
+ )
+
+ ;; CHECK: (func $loop-folded (type $void)
+ ;; CHECK-NEXT: (loop
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $loop-folded
+ (loop
+ (nop)
+ )
+ )
+
+ ;; CHECK: (func $loop-folded-empty (type $void)
+ ;; CHECK-NEXT: (loop
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $loop-folded-empty
+ (loop)
+ )
+
+ ;; CHECK: (func $loop-folded-many (type $void)
+ ;; CHECK-NEXT: (loop
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $loop-folded-many
+ (loop
+ nop
+ nop
+ )
+ )
+
+ ;; CHECK: (func $loop-folded-nested (type $void)
+ ;; CHECK-NEXT: (loop
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $loop-folded-nested
+ (loop
+ (drop
+ (f32.const 0)
+ )
+ )
+ )
+
+ ;; CHECK: (func $loop-folded-labeled (type $void)
+ ;; CHECK-NEXT: (loop $l
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $loop-folded-labeled
+ (loop $l
+ nop
+ )
+ )
+
+ ;; CHECK: (func $loop-folded-result (type $2) (result i32)
+ ;; CHECK-NEXT: (loop (result i32)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $loop-folded-result (result i32)
+ (loop (result i32)
+ i32.const 0
+ )
+ )
+
+ ;; CHECK: (func $loop-folded-labeled-result (type $2) (result i32)
+ ;; CHECK-NEXT: (loop $l (result i32)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $loop-folded-labeled-result (result i32)
+ (loop $l (result i32)
+ i32.const 0
+ )
+ )
+
;; CHECK: (func $binary (type $15) (param $0 i32) (param $1 i32) (param $2 f64) (param $3 f64)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.add