[llvm] da9ba89 - [WebAssembly][NFC] Add test case for functype emission

Alex Bradbury via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 21 07:05:06 PDT 2022


Author: Alex Bradbury
Date: 2022-03-21T14:04:32Z
New Revision: da9ba89d484e549c3aab58e254e90dcfd55595c6

URL: https://github.com/llvm/llvm-project/commit/da9ba89d484e549c3aab58e254e90dcfd55595c6
DIFF: https://github.com/llvm/llvm-project/commit/da9ba89d484e549c3aab58e254e90dcfd55595c6.diff

LOG: [WebAssembly][NFC] Add test case for functype emission

This test aims to demonstrate the WebAssembly backend's behaviour around
emission of the .functype directive. It covers defined and declared
functions as well as libcalls.

It currently fails to emit functypes for all defined functions at the
head of the file, causing issues with the type checker
<https://github.com/llvm/llvm-project/issues/54022>. The patch in
<https://reviews.llvm.org/D122134> is a proposal to fix this issue.

Added: 
    llvm/test/CodeGen/WebAssembly/functype-emission.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/WebAssembly/functype-emission.ll b/llvm/test/CodeGen/WebAssembly/functype-emission.ll
new file mode 100644
index 0000000000000..93677dd315023
--- /dev/null
+++ b/llvm/test/CodeGen/WebAssembly/functype-emission.ll
@@ -0,0 +1,38 @@
+; RUN: llc -mtriple=wasm32 -verify-machineinstrs < %s | FileCheck %s
+
+; Demonstrates that appropriate .functype directives are emitted for defined
+; functions, declared functions, and any libcalls.
+
+; FIXME - functype directives should be emitted for defined functions as well,
+; to ensure they pass the type checker (which requires any .functype to be
+; encountered ahead of a call to that target).
+
+; CHECK: .functype __unordtf2 (i64, i64, i64, i64) -> (i32)
+; CHECK: .functype __multi3 (i32, i64, i64, i64, i64) -> ()
+; CHECK: .functype declared_fun (i32, f32, i64) -> (i32)
+
+define i64 @defined_fun_1(double %a) {
+; CHECK-LABEL: defined_fun_1:
+; CHECK:         .functype defined_fun_1 (f64) -> (i64)
+  %1 = call i64 @defined_fun_2(double %a, i32 1)
+  ret i64 %1
+}
+
+define i64 @defined_fun_2(double %a, i32 %b) {
+; CHECK-LABEL: defined_fun_2:
+; CHECK:         .functype defined_fun_2 (f64, i32) -> (i64)
+  %1 = call i64 @defined_fun_1(double %a)
+  ret i64 %1
+}
+
+declare i8 @declared_fun(i32, float, i64)
+
+define i128 @libcalls(fp128 %a, fp128 %b, i128 %c, i128 %d) {
+; CHECK-LABEL: libcalls:
+; CHECK:         .functype libcalls (i32, i64, i64, i64, i64, i64, i64, i64, i64) -> ()
+ %1 = fcmp uno fp128 %a, %b
+ %2 = zext i1 %1 to i128
+ %3 = mul i128 %c, %d
+ %4 = add i128 %2, %3
+ ret i128 %4
+}


        


More information about the llvm-commits mailing list