[PATCH] D146533: [WebAssembly] Fix i64_i64_func_i64_i64_i32 type signature when multivalue feature is enabled

Congcong Cai via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 21 09:03:06 PDT 2023


HerrCai0907 updated this revision to Diff 507005.
HerrCai0907 added a comment.

add testcase


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D146533/new/

https://reviews.llvm.org/D146533

Files:
  llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp
  llvm/test/CodeGen/WebAssembly/multivalue_libcall.ll


Index: llvm/test/CodeGen/WebAssembly/multivalue_libcall.ll
===================================================================
--- llvm/test/CodeGen/WebAssembly/multivalue_libcall.ll
+++ llvm/test/CodeGen/WebAssembly/multivalue_libcall.ll
@@ -61,3 +61,48 @@
   store i128 %div, ptr @c, align 16
   ret void
 }
+
+define i128 @multivalue_lshr(i128 %a, i128 %b) {
+; MULTIVALUE-LABEL: multivalue_lshr:
+; MULTIVALUE:         .functype multivalue_lshr (i64, i64, i64, i64) -> (i64, i64)
+; MULTIVALUE-NEXT:  # %bb.0:
+; MULTIVALUE-NEXT:    local.get 2
+; MULTIVALUE-NEXT:    local.get 3
+; MULTIVALUE-NEXT:    local.get 0
+; MULTIVALUE-NEXT:    i32.wrap_i64
+; MULTIVALUE-NEXT:    call __ashlti3
+; MULTIVALUE-NEXT:    # fallthrough-return
+;
+; NO_MULTIVALUE-LABEL: multivalue_lshr:
+; NO_MULTIVALUE:         .functype multivalue_lshr (i32, i64, i64, i64, i64) -> ()
+; NO_MULTIVALUE-NEXT:    .local i32
+; NO_MULTIVALUE-NEXT:  # %bb.0:
+; NO_MULTIVALUE-NEXT:    global.get __stack_pointer
+; NO_MULTIVALUE-NEXT:    i32.const 16
+; NO_MULTIVALUE-NEXT:    i32.sub
+; NO_MULTIVALUE-NEXT:    local.tee 5
+; NO_MULTIVALUE-NEXT:    global.set __stack_pointer
+; NO_MULTIVALUE-NEXT:    local.get 5
+; NO_MULTIVALUE-NEXT:    local.get 3
+; NO_MULTIVALUE-NEXT:    local.get 4
+; NO_MULTIVALUE-NEXT:    local.get 1
+; NO_MULTIVALUE-NEXT:    i32.wrap_i64
+; NO_MULTIVALUE-NEXT:    call __ashlti3
+; NO_MULTIVALUE-NEXT:    local.get 0
+; NO_MULTIVALUE-NEXT:    local.get 5
+; NO_MULTIVALUE-NEXT:    i32.const 8
+; NO_MULTIVALUE-NEXT:    i32.add
+; NO_MULTIVALUE-NEXT:    i64.load 0
+; NO_MULTIVALUE-NEXT:    i64.store 8
+; NO_MULTIVALUE-NEXT:    local.get 0
+; NO_MULTIVALUE-NEXT:    local.get 5
+; NO_MULTIVALUE-NEXT:    i64.load 0
+; NO_MULTIVALUE-NEXT:    i64.store 0
+; NO_MULTIVALUE-NEXT:    local.get 5
+; NO_MULTIVALUE-NEXT:    i32.const 16
+; NO_MULTIVALUE-NEXT:    i32.add
+; NO_MULTIVALUE-NEXT:    global.set __stack_pointer
+; NO_MULTIVALUE-NEXT:    # fallthrough-return
+  %tmp = shl i128 %b, %a
+  ret i128 %tmp
+}
Index: llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp
===================================================================
--- llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp
+++ llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp
@@ -777,8 +777,6 @@
     if (Subtarget.hasMultivalue()) {
       Rets.push_back(wasm::ValType::I64);
       Rets.push_back(wasm::ValType::I64);
-      Rets.push_back(wasm::ValType::I64);
-      Rets.push_back(wasm::ValType::I64);
     } else {
       Params.push_back(PtrTy);
     }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D146533.507005.patch
Type: text/x-patch
Size: 2585 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230321/10c732b3/attachment.bin>


More information about the llvm-commits mailing list