Skip to content

[WebAssembly] Create separate file for EH assembly tests #108472

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Sep 13, 2024

Conversation

aheejin
Copy link
Member

@aheejin aheejin commented Sep 12, 2024

Create eh-assembly.s that contains EH tests and remove EH tests from basic-assembly.s, given that it's easier to manage. (We can have many different tests, including the legacy EH and the new exnref, and with nesting for readability)

@aheejin aheejin requested a review from dschuff September 12, 2024 23:53
@llvmbot llvmbot added backend:WebAssembly mc Machine (object) code labels Sep 12, 2024
@llvmbot
Copy link
Member

llvmbot commented Sep 12, 2024

@llvm/pr-subscribers-mc

@llvm/pr-subscribers-backend-webassembly

Author: Heejin Ahn (aheejin)

Changes

Create eh-assembly.s that contains EH tests and remove EH tests from basic-assembly.s, given that it's easier to manage. (We can have many different tests, including the legacy EH and the new exnref, and with nesting for readability)


Full diff: https://github.com/llvm/llvm-project/pull/108472.diff

2 Files Affected:

  • (modified) llvm/test/MC/WebAssembly/basic-assembly.s (+2-12)
  • (added) llvm/test/MC/WebAssembly/eh-assembly.s (+65)
diff --git a/llvm/test/MC/WebAssembly/basic-assembly.s b/llvm/test/MC/WebAssembly/basic-assembly.s
index ac358c1b5c7a52..db7ccc9759beca 100644
--- a/llvm/test/MC/WebAssembly/basic-assembly.s
+++ b/llvm/test/MC/WebAssembly/basic-assembly.s
@@ -1,6 +1,6 @@
-# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+tail-call,+reference-types,atomics,+simd128,+nontrapping-fptoint,+exception-handling < %s | FileCheck %s
+# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+tail-call,+reference-types,atomics,+simd128,+nontrapping-fptoint < %s | FileCheck %s
 # Check that it converts to .o without errors, but don't check any output:
-# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj -mattr=+tail-call,+reference-types,+atomics,+simd128,+nontrapping-fptoint,+exception-handling -o %t.o < %s
+# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj -mattr=+tail-call,+reference-types,+atomics,+simd128,+nontrapping-fptoint -o %t.o < %s
 
 .functype   something1 () -> ()
 .functype   something2 (i64) -> (i32, f64)
@@ -107,19 +107,14 @@ test0:
     #i32x4.trunc_sat_f32x4_s
     f32.const   1.0
     i32.trunc_f32_s
-    try
     i32.atomic.load 0
     i32.const   0
     memory.atomic.notify 0
     drop
 .LBB0_3:
-    catch       __cpp_exception
-    local.set   0
-    end_try
     i32.const   .L.str
     i32.load8_u .L.str+2
     i32.load16_u .L.str:p2align=0
-    throw 0
 .LBB0_4:
     #i32.trunc_sat_f32_s
     global.get  __stack_pointer
@@ -249,19 +244,14 @@ empty_exnref_table:
 # CHECK-NEXT:      drop
 # CHECK-NEXT:      f32.const   0x1p0
 # CHECK-NEXT:      i32.trunc_f32_s
-# CHECK-NEXT:      try
 # CHECK-NEXT:      i32.atomic.load 0
 # CHECK-NEXT:      i32.const   0
 # CHECK-NEXT:      memory.atomic.notify 0
 # CHECK-NEXT:      drop
 # CHECK-NEXT:  .LBB0_3:
-# CHECK-NEXT:      catch       __cpp_exception
-# CHECK-NEXT:      local.set   0
-# CHECK-NEXT:      end_try
 # CHECK-NEXT:      i32.const   .L.str
 # CHECK-NEXT:      i32.load8_u .L.str+2
 # CHECK-NEXT:      i32.load16_u .L.str:p2align=0
-# CHECK-NEXT:      throw       0
 # CHECK-NEXT:  .LBB0_4:
 # CHECK-NEXT:      global.get  __stack_pointer
 # CHECK-NEXT:      global.set  __stack_pointer
diff --git a/llvm/test/MC/WebAssembly/eh-assembly.s b/llvm/test/MC/WebAssembly/eh-assembly.s
new file mode 100644
index 00000000000000..01d237b7237e47
--- /dev/null
+++ b/llvm/test/MC/WebAssembly/eh-assembly.s
@@ -0,0 +1,65 @@
+# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+exception-handling < %s | FileCheck %s
+# Check that it converts to .o without errors, but don't check any output:
+# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj -mattr=+exception-handling -o %t.o < %s
+
+  .tagtype  __cpp_exception i32
+  .tagtype  __c_longjmp i32
+  .functype  eh_legacy_test () -> ()
+  .functype  foo () -> ()
+
+eh_legacy_test:
+  # try-catch with catch, catch_all, throw, and rethrow
+  try
+    throw     __cpp_exception
+  catch       __cpp_exception
+    drop
+    rethrow 0
+  catch       __c_longjmp
+    drop
+  catch_all
+    rethrow 0
+  end_try
+
+  # try-catch with a return value
+  try i32
+    i32.const 0
+  catch       __cpp_exception
+  end_try
+  drop
+
+  # Nested try-catch with a rethrow
+  try
+    call  foo
+  catch_all
+    try
+    catch_all
+      rethrow 1
+    end_try
+  end_try
+  end_function
+
+# CHECK-LABEL: eh_legacy_test:
+# CHECK-NEXT:    try
+# CHECK-NEXT:    throw           __cpp_exception
+# CHECK-NEXT:    catch           __cpp_exception
+# CHECK-NEXT:    drop
+# CHECK-NEXT:    rethrow         0
+# CHECK-NEXT:    catch           __c_longjmp
+# CHECK-NEXT:    drop
+# CHECK-NEXT:    catch_all
+# CHECK-NEXT:    rethrow         0
+# CHECK-NEXT:    end_try
+# CHECK:         try             i32
+# CHECK-NEXT:    i32.const       0
+# CHECK-NEXT:    catch           __cpp_exception
+# CHECK-NEXT:    end_try
+# CHECK-NEXT:    drop
+# CHECK:         try
+# CHECK-NEXT:    call    foo
+# CHECK-NEXT:    catch_all
+# CHECK-NEXT:    try
+# CHECK-NEXT:    catch_all
+# CHECK-NEXT:    rethrow         1
+# CHECK-NEXT:    end_try
+# CHECK-NEXT:    end_try
+# CHECK-NEXT:    end_function

Create `eh-assembly.s` that contains EH tests and remove EH tests from
`basic-assembly.s`, given that it's easier to manage. (We can have many
different tests, including the legacy EH and the new exnref, and with
nesting for readability)
@aheejin aheejin changed the title [EH] Create separate file for EH assembly tests [WebAssembly] Create separate file for EH assembly tests Sep 13, 2024
eh_legacy_test:
# try-catch with catch, catch_all, throw, and rethrow
try
throw __cpp_exception
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

throw should be preceded with an i32 value but that fails the type checker currently because we don't support throw in the type checker. That will be fixed by a follow-up PR.

@aheejin aheejin merged commit acf90fd into llvm:main Sep 13, 2024
8 checks passed
@aheejin aheejin deleted the eh_assembly_test branch September 13, 2024 19:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend:WebAssembly mc Machine (object) code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants