[llvm] 696fdec - [WebAssembly] Fix i64_i64_func_i64_i64_i32 type signature when multivalue feature is enabled

Congcong Cai via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 21 15:54:18 PDT 2023


Author: Congcong Cai
Date: 2023-03-22T06:53:54+08:00
New Revision: 696fdece49e5ed94328497832d9ceed47993ef02

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

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

Reviewed By: tlively

Differential Revision: https://reviews.llvm.org/D146533

Added: 
    

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

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp
index 20891839686d7..d87355e7d39be 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp
@@ -772,8 +772,6 @@ void llvm::getLibcallSignature(const WebAssemblySubtarget &Subtarget,
     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);
     }

diff  --git a/llvm/test/CodeGen/WebAssembly/multivalue_libcall.ll b/llvm/test/CodeGen/WebAssembly/multivalue_libcall.ll
index 682eb912b87b9..47c5ae7b457dd 100644
--- a/llvm/test/CodeGen/WebAssembly/multivalue_libcall.ll
+++ b/llvm/test/CodeGen/WebAssembly/multivalue_libcall.ll
@@ -96,3 +96,48 @@ define fp128 @multivalue_fsub(fp128 %a, fp128 %b) {
   %sub = fsub fp128 %a, %b
   ret fp128 %sub
 }
+
+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
+}


        


More information about the llvm-commits mailing list