[llvm] [WebAssembly] Add ref.test_func handling to AsmParser (PR #139642)
Hood Chatham via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 7 10:52:50 PDT 2025
https://github.com/hoodmane updated https://github.com/llvm/llvm-project/pull/139642
>From ba4e21486455fcee36e5521050562cd9be35e9b4 Mon Sep 17 00:00:00 2001
From: Hood Chatham <roberthoodchatham at gmail.com>
Date: Sat, 10 May 2025 22:01:09 -0400
Subject: [PATCH 1/3] [WebAssembly] Add ref.test_func handling to AsmParser
---
.../AsmParser/WebAssemblyAsmParser.cpp | 2 ++
.../lib/Target/WebAssembly/WebAssemblyInstrRef.td | 8 ++++++++
llvm/test/MC/WebAssembly/reference-types.s | 15 +++++++++++++++
3 files changed, 25 insertions(+)
diff --git a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
index 7ee6a3d8304be..3fad1710c30c4 100644
--- a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
+++ b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
@@ -668,6 +668,8 @@ class WebAssemblyAsmParser final : public MCTargetAsmParser {
if (parseFunctionTableOperand(&FunctionTable))
return true;
ExpectFuncType = true;
+ } else if (Name == "ref.test_func") {
+ ExpectFuncType = true;
}
// Returns true if the next tokens are a catch clause
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrRef.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrRef.td
index 2654a09387fd4..8786d78c8e5af 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrRef.td
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrRef.td
@@ -36,6 +36,14 @@ multiclass REF_I<WebAssemblyRegClass rc, ValueType vt, string ht> {
Requires<[HasReferenceTypes]>;
}
+defm REF_TEST_FUNCREF :
+ I<(outs I32: $res),
+ (ins TypeIndex:$type, FUNCREF: $ref),
+ (outs),
+ (ins TypeIndex:$type),
+ [],
+ "ref.test_func\t$type, $ref", "ref.test_func $type", 0xfb14>;
+
defm "" : REF_I<FUNCREF, funcref, "func">;
defm "" : REF_I<EXTERNREF, externref, "extern">;
defm "" : REF_I<EXNREF, exnref, "exn">;
diff --git a/llvm/test/MC/WebAssembly/reference-types.s b/llvm/test/MC/WebAssembly/reference-types.s
index cfadede8295ef..8f3bca79bb68f 100644
--- a/llvm/test/MC/WebAssembly/reference-types.s
+++ b/llvm/test/MC/WebAssembly/reference-types.s
@@ -27,6 +27,21 @@ ref_null_test:
drop
end_function
+# CHECK-LABEL: ref_test_test:
+# CHECK: ref.null_func # encoding: [0xd0,0x70]
+# CHECK: ref.test () -> () # encoding: [0xfb,0x14,0x80'A',0x80'A',0x80'A',0x80'A',A]
+# CHECK: # fixup A - offset: 2, value: .Ltypeindex0 at TYPEINDEX, kind: fixup_uleb128_i32
+# CHECK: ref.null_func # encoding: [0xd0,0x70]
+# CHECK: ref.test () -> (i32) # encoding: [0xfb,0x14,0x80'A',0x80'A',0x80'A',0x80'A',A]
+# CHECK: # fixup A - offset: 2, value: .Ltypeindex1 at TYPEINDEX, kind: fixup_uleb128_i32
+ref_test_test:
+ .functype ref_test_test () -> (i32, i32)
+ ref.null_func
+ ref.test_func () -> ()
+ ref.null_func
+ ref.test_func () -> (i32)
+ end_function
+
# CHECK-LABEL: ref_sig_test_funcref:
# CHECK-NEXT: .functype ref_sig_test_funcref (funcref) -> (funcref)
ref_sig_test_funcref:
>From 6a4693a238723f78c9126071b0b0be2ae5481af9 Mon Sep 17 00:00:00 2001
From: Hood Chatham <roberthoodchatham at gmail.com>
Date: Mon, 12 May 2025 20:19:55 -0400
Subject: [PATCH 2/3] Rename to ref.test
---
.../lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp | 2 +-
llvm/lib/Target/WebAssembly/WebAssemblyInstrRef.td | 2 +-
llvm/test/MC/WebAssembly/reference-types.s | 4 ++--
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
index 3fad1710c30c4..c1b3936c1dcec 100644
--- a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
+++ b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
@@ -668,7 +668,7 @@ class WebAssemblyAsmParser final : public MCTargetAsmParser {
if (parseFunctionTableOperand(&FunctionTable))
return true;
ExpectFuncType = true;
- } else if (Name == "ref.test_func") {
+ } else if (Name == "ref.test") {
ExpectFuncType = true;
}
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrRef.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrRef.td
index 8786d78c8e5af..40b87a084c687 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrRef.td
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrRef.td
@@ -42,7 +42,7 @@ defm REF_TEST_FUNCREF :
(outs),
(ins TypeIndex:$type),
[],
- "ref.test_func\t$type, $ref", "ref.test_func $type", 0xfb14>;
+ "ref.test\t$type, $ref", "ref.test $type", 0xfb14>;
defm "" : REF_I<FUNCREF, funcref, "func">;
defm "" : REF_I<EXTERNREF, externref, "extern">;
diff --git a/llvm/test/MC/WebAssembly/reference-types.s b/llvm/test/MC/WebAssembly/reference-types.s
index 8f3bca79bb68f..08aafb23969eb 100644
--- a/llvm/test/MC/WebAssembly/reference-types.s
+++ b/llvm/test/MC/WebAssembly/reference-types.s
@@ -37,9 +37,9 @@ ref_null_test:
ref_test_test:
.functype ref_test_test () -> (i32, i32)
ref.null_func
- ref.test_func () -> ()
+ ref.test () -> ()
ref.null_func
- ref.test_func () -> (i32)
+ ref.test () -> (i32)
end_function
# CHECK-LABEL: ref_sig_test_funcref:
>From 06f44359b40e5971029e5c8b9321735ad8cbd0ff Mon Sep 17 00:00:00 2001
From: Hood Chatham <roberthoodchatham at gmail.com>
Date: Mon, 7 Jul 2025 19:52:35 +0200
Subject: [PATCH 3/3] Add comment
---
llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
index c1b3936c1dcec..b1c41bd79fba1 100644
--- a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
+++ b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
@@ -669,6 +669,7 @@ class WebAssemblyAsmParser final : public MCTargetAsmParser {
return true;
ExpectFuncType = true;
} else if (Name == "ref.test") {
+ // When we get support for wasm-gc types, this should become ExpectRefType.
ExpectFuncType = true;
}
More information about the llvm-commits
mailing list