brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.6 KiB · b90c1da Raw
197 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers  -mattr=+fp16,+simd128,+relaxed-simd | FileCheck %s --check-prefix=RELAXED3; RUN: llc < %s -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers  -mattr=+fp16,+simd128,              | FileCheck %s --check-prefix=STRICT4 5target triple = "wasm32"6 7define double @fsub_fmul_contract_f64(double %a, double %b, double %c) {8; RELAXED-LABEL: fsub_fmul_contract_f64:9; RELAXED:         .functype fsub_fmul_contract_f64 (f64, f64, f64) -> (f64)10; RELAXED-NEXT:  # %bb.0:11; RELAXED-NEXT:    f64.mul $push0=, $1, $012; RELAXED-NEXT:    f64.sub $push1=, $2, $pop013; RELAXED-NEXT:    return $pop114;15; STRICT-LABEL: fsub_fmul_contract_f64:16; STRICT:         .functype fsub_fmul_contract_f64 (f64, f64, f64) -> (f64)17; STRICT-NEXT:  # %bb.0:18; STRICT-NEXT:    f64.mul $push0=, $1, $019; STRICT-NEXT:    f64.sub $push1=, $2, $pop020; STRICT-NEXT:    return $pop121  %mul = fmul contract double %b, %a22  %sub = fsub contract double %c, %mul23  ret double %sub24}25 26define <4 x float> @fsub_fmul_contract_4xf32(<4 x float> %a, <4 x float> %b, <4 x float> %c) {27; RELAXED-LABEL: fsub_fmul_contract_4xf32:28; RELAXED:         .functype fsub_fmul_contract_4xf32 (v128, v128, v128) -> (v128)29; RELAXED-NEXT:  # %bb.0:30; RELAXED-NEXT:    f32x4.relaxed_nmadd $push0=, $1, $0, $231; RELAXED-NEXT:    return $pop032;33; STRICT-LABEL: fsub_fmul_contract_4xf32:34; STRICT:         .functype fsub_fmul_contract_4xf32 (v128, v128, v128) -> (v128)35; STRICT-NEXT:  # %bb.0:36; STRICT-NEXT:    f32x4.mul $push0=, $1, $037; STRICT-NEXT:    f32x4.sub $push1=, $2, $pop038; STRICT-NEXT:    return $pop139  %mul = fmul contract <4 x float> %b, %a40  %sub = fsub contract <4 x float> %c, %mul41  ret <4 x float> %sub42}43 44 45define <8 x half> @fsub_fmul_contract_8xf16(<8 x half> %a, <8 x half> %b, <8 x half> %c) {46; RELAXED-LABEL: fsub_fmul_contract_8xf16:47; RELAXED:         .functype fsub_fmul_contract_8xf16 (v128, v128, v128) -> (v128)48; RELAXED-NEXT:  # %bb.0:49; RELAXED-NEXT:    f16x8.nmadd $push0=, $1, $0, $250; RELAXED-NEXT:    return $pop051;52; STRICT-LABEL: fsub_fmul_contract_8xf16:53; STRICT:         .functype fsub_fmul_contract_8xf16 (v128, v128, v128) -> (v128)54; STRICT-NEXT:  # %bb.0:55; STRICT-NEXT:    f16x8.nmadd $push0=, $1, $0, $256; STRICT-NEXT:    return $pop057  %mul = fmul contract <8 x half> %b, %a58  %sub = fsub contract <8 x half> %c, %mul59  ret <8 x half> %sub60}61 62 63define <4 x float> @fsub_fmul_4xf32(<4 x float> %a, <4 x float> %b, <4 x float> %c) {64; RELAXED-LABEL: fsub_fmul_4xf32:65; RELAXED:         .functype fsub_fmul_4xf32 (v128, v128, v128) -> (v128)66; RELAXED-NEXT:  # %bb.0:67; RELAXED-NEXT:    f32x4.mul $push0=, $1, $068; RELAXED-NEXT:    f32x4.sub $push1=, $2, $pop069; RELAXED-NEXT:    return $pop170;71; STRICT-LABEL: fsub_fmul_4xf32:72; STRICT:         .functype fsub_fmul_4xf32 (v128, v128, v128) -> (v128)73; STRICT-NEXT:  # %bb.0:74; STRICT-NEXT:    f32x4.mul $push0=, $1, $075; STRICT-NEXT:    f32x4.sub $push1=, $2, $pop076; STRICT-NEXT:    return $pop177  %mul = fmul <4 x float> %b, %a78  %sub = fsub contract <4 x float> %c, %mul79  ret <4 x float> %sub80}81 82define <8 x float> @fsub_fmul_contract_8xf32(<8 x float> %a, <8 x float> %b, <8 x float> %c) {83; RELAXED-LABEL: fsub_fmul_contract_8xf32:84; RELAXED:         .functype fsub_fmul_contract_8xf32 (i32, v128, v128, v128, v128, v128, v128) -> ()85; RELAXED-NEXT:  # %bb.0:86; RELAXED-NEXT:    f32x4.relaxed_nmadd $push0=, $4, $2, $687; RELAXED-NEXT:    v128.store 16($0), $pop088; RELAXED-NEXT:    f32x4.relaxed_nmadd $push1=, $3, $1, $589; RELAXED-NEXT:    v128.store 0($0), $pop190; RELAXED-NEXT:    return91;92; STRICT-LABEL: fsub_fmul_contract_8xf32:93; STRICT:         .functype fsub_fmul_contract_8xf32 (i32, v128, v128, v128, v128, v128, v128) -> ()94; STRICT-NEXT:  # %bb.0:95; STRICT-NEXT:    f32x4.mul $push0=, $4, $296; STRICT-NEXT:    f32x4.sub $push1=, $6, $pop097; STRICT-NEXT:    v128.store 16($0), $pop198; STRICT-NEXT:    f32x4.mul $push2=, $3, $199; STRICT-NEXT:    f32x4.sub $push3=, $5, $pop2100; STRICT-NEXT:    v128.store 0($0), $pop3101; STRICT-NEXT:    return102  %mul = fmul contract <8 x float> %b, %a103  %sub = fsub contract <8 x float> %c, %mul104  ret <8 x float> %sub105}106 107 108define <2 x double> @fsub_fmul_contract_2xf64(<2 x double> %a, <2 x double> %b, <2 x double> %c) {109; RELAXED-LABEL: fsub_fmul_contract_2xf64:110; RELAXED:         .functype fsub_fmul_contract_2xf64 (v128, v128, v128) -> (v128)111; RELAXED-NEXT:  # %bb.0:112; RELAXED-NEXT:    f64x2.relaxed_nmadd $push0=, $1, $0, $2113; RELAXED-NEXT:    return $pop0114;115; STRICT-LABEL: fsub_fmul_contract_2xf64:116; STRICT:         .functype fsub_fmul_contract_2xf64 (v128, v128, v128) -> (v128)117; STRICT-NEXT:  # %bb.0:118; STRICT-NEXT:    f64x2.mul $push0=, $1, $0119; STRICT-NEXT:    f64x2.sub $push1=, $2, $pop0120; STRICT-NEXT:    return $pop1121  %mul = fmul contract <2 x double> %b, %a122  %sub = fsub contract <2 x double> %c, %mul123  ret <2 x double> %sub124}125 126define float @fsub_fmul_contract_f32(float %a, float %b, float %c) {127; RELAXED-LABEL: fsub_fmul_contract_f32:128; RELAXED:         .functype fsub_fmul_contract_f32 (f32, f32, f32) -> (f32)129; RELAXED-NEXT:  # %bb.0:130; RELAXED-NEXT:    f32.mul $push0=, $1, $0131; RELAXED-NEXT:    f32.sub $push1=, $2, $pop0132; RELAXED-NEXT:    return $pop1133;134; STRICT-LABEL: fsub_fmul_contract_f32:135; STRICT:         .functype fsub_fmul_contract_f32 (f32, f32, f32) -> (f32)136; STRICT-NEXT:  # %bb.0:137; STRICT-NEXT:    f32.mul $push0=, $1, $0138; STRICT-NEXT:    f32.sub $push1=, $2, $pop0139; STRICT-NEXT:    return $pop1140  %mul = fmul contract float %b, %a141  %sub = fsub contract float %c, %mul142  ret float %sub143}144 145define <8 x half> @fmuladd_8xf16(<8 x half> %a, <8 x half> %b, <8 x half> %c) {146; RELAXED-LABEL: fmuladd_8xf16:147; RELAXED:         .functype fmuladd_8xf16 (v128, v128, v128) -> (v128)148; RELAXED-NEXT:  # %bb.0:149; RELAXED-NEXT:    f16x8.nmadd $push0=, $0, $1, $2150; RELAXED-NEXT:    return $pop0151;152; STRICT-LABEL: fmuladd_8xf16:153; STRICT:         .functype fmuladd_8xf16 (v128, v128, v128) -> (v128)154; STRICT-NEXT:  # %bb.0:155; STRICT-NEXT:    f16x8.nmadd $push0=, $0, $1, $2156; STRICT-NEXT:    return $pop0157  %fneg = fneg <8 x half> %a158  %fma = call <8 x half> @llvm.fmuladd(<8 x half> %fneg, <8 x half> %b, <8 x half> %c)159  ret <8 x half> %fma160}161 162define <4 x float> @fmuladd_4xf32(<4 x float> %a, <4 x float> %b, <4 x float> %c) {163; RELAXED-LABEL: fmuladd_4xf32:164; RELAXED:         .functype fmuladd_4xf32 (v128, v128, v128) -> (v128)165; RELAXED-NEXT:  # %bb.0:166; RELAXED-NEXT:    f32x4.relaxed_nmadd $push0=, $0, $1, $2167; RELAXED-NEXT:    return $pop0168;169; STRICT-LABEL: fmuladd_4xf32:170; STRICT:         .functype fmuladd_4xf32 (v128, v128, v128) -> (v128)171; STRICT-NEXT:  # %bb.0:172; STRICT-NEXT:    f32x4.mul $push0=, $0, $1173; STRICT-NEXT:    f32x4.sub $push1=, $2, $pop0174; STRICT-NEXT:    return $pop1175  %fneg = fneg <4 x float> %a176  %fma = call <4 x float> @llvm.fmuladd(<4 x float> %fneg, <4 x float> %b, <4 x float> %c)177  ret <4 x float> %fma178}179 180define <2 x double> @fmuladd_2xf64(<2 x double> %a, <2 x double> %b, <2 x double> %c) {181; RELAXED-LABEL: fmuladd_2xf64:182; RELAXED:         .functype fmuladd_2xf64 (v128, v128, v128) -> (v128)183; RELAXED-NEXT:  # %bb.0:184; RELAXED-NEXT:    f64x2.relaxed_nmadd $push0=, $0, $1, $2185; RELAXED-NEXT:    return $pop0186;187; STRICT-LABEL: fmuladd_2xf64:188; STRICT:         .functype fmuladd_2xf64 (v128, v128, v128) -> (v128)189; STRICT-NEXT:  # %bb.0:190; STRICT-NEXT:    f64x2.mul $push0=, $0, $1191; STRICT-NEXT:    f64x2.sub $push1=, $2, $pop0192; STRICT-NEXT:    return $pop1193  %fneg = fneg <2 x double> %a194  %fma = call <2 x double> @llvm.fmuladd(<2 x double> %fneg, <2 x double> %b, <2 x double> %c)195  ret <2 x double> %fma196}197