[llvm] ec2a726 - [Webassembly][multivalue] update libcall signature for f128 when multivalue feature enabled

Congcong Cai via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 21 09:16:56 PDT 2023


Author: Congcong Cai
Date: 2023-03-22T00:16:29+08:00
New Revision: ec2a726a63e414f456c9d3a5d6ca22453fedafd5

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

LOG: [Webassembly][multivalue] update libcall signature for f128 when multivalue feature enabled

further update for [D146271](https://reviews.llvm.org/D146271)

Reviewed By: tlively

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

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 9bf2596bf3ff8..20891839686d7 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp
@@ -62,6 +62,8 @@ enum RuntimeLibcallSignature {
   i32_func_i32_i32_iPTR,
   i64_func_i64_i64,
   i64_func_i64_i64_iPTR,
+  i64_i64_func_i32,
+  i64_i64_func_i64,
   i64_i64_func_f32,
   i64_i64_func_f64,
   i16_i16_func_i16_i16,
@@ -71,20 +73,13 @@ enum RuntimeLibcallSignature {
   i64_i64_func_i64_i64_i64_i64_iPTR,
   i64_i64_i64_i64_func_i64_i64_i64_i64,
   i64_i64_func_i64_i64_i32,
+  i64_i64_func_i64_i64_i64_i64_i64_i64,
   iPTR_func_i32,
   iPTR_func_iPTR_i32_iPTR,
   iPTR_func_iPTR_iPTR_iPTR,
   f32_func_f32_f32_f32,
   f64_func_f64_f64_f64,
   func_i64_i64_iPTR_iPTR,
-  func_iPTR_f32,
-  func_iPTR_f64,
-  func_iPTR_i32,
-  func_iPTR_i64,
-  func_iPTR_i64_i64,
-  func_iPTR_i64_i64_i32,
-  func_iPTR_i64_i64_i64_i64,
-  func_iPTR_i64_i64_i64_i64_i64_i64,
   i32_func_i64_i64,
   i32_func_i64_i64_i64_i64,
   iPTR_func_f32,
@@ -156,73 +151,73 @@ struct RuntimeLibcallSignatureTable {
     // All F80 and PPCF128 routines are unsupported.
     Table[RTLIB::ADD_F32] = f32_func_f32_f32;
     Table[RTLIB::ADD_F64] = f64_func_f64_f64;
-    Table[RTLIB::ADD_F128] = func_iPTR_i64_i64_i64_i64;
+    Table[RTLIB::ADD_F128] = i64_i64_func_i64_i64_i64_i64;
     Table[RTLIB::SUB_F32] = f32_func_f32_f32;
     Table[RTLIB::SUB_F64] = f64_func_f64_f64;
-    Table[RTLIB::SUB_F128] = func_iPTR_i64_i64_i64_i64;
+    Table[RTLIB::SUB_F128] = i64_i64_func_i64_i64_i64_i64;
     Table[RTLIB::MUL_F32] = f32_func_f32_f32;
     Table[RTLIB::MUL_F64] = f64_func_f64_f64;
-    Table[RTLIB::MUL_F128] = func_iPTR_i64_i64_i64_i64;
+    Table[RTLIB::MUL_F128] = i64_i64_func_i64_i64_i64_i64;
     Table[RTLIB::DIV_F32] = f32_func_f32_f32;
     Table[RTLIB::DIV_F64] = f64_func_f64_f64;
-    Table[RTLIB::DIV_F128] = func_iPTR_i64_i64_i64_i64;
+    Table[RTLIB::DIV_F128] = i64_i64_func_i64_i64_i64_i64;
     Table[RTLIB::REM_F32] = f32_func_f32_f32;
     Table[RTLIB::REM_F64] = f64_func_f64_f64;
-    Table[RTLIB::REM_F128] = func_iPTR_i64_i64_i64_i64;
+    Table[RTLIB::REM_F128] = i64_i64_func_i64_i64_i64_i64;
     Table[RTLIB::FMA_F32] = f32_func_f32_f32_f32;
     Table[RTLIB::FMA_F64] = f64_func_f64_f64_f64;
-    Table[RTLIB::FMA_F128] = func_iPTR_i64_i64_i64_i64_i64_i64;
+    Table[RTLIB::FMA_F128] = i64_i64_func_i64_i64_i64_i64_i64_i64;
     Table[RTLIB::POWI_F32] = f32_func_f32_i32;
     Table[RTLIB::POWI_F64] = f64_func_f64_i32;
-    Table[RTLIB::POWI_F128] = func_iPTR_i64_i64_i32;
+    Table[RTLIB::POWI_F128] = i64_i64_func_i64_i64_i32;
     Table[RTLIB::SQRT_F32] = f32_func_f32;
     Table[RTLIB::SQRT_F64] = f64_func_f64;
-    Table[RTLIB::SQRT_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::SQRT_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::CBRT_F32] = f32_func_f32;
     Table[RTLIB::CBRT_F64] = f64_func_f64;
-    Table[RTLIB::CBRT_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::CBRT_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::LOG_F32] = f32_func_f32;
     Table[RTLIB::LOG_F64] = f64_func_f64;
-    Table[RTLIB::LOG_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::LOG_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::LOG2_F32] = f32_func_f32;
     Table[RTLIB::LOG2_F64] = f64_func_f64;
-    Table[RTLIB::LOG2_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::LOG2_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::LOG10_F32] = f32_func_f32;
     Table[RTLIB::LOG10_F64] = f64_func_f64;
-    Table[RTLIB::LOG10_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::LOG10_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::EXP_F32] = f32_func_f32;
     Table[RTLIB::EXP_F64] = f64_func_f64;
-    Table[RTLIB::EXP_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::EXP_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::EXP2_F32] = f32_func_f32;
     Table[RTLIB::EXP2_F64] = f64_func_f64;
-    Table[RTLIB::EXP2_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::EXP2_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::SIN_F32] = f32_func_f32;
     Table[RTLIB::SIN_F64] = f64_func_f64;
-    Table[RTLIB::SIN_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::SIN_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::COS_F32] = f32_func_f32;
     Table[RTLIB::COS_F64] = f64_func_f64;
-    Table[RTLIB::COS_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::COS_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::SINCOS_F32] = func_f32_iPTR_iPTR;
     Table[RTLIB::SINCOS_F64] = func_f64_iPTR_iPTR;
     Table[RTLIB::SINCOS_F128] = func_i64_i64_iPTR_iPTR;
     Table[RTLIB::POW_F32] = f32_func_f32_f32;
     Table[RTLIB::POW_F64] = f64_func_f64_f64;
-    Table[RTLIB::POW_F128] = func_iPTR_i64_i64_i64_i64;
+    Table[RTLIB::POW_F128] = i64_i64_func_i64_i64_i64_i64;
     Table[RTLIB::CEIL_F32] = f32_func_f32;
     Table[RTLIB::CEIL_F64] = f64_func_f64;
-    Table[RTLIB::CEIL_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::CEIL_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::TRUNC_F32] = f32_func_f32;
     Table[RTLIB::TRUNC_F64] = f64_func_f64;
-    Table[RTLIB::TRUNC_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::TRUNC_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::RINT_F32] = f32_func_f32;
     Table[RTLIB::RINT_F64] = f64_func_f64;
-    Table[RTLIB::RINT_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::RINT_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::NEARBYINT_F32] = f32_func_f32;
     Table[RTLIB::NEARBYINT_F64] = f64_func_f64;
-    Table[RTLIB::NEARBYINT_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::NEARBYINT_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::ROUND_F32] = f32_func_f32;
     Table[RTLIB::ROUND_F64] = f64_func_f64;
-    Table[RTLIB::ROUND_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::ROUND_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::LROUND_F32] = iPTR_func_f32;
     Table[RTLIB::LROUND_F64] = iPTR_func_f64;
     Table[RTLIB::LROUND_F128] = iPTR_func_i64_i64;
@@ -237,21 +232,21 @@ struct RuntimeLibcallSignatureTable {
     Table[RTLIB::LLRINT_F128] = i64_func_i64_i64;
     Table[RTLIB::FLOOR_F32] = f32_func_f32;
     Table[RTLIB::FLOOR_F64] = f64_func_f64;
-    Table[RTLIB::FLOOR_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::FLOOR_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::COPYSIGN_F32] = f32_func_f32_f32;
     Table[RTLIB::COPYSIGN_F64] = f64_func_f64_f64;
-    Table[RTLIB::COPYSIGN_F128] = func_iPTR_i64_i64_i64_i64;
+    Table[RTLIB::COPYSIGN_F128] = i64_i64_func_i64_i64_i64_i64;
     Table[RTLIB::FMIN_F32] = f32_func_f32_f32;
     Table[RTLIB::FMIN_F64] = f64_func_f64_f64;
-    Table[RTLIB::FMIN_F128] = func_iPTR_i64_i64_i64_i64;
+    Table[RTLIB::FMIN_F128] = i64_i64_func_i64_i64_i64_i64;
     Table[RTLIB::FMAX_F32] = f32_func_f32_f32;
     Table[RTLIB::FMAX_F64] = f64_func_f64_f64;
-    Table[RTLIB::FMAX_F128] = func_iPTR_i64_i64_i64_i64;
+    Table[RTLIB::FMAX_F128] = i64_i64_func_i64_i64_i64_i64;
 
     // Conversion
     // All F80 and PPCF128 routines are unsupported.
-    Table[RTLIB::FPEXT_F64_F128] = func_iPTR_f64;
-    Table[RTLIB::FPEXT_F32_F128] = func_iPTR_f32;
+    Table[RTLIB::FPEXT_F64_F128] = i64_i64_func_f64;
+    Table[RTLIB::FPEXT_F32_F128] = i64_i64_func_f32;
     Table[RTLIB::FPEXT_F32_F64] = f64_func_f32;
     Table[RTLIB::FPEXT_F16_F32] = f32_func_i16;
     Table[RTLIB::FPROUND_F32_F16] = i16_func_f32;
@@ -280,22 +275,22 @@ struct RuntimeLibcallSignatureTable {
     Table[RTLIB::FPTOUINT_F128_I128] = i64_i64_func_i64_i64;
     Table[RTLIB::SINTTOFP_I32_F32] = f32_func_i32;
     Table[RTLIB::SINTTOFP_I32_F64] = f64_func_i32;
-    Table[RTLIB::SINTTOFP_I32_F128] = func_iPTR_i32;
+    Table[RTLIB::SINTTOFP_I32_F128] = i64_i64_func_i32;
     Table[RTLIB::SINTTOFP_I64_F32] = f32_func_i64;
     Table[RTLIB::SINTTOFP_I64_F64] = f64_func_i64;
-    Table[RTLIB::SINTTOFP_I64_F128] = func_iPTR_i64;
+    Table[RTLIB::SINTTOFP_I64_F128] = i64_i64_func_i64;
     Table[RTLIB::SINTTOFP_I128_F32] = f32_func_i64_i64;
     Table[RTLIB::SINTTOFP_I128_F64] = f64_func_i64_i64;
-    Table[RTLIB::SINTTOFP_I128_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::SINTTOFP_I128_F128] = i64_i64_func_i64_i64;
     Table[RTLIB::UINTTOFP_I32_F32] = f32_func_i32;
     Table[RTLIB::UINTTOFP_I32_F64] = f64_func_i64;
-    Table[RTLIB::UINTTOFP_I32_F128] = func_iPTR_i32;
+    Table[RTLIB::UINTTOFP_I32_F128] = i64_i64_func_i32;
     Table[RTLIB::UINTTOFP_I64_F32] = f32_func_i64;
     Table[RTLIB::UINTTOFP_I64_F64] = f64_func_i64;
-    Table[RTLIB::UINTTOFP_I64_F128] = func_iPTR_i64;
+    Table[RTLIB::UINTTOFP_I64_F128] = i64_i64_func_i64;
     Table[RTLIB::UINTTOFP_I128_F32] = f32_func_i64_i64;
     Table[RTLIB::UINTTOFP_I128_F64] = f64_func_i64_i64;
-    Table[RTLIB::UINTTOFP_I128_F128] = func_iPTR_i64_i64;
+    Table[RTLIB::UINTTOFP_I128_F128] = i64_i64_func_i64_i64;
 
     // Comparison
     // ALl F80 and PPCF128 routines are unsupported.
@@ -820,49 +815,6 @@ void llvm::getLibcallSignature(const WebAssemblySubtarget &Subtarget,
     Params.push_back(PtrTy);
     Params.push_back(PtrTy);
     break;
-  case func_iPTR_f32:
-    Params.push_back(PtrTy);
-    Params.push_back(wasm::ValType::F32);
-    break;
-  case func_iPTR_f64:
-    Params.push_back(PtrTy);
-    Params.push_back(wasm::ValType::F64);
-    break;
-  case func_iPTR_i32:
-    Params.push_back(PtrTy);
-    Params.push_back(wasm::ValType::I32);
-    break;
-  case func_iPTR_i64:
-    Params.push_back(PtrTy);
-    Params.push_back(wasm::ValType::I64);
-    break;
-  case func_iPTR_i64_i64:
-    Params.push_back(PtrTy);
-    Params.push_back(wasm::ValType::I64);
-    Params.push_back(wasm::ValType::I64);
-    break;
-  case func_iPTR_i64_i64_i32:
-    Params.push_back(PtrTy);
-    Params.push_back(wasm::ValType::I64);
-    Params.push_back(wasm::ValType::I64);
-    Params.push_back(wasm::ValType::I32);
-    break;
-  case func_iPTR_i64_i64_i64_i64:
-    Params.push_back(PtrTy);
-    Params.push_back(wasm::ValType::I64);
-    Params.push_back(wasm::ValType::I64);
-    Params.push_back(wasm::ValType::I64);
-    Params.push_back(wasm::ValType::I64);
-    break;
-  case func_iPTR_i64_i64_i64_i64_i64_i64:
-    Params.push_back(PtrTy);
-    Params.push_back(wasm::ValType::I64);
-    Params.push_back(wasm::ValType::I64);
-    Params.push_back(wasm::ValType::I64);
-    Params.push_back(wasm::ValType::I64);
-    Params.push_back(wasm::ValType::I64);
-    Params.push_back(wasm::ValType::I64);
-    break;
   case i32_func_i64_i64:
     Rets.push_back(wasm::ValType::I32);
     Params.push_back(wasm::ValType::I64);
@@ -888,6 +840,38 @@ void llvm::getLibcallSignature(const WebAssemblySubtarget &Subtarget,
     Params.push_back(wasm::ValType::I64);
     Params.push_back(wasm::ValType::I64);
     break;
+  case i64_i64_func_i64_i64_i64_i64_i64_i64:
+    if (Subtarget.hasMultivalue()) {
+      Rets.push_back(wasm::ValType::I64);
+      Rets.push_back(wasm::ValType::I64);
+    } else {
+      Params.push_back(PtrTy);
+    }
+    Params.push_back(wasm::ValType::I64);
+    Params.push_back(wasm::ValType::I64);
+    Params.push_back(wasm::ValType::I64);
+    Params.push_back(wasm::ValType::I64);
+    Params.push_back(wasm::ValType::I64);
+    Params.push_back(wasm::ValType::I64);
+    break;
+  case i64_i64_func_i32:
+    if (Subtarget.hasMultivalue()) {
+      Rets.push_back(wasm::ValType::I64);
+      Rets.push_back(wasm::ValType::I64);
+    } else {
+      Params.push_back(PtrTy);
+    }
+    Params.push_back(wasm::ValType::I32);
+    break;
+  case i64_i64_func_i64:
+    if (Subtarget.hasMultivalue()) {
+      Rets.push_back(wasm::ValType::I64);
+      Rets.push_back(wasm::ValType::I64);
+    } else {
+      Params.push_back(PtrTy);
+    }
+    Params.push_back(wasm::ValType::I64);
+    break;
   case unsupported:
     llvm_unreachable("unsupported runtime library signature");
   }

diff  --git a/llvm/test/CodeGen/WebAssembly/multivalue_libcall.ll b/llvm/test/CodeGen/WebAssembly/multivalue_libcall.ll
index 270fdae336678..682eb912b87b9 100644
--- a/llvm/test/CodeGen/WebAssembly/multivalue_libcall.ll
+++ b/llvm/test/CodeGen/WebAssembly/multivalue_libcall.ll
@@ -6,58 +6,93 @@
 
 target triple = "wasm32-unknown-unknown"
 
- at c = global i128 0, align 16
-
-define void @multivalue_sdiv(i128 noundef %a, i128 noundef %b) #0 {
+define i128 @multivalue_sdiv(i128 %a, i128 %b) {
 ; MULTIVALUE-LABEL: multivalue_sdiv:
-; MULTIVALUE:         .functype multivalue_sdiv (i64, i64, i64, i64) -> ()
+; MULTIVALUE:         .functype multivalue_sdiv (i64, i64, i64, i64) -> (i64, i64)
 ; MULTIVALUE-NEXT:  # %bb.0:
 ; MULTIVALUE-NEXT:    local.get 0
 ; MULTIVALUE-NEXT:    local.get 1
 ; MULTIVALUE-NEXT:    local.get 2
 ; MULTIVALUE-NEXT:    local.get 3
 ; MULTIVALUE-NEXT:    call __divti3
-; MULTIVALUE-NEXT:    local.set 2
-; MULTIVALUE-NEXT:    local.set 3
-; MULTIVALUE-NEXT:    i32.const c
-; MULTIVALUE-NEXT:    local.get 2
-; MULTIVALUE-NEXT:    i64.store 8
-; MULTIVALUE-NEXT:    i32.const 0
-; MULTIVALUE-NEXT:    local.get 3
-; MULTIVALUE-NEXT:    i64.store c
 ; MULTIVALUE-NEXT:    # fallthrough-return
 ;
 ; NO_MULTIVALUE-LABEL: multivalue_sdiv:
-; NO_MULTIVALUE:         .functype multivalue_sdiv (i64, i64, i64, i64) -> ()
+; NO_MULTIVALUE:         .functype multivalue_sdiv (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 4
+; NO_MULTIVALUE-NEXT:    local.tee 5
 ; NO_MULTIVALUE-NEXT:    global.set __stack_pointer
+; NO_MULTIVALUE-NEXT:    local.get 5
+; NO_MULTIVALUE-NEXT:    local.get 1
+; NO_MULTIVALUE-NEXT:    local.get 2
+; NO_MULTIVALUE-NEXT:    local.get 3
 ; NO_MULTIVALUE-NEXT:    local.get 4
+; NO_MULTIVALUE-NEXT:    call __divti3
+; 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
+  %div = sdiv i128 %a, %b
+  ret i128 %div
+}
+
+
+define fp128 @multivalue_fsub(fp128 %a, fp128 %b) {
+; MULTIVALUE-LABEL: multivalue_fsub:
+; MULTIVALUE:         .functype multivalue_fsub (i64, i64, i64, i64) -> (i64, i64)
+; MULTIVALUE-NEXT:  # %bb.0:
+; MULTIVALUE-NEXT:    local.get 0
+; MULTIVALUE-NEXT:    local.get 1
+; MULTIVALUE-NEXT:    local.get 2
+; MULTIVALUE-NEXT:    local.get 3
+; MULTIVALUE-NEXT:    call __subtf3
+; MULTIVALUE-NEXT:    # fallthrough-return
+;
+; NO_MULTIVALUE-LABEL: multivalue_fsub:
+; NO_MULTIVALUE:         .functype multivalue_fsub (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 1
 ; NO_MULTIVALUE-NEXT:    local.get 2
 ; NO_MULTIVALUE-NEXT:    local.get 3
-; NO_MULTIVALUE-NEXT:    call __divti3
-; NO_MULTIVALUE-NEXT:    i32.const c
 ; NO_MULTIVALUE-NEXT:    local.get 4
+; NO_MULTIVALUE-NEXT:    call __subtf3
+; 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:    i32.const 0
-; NO_MULTIVALUE-NEXT:    local.get 4
+; NO_MULTIVALUE-NEXT:    local.get 0
+; NO_MULTIVALUE-NEXT:    local.get 5
 ; NO_MULTIVALUE-NEXT:    i64.load 0
-; NO_MULTIVALUE-NEXT:    i64.store c
-; NO_MULTIVALUE-NEXT:    local.get 4
+; 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
-  %div = sdiv i128 %a, %b
-  store i128 %div, ptr @c, align 16
-  ret void
+  %sub = fsub fp128 %a, %b
+  ret fp128 %sub
 }


        


More information about the llvm-commits mailing list