case WebAssembly::ARGUMENT_v4f32_S:
case WebAssembly::ARGUMENT_v2f64:
case WebAssembly::ARGUMENT_v2f64_S:
+ case WebAssembly::ARGUMENT_exnref:
+ case WebAssembly::ARGUMENT_exnref_S:
return true;
default:
return false;
case WebAssembly::TEE_F64_S:
case WebAssembly::TEE_V128:
case WebAssembly::TEE_V128_S:
+ case WebAssembly::TEE_EXNREF:
+ case WebAssembly::TEE_EXNREF_S:
return true;
default:
return false;
--- /dev/null
+# RUN: llc -mtriple=wasm32-unknown-unknown %s -o - -run-pass wasm-argument-move | FileCheck %s
+
+# wasm-argument-move pass moves all ARGUMENT instructions to the top of the
+# entry BB.
+---
+name: argument_i32
+# CHECK-LABEL: argument_i32
+body: |
+ ; CHECK-LABEL: bb.0:
+ ; CHECK-NEXT: %1:i32 = ARGUMENT_i32 0
+ bb.0:
+ %0:i32 = CONST_I32 0, implicit-def $arguments
+ %1:i32 = ARGUMENT_i32 0, implicit $arguments
+ RETURN_VOID implicit-def $arguments
+...
+---
+name: argument_i64
+# CHECK-LABEL: argument_i64
+body: |
+ ; CHECK-LABEL: bb.0:
+ ; CHECK-NEXT: %1:i64 = ARGUMENT_i64 0
+ bb.0:
+ %0:i32 = CONST_I32 0, implicit-def $arguments
+ %1:i64 = ARGUMENT_i64 0, implicit $arguments
+ RETURN_VOID implicit-def $arguments
+...
+---
+name: argument_f32
+# CHECK-LABEL: argument_f32
+body: |
+ ; CHECK-LABEL: bb.0:
+ ; CHECK-NEXT: %1:f32 = ARGUMENT_f32 0
+ bb.0:
+ %0:i32 = CONST_I32 0, implicit-def $arguments
+ %1:f32 = ARGUMENT_f32 0, implicit $arguments
+ RETURN_VOID implicit-def $arguments
+...
+---
+name: argument_f64
+# CHECK-LABEL: argument_f64
+body: |
+ ; CHECK-LABEL: bb.0:
+ ; CHECK-NEXT: %1:f64 = ARGUMENT_f64 0
+ bb.0:
+ %0:i32 = CONST_I32 0, implicit-def $arguments
+ %1:f64 = ARGUMENT_f64 0, implicit $arguments
+ RETURN_VOID implicit-def $arguments
+...
+---
+name: argument_exnref
+# CHECK-LABEL: argument_exnref
+body: |
+ ; CHECK-LABEL: bb.0:
+ ; CHECK-NEXT: %1:exnref = ARGUMENT_exnref 0
+ bb.0:
+ %0:i32 = CONST_I32 0, implicit-def $arguments
+ %1:exnref = ARGUMENT_exnref 0, implicit $arguments
+ RETURN_VOID implicit-def $arguments
+...