138 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc < %s -verify-machineinstrs -mcpu=mvp -mattr=+multivalue -target-abi=experimental-mv | FileCheck %s --check-prefix=MULTIVALUE3; RUN: llc < %s -verify-machineinstrs -mcpu=mvp | FileCheck %s --check-prefix=NO_MULTIVALUE4 5; Test libcall signatures when multivalue is enabled and disabled6 7target triple = "wasm32-unknown-unknown"8 9define i128 @multivalue_sdiv(i128 %a, i128 %b) {10; MULTIVALUE-LABEL: multivalue_sdiv:11; MULTIVALUE: .functype multivalue_sdiv (i64, i64, i64, i64) -> (i64, i64)12; MULTIVALUE-NEXT: # %bb.0:13; MULTIVALUE-NEXT: local.get 014; MULTIVALUE-NEXT: local.get 115; MULTIVALUE-NEXT: local.get 216; MULTIVALUE-NEXT: local.get 317; MULTIVALUE-NEXT: call __divti318; MULTIVALUE-NEXT: # fallthrough-return19;20; NO_MULTIVALUE-LABEL: multivalue_sdiv:21; NO_MULTIVALUE: .functype multivalue_sdiv (i32, i64, i64, i64, i64) -> ()22; NO_MULTIVALUE-NEXT: .local i3223; NO_MULTIVALUE-NEXT: # %bb.0:24; NO_MULTIVALUE-NEXT: global.get __stack_pointer25; NO_MULTIVALUE-NEXT: i32.const 1626; NO_MULTIVALUE-NEXT: i32.sub27; NO_MULTIVALUE-NEXT: local.tee 528; NO_MULTIVALUE-NEXT: global.set __stack_pointer29; NO_MULTIVALUE-NEXT: local.get 530; NO_MULTIVALUE-NEXT: local.get 131; NO_MULTIVALUE-NEXT: local.get 232; NO_MULTIVALUE-NEXT: local.get 333; NO_MULTIVALUE-NEXT: local.get 434; NO_MULTIVALUE-NEXT: call __divti335; NO_MULTIVALUE-NEXT: local.get 036; NO_MULTIVALUE-NEXT: local.get 537; NO_MULTIVALUE-NEXT: i64.load 838; NO_MULTIVALUE-NEXT: i64.store 839; NO_MULTIVALUE-NEXT: local.get 040; NO_MULTIVALUE-NEXT: local.get 541; NO_MULTIVALUE-NEXT: i64.load 042; NO_MULTIVALUE-NEXT: i64.store 043; NO_MULTIVALUE-NEXT: local.get 544; NO_MULTIVALUE-NEXT: i32.const 1645; NO_MULTIVALUE-NEXT: i32.add46; NO_MULTIVALUE-NEXT: global.set __stack_pointer47; NO_MULTIVALUE-NEXT: # fallthrough-return48 %div = sdiv i128 %a, %b49 ret i128 %div50}51 52 53define fp128 @multivalue_fsub(fp128 %a, fp128 %b) {54; MULTIVALUE-LABEL: multivalue_fsub:55; MULTIVALUE: .functype multivalue_fsub (i64, i64, i64, i64) -> (i64, i64)56; MULTIVALUE-NEXT: # %bb.0:57; MULTIVALUE-NEXT: local.get 058; MULTIVALUE-NEXT: local.get 159; MULTIVALUE-NEXT: local.get 260; MULTIVALUE-NEXT: local.get 361; MULTIVALUE-NEXT: call __subtf362; MULTIVALUE-NEXT: # fallthrough-return63;64; NO_MULTIVALUE-LABEL: multivalue_fsub:65; NO_MULTIVALUE: .functype multivalue_fsub (i32, i64, i64, i64, i64) -> ()66; NO_MULTIVALUE-NEXT: .local i3267; NO_MULTIVALUE-NEXT: # %bb.0:68; NO_MULTIVALUE-NEXT: global.get __stack_pointer69; NO_MULTIVALUE-NEXT: i32.const 1670; NO_MULTIVALUE-NEXT: i32.sub71; NO_MULTIVALUE-NEXT: local.tee 572; NO_MULTIVALUE-NEXT: global.set __stack_pointer73; NO_MULTIVALUE-NEXT: local.get 574; NO_MULTIVALUE-NEXT: local.get 175; NO_MULTIVALUE-NEXT: local.get 276; NO_MULTIVALUE-NEXT: local.get 377; NO_MULTIVALUE-NEXT: local.get 478; NO_MULTIVALUE-NEXT: call __subtf379; NO_MULTIVALUE-NEXT: local.get 080; NO_MULTIVALUE-NEXT: local.get 581; NO_MULTIVALUE-NEXT: i64.load 882; NO_MULTIVALUE-NEXT: i64.store 883; NO_MULTIVALUE-NEXT: local.get 084; NO_MULTIVALUE-NEXT: local.get 585; NO_MULTIVALUE-NEXT: i64.load 086; NO_MULTIVALUE-NEXT: i64.store 087; NO_MULTIVALUE-NEXT: local.get 588; NO_MULTIVALUE-NEXT: i32.const 1689; NO_MULTIVALUE-NEXT: i32.add90; NO_MULTIVALUE-NEXT: global.set __stack_pointer91; NO_MULTIVALUE-NEXT: # fallthrough-return92 %sub = fsub fp128 %a, %b93 ret fp128 %sub94}95 96define i128 @multivalue_lshr(i128 %a, i128 %b) {97; MULTIVALUE-LABEL: multivalue_lshr:98; MULTIVALUE: .functype multivalue_lshr (i64, i64, i64, i64) -> (i64, i64)99; MULTIVALUE-NEXT: # %bb.0:100; MULTIVALUE-NEXT: local.get 2101; MULTIVALUE-NEXT: local.get 3102; MULTIVALUE-NEXT: local.get 0103; MULTIVALUE-NEXT: i32.wrap_i64104; MULTIVALUE-NEXT: call __ashlti3105; MULTIVALUE-NEXT: # fallthrough-return106;107; NO_MULTIVALUE-LABEL: multivalue_lshr:108; NO_MULTIVALUE: .functype multivalue_lshr (i32, i64, i64, i64, i64) -> ()109; NO_MULTIVALUE-NEXT: .local i32110; NO_MULTIVALUE-NEXT: # %bb.0:111; NO_MULTIVALUE-NEXT: global.get __stack_pointer112; NO_MULTIVALUE-NEXT: i32.const 16113; NO_MULTIVALUE-NEXT: i32.sub114; NO_MULTIVALUE-NEXT: local.tee 5115; NO_MULTIVALUE-NEXT: global.set __stack_pointer116; NO_MULTIVALUE-NEXT: local.get 5117; NO_MULTIVALUE-NEXT: local.get 3118; NO_MULTIVALUE-NEXT: local.get 4119; NO_MULTIVALUE-NEXT: local.get 1120; NO_MULTIVALUE-NEXT: i32.wrap_i64121; NO_MULTIVALUE-NEXT: call __ashlti3122; NO_MULTIVALUE-NEXT: local.get 0123; NO_MULTIVALUE-NEXT: local.get 5124; NO_MULTIVALUE-NEXT: i64.load 8125; NO_MULTIVALUE-NEXT: i64.store 8126; NO_MULTIVALUE-NEXT: local.get 0127; NO_MULTIVALUE-NEXT: local.get 5128; NO_MULTIVALUE-NEXT: i64.load 0129; NO_MULTIVALUE-NEXT: i64.store 0130; NO_MULTIVALUE-NEXT: local.get 5131; NO_MULTIVALUE-NEXT: i32.const 16132; NO_MULTIVALUE-NEXT: i32.add133; NO_MULTIVALUE-NEXT: global.set __stack_pointer134; NO_MULTIVALUE-NEXT: # fallthrough-return135 %tmp = shl i128 %b, %a136 ret i128 %tmp137}138