183 lines · plain
1# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+exception-handling < %s | FileCheck %s2# Check that it converts to .o without errors, but don't check any output:3# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+exception-handling -filetype=obj -o %t.o < %s4 5 .tagtype __cpp_exception i326 7block_branch_test:8 .functype block_branch_test () -> ()9 10 # Block input paramter / return tests11 12 i32.const 013 block (i32) -> (i32)14 end_block15 drop16 17 i32.const 018 i64.const 019 block (i32, i64) -> (i32, f32)20 drop21 f32.const 0.022 end_block23 drop24 drop25 26 i32.const 027 loop (i32) -> (f32)28 drop29 f32.const 0.030 end_loop31 drop32 33 i32.const 034 i32.const 035 if (i32) -> (i32)36 else37 i32.popcnt38 end_if39 drop40 41 try i3242 i32.const 043 catch __cpp_exception44 i32.clz45 catch_all46 i32.const 547 end_try48 drop49 50 i32.const 051 block (i32) -> (i32)52 block (i32) -> (f32)53 drop54 f32.const 0.055 end_block56 drop57 i32.const 058 end_block59 drop60 61 # Branch tests62 63 block f3264 f32.const 0.065 i32.const 066 br_if 067 f32.const 1.068 br 069 # After 'br', we can pop any values from the polymorphic stack70 i32.add71 i32.sub72 i32.mul73 drop74 end_block75 drop76 77 block () -> (f32, f64)78 f32.const 0.079 f64.const 0.080 i32.const 081 br_if 082 block (f32, f64) -> (f32, f64)83 i32.const 184 br_if 085 end_block86 end_block87 drop88 drop89 90 # Within a loop, branches target the start of the loop91 i32.const 092 loop (i32) -> ()93 i32.const 194 br 095 end_loop96 97 end_function98 99# CHECK-LABEL: block_branch_test100 101# CHECK: i32.const 0102# CHECK-NEXT: block (i32) -> (i32)103# CHECK-NEXT: end_block # label0:104# CHECK-NEXT: drop105 106# CHECK: i32.const 0107# CHECK-NEXT: i64.const 0108# CHECK-NEXT: block (i32, i64) -> (i32, f32)109# CHECK-NEXT: drop110# CHECK-NEXT: f32.const 0x0p0111# CHECK-NEXT: end_block # label1:112# CHECK-NEXT: drop113# CHECK-NEXT: drop114 115# CHECK: i32.const 0116# CHECK-NEXT: loop (i32) -> (f32) # label2:117# CHECK-NEXT: drop118# CHECK-NEXT: f32.const 0x0p0119# CHECK-NEXT: end_loop120# CHECK-NEXT: drop121 122# CHECK: i32.const 0123# CHECK-NEXT: i32.const 0124# CHECK-NEXT: if (i32) -> (i32)125# CHECK-NEXT: else126# CHECK-NEXT: i32.popcnt127# CHECK-NEXT: end_if128# CHECK-NEXT: drop129 130# CHECK: try i32131# CHECK-NEXT: i32.const 0132# CHECK-NEXT: catch __cpp_exception # catch3:133# CHECK-NEXT: i32.clz134# CHECK-NEXT: catch_all135# CHECK-NEXT: i32.const 5136# CHECK-NEXT: end_try # label3:137# CHECK-NEXT: drop138 139# CHECK: i32.const 0140# CHECK-NEXT: block (i32) -> (i32)141# CHECK-NEXT: block (i32) -> (f32)142# CHECK-NEXT: drop143# CHECK-NEXT: f32.const 0x0p0144# CHECK-NEXT: end_block # label5:145# CHECK-NEXT: drop146# CHECK-NEXT: i32.const 0147# CHECK-NEXT: end_block # label4:148# CHECK-NEXT: drop149 150# CHECK: block f32151# CHECK-NEXT: f32.const 0x0p0152# CHECK-NEXT: i32.const 0153# CHECK-NEXT: br_if 0 # 0: down to label6154# CHECK-NEXT: f32.const 0x1p0155# CHECK-NEXT: br 0 # 0: down to label6156# CHECK-NEXT: i32.add157# CHECK-NEXT: i32.sub158# CHECK-NEXT: i32.mul159# CHECK-NEXT: drop160# CHECK-NEXT: end_block # label6:161# CHECK-NEXT: drop162 163# CHECK: block () -> (f32, f64)164# CHECK-NEXT: f32.const 0x0p0165# CHECK-NEXT: f64.const 0x0p0166# CHECK-NEXT: i32.const 0167# CHECK-NEXT: br_if 0 # 0: down to label7168# CHECK-NEXT: block (f32, f64) -> (f32, f64)169# CHECK-NEXT: i32.const 1170# CHECK-NEXT: br_if 0 # 0: down to label8171# CHECK-NEXT: end_block # label8:172# CHECK-NEXT: end_block # label7:173# CHECK-NEXT: drop174# CHECK-NEXT: drop175 176# CHECK: i32.const 0177# CHECK-NEXT: loop (i32) -> () # label9:178# CHECK-NEXT: i32.const 1179# CHECK-NEXT: br 0 # 0: up to label9180# CHECK-NEXT: end_loop181 182# CHECK: end_function183