brintos

brintos / llvm-project-archived public Read only

0
0
Text · 66.3 KiB · 600241a Raw
1522 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52 3; RUN: llc < %s -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers  -mattr=+fp16,+simd128,+relaxed-simd | FileCheck %s --check-prefix=RELAXED4; RUN: llc < %s -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers  -mattr=+fp16,+simd128,              | FileCheck %s --check-prefix=STRICT5; RUN: llc < %s -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers  -mattr=+simd128                     | FileCheck %s --check-prefix=NOFP166; RUN: llc < %s -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers                                      | FileCheck %s --check-prefix=NOSIMD7 8target triple = "wasm32"9 10define half @fadd_fmul_contract_f16(half %a, half %b, half %c) {11; RELAXED-LABEL: fadd_fmul_contract_f16:12; RELAXED:         .functype fadd_fmul_contract_f16 (f32, f32, f32) -> (f32)13; RELAXED-NEXT:  # %bb.0:14; RELAXED-NEXT:    call $push0=, __truncsfhf2, $015; RELAXED-NEXT:    call $push1=, __extendhfsf2, $pop016; RELAXED-NEXT:    call $push2=, __truncsfhf2, $117; RELAXED-NEXT:    call $push3=, __extendhfsf2, $pop218; RELAXED-NEXT:    f32.mul $push4=, $pop1, $pop319; RELAXED-NEXT:    call $push5=, __truncsfhf2, $220; RELAXED-NEXT:    call $push6=, __extendhfsf2, $pop521; RELAXED-NEXT:    f32.add $push7=, $pop4, $pop622; RELAXED-NEXT:    return $pop723;24; STRICT-LABEL: fadd_fmul_contract_f16:25; STRICT:         .functype fadd_fmul_contract_f16 (f32, f32, f32) -> (f32)26; STRICT-NEXT:  # %bb.0:27; STRICT-NEXT:    call $push0=, __truncsfhf2, $028; STRICT-NEXT:    call $push1=, __extendhfsf2, $pop029; STRICT-NEXT:    call $push2=, __truncsfhf2, $130; STRICT-NEXT:    call $push3=, __extendhfsf2, $pop231; STRICT-NEXT:    f32.mul $push4=, $pop1, $pop332; STRICT-NEXT:    call $push5=, __truncsfhf2, $233; STRICT-NEXT:    call $push6=, __extendhfsf2, $pop534; STRICT-NEXT:    f32.add $push7=, $pop4, $pop635; STRICT-NEXT:    return $pop736;37; NOFP16-LABEL: fadd_fmul_contract_f16:38; NOFP16:         .functype fadd_fmul_contract_f16 (f32, f32, f32) -> (f32)39; NOFP16-NEXT:  # %bb.0:40; NOFP16-NEXT:    call $push0=, __truncsfhf2, $041; NOFP16-NEXT:    call $push1=, __extendhfsf2, $pop042; NOFP16-NEXT:    call $push2=, __truncsfhf2, $143; NOFP16-NEXT:    call $push3=, __extendhfsf2, $pop244; NOFP16-NEXT:    f32.mul $push4=, $pop1, $pop345; NOFP16-NEXT:    call $push5=, __truncsfhf2, $246; NOFP16-NEXT:    call $push6=, __extendhfsf2, $pop547; NOFP16-NEXT:    f32.add $push7=, $pop4, $pop648; NOFP16-NEXT:    return $pop749;50; NOSIMD-LABEL: fadd_fmul_contract_f16:51; NOSIMD:         .functype fadd_fmul_contract_f16 (f32, f32, f32) -> (f32)52; NOSIMD-NEXT:  # %bb.0:53; NOSIMD-NEXT:    call $push0=, __truncsfhf2, $054; NOSIMD-NEXT:    call $push1=, __extendhfsf2, $pop055; NOSIMD-NEXT:    call $push2=, __truncsfhf2, $156; NOSIMD-NEXT:    call $push3=, __extendhfsf2, $pop257; NOSIMD-NEXT:    f32.mul $push4=, $pop1, $pop358; NOSIMD-NEXT:    call $push5=, __truncsfhf2, $259; NOSIMD-NEXT:    call $push6=, __extendhfsf2, $pop560; NOSIMD-NEXT:    f32.add $push7=, $pop4, $pop661; NOSIMD-NEXT:    return $pop762  %mul = fmul contract half %b, %a63  %add = fadd contract half %mul, %c64  ret half %add65}66 67define half @fmuladd_contract_f16(half %a, half %b, half %c) {68; RELAXED-LABEL: fmuladd_contract_f16:69; RELAXED:         .functype fmuladd_contract_f16 (f32, f32, f32) -> (f32)70; RELAXED-NEXT:  # %bb.0:71; RELAXED-NEXT:    call $push0=, __truncsfhf2, $172; RELAXED-NEXT:    call $push1=, __extendhfsf2, $pop073; RELAXED-NEXT:    call $push2=, __truncsfhf2, $074; RELAXED-NEXT:    call $push3=, __extendhfsf2, $pop275; RELAXED-NEXT:    f32.mul $push4=, $pop1, $pop376; RELAXED-NEXT:    call $push5=, __truncsfhf2, $277; RELAXED-NEXT:    call $push6=, __extendhfsf2, $pop578; RELAXED-NEXT:    f32.add $push7=, $pop4, $pop679; RELAXED-NEXT:    return $pop780;81; STRICT-LABEL: fmuladd_contract_f16:82; STRICT:         .functype fmuladd_contract_f16 (f32, f32, f32) -> (f32)83; STRICT-NEXT:  # %bb.0:84; STRICT-NEXT:    call $push0=, __truncsfhf2, $185; STRICT-NEXT:    call $push1=, __extendhfsf2, $pop086; STRICT-NEXT:    call $push2=, __truncsfhf2, $087; STRICT-NEXT:    call $push3=, __extendhfsf2, $pop288; STRICT-NEXT:    f32.mul $push4=, $pop1, $pop389; STRICT-NEXT:    call $push5=, __truncsfhf2, $290; STRICT-NEXT:    call $push6=, __extendhfsf2, $pop591; STRICT-NEXT:    f32.add $push7=, $pop4, $pop692; STRICT-NEXT:    return $pop793;94; NOFP16-LABEL: fmuladd_contract_f16:95; NOFP16:         .functype fmuladd_contract_f16 (f32, f32, f32) -> (f32)96; NOFP16-NEXT:  # %bb.0:97; NOFP16-NEXT:    call $push0=, __truncsfhf2, $198; NOFP16-NEXT:    call $push1=, __extendhfsf2, $pop099; NOFP16-NEXT:    call $push2=, __truncsfhf2, $0100; NOFP16-NEXT:    call $push3=, __extendhfsf2, $pop2101; NOFP16-NEXT:    f32.mul $push4=, $pop1, $pop3102; NOFP16-NEXT:    call $push5=, __truncsfhf2, $2103; NOFP16-NEXT:    call $push6=, __extendhfsf2, $pop5104; NOFP16-NEXT:    f32.add $push7=, $pop4, $pop6105; NOFP16-NEXT:    return $pop7106;107; NOSIMD-LABEL: fmuladd_contract_f16:108; NOSIMD:         .functype fmuladd_contract_f16 (f32, f32, f32) -> (f32)109; NOSIMD-NEXT:  # %bb.0:110; NOSIMD-NEXT:    call $push0=, __truncsfhf2, $1111; NOSIMD-NEXT:    call $push1=, __extendhfsf2, $pop0112; NOSIMD-NEXT:    call $push2=, __truncsfhf2, $0113; NOSIMD-NEXT:    call $push3=, __extendhfsf2, $pop2114; NOSIMD-NEXT:    f32.mul $push4=, $pop1, $pop3115; NOSIMD-NEXT:    call $push5=, __truncsfhf2, $2116; NOSIMD-NEXT:    call $push6=, __extendhfsf2, $pop5117; NOSIMD-NEXT:    f32.add $push7=, $pop4, $pop6118; NOSIMD-NEXT:    return $pop7119  %fma = call contract half @llvm.fmuladd(half %a, half %b, half %c)120  ret half %fma121}122 123define half @fmuladd_f16(half %a, half %b, half %c) {124; RELAXED-LABEL: fmuladd_f16:125; RELAXED:         .functype fmuladd_f16 (f32, f32, f32) -> (f32)126; RELAXED-NEXT:  # %bb.0:127; RELAXED-NEXT:    call $push0=, __truncsfhf2, $1128; RELAXED-NEXT:    call $push1=, __extendhfsf2, $pop0129; RELAXED-NEXT:    call $push2=, __truncsfhf2, $0130; RELAXED-NEXT:    call $push3=, __extendhfsf2, $pop2131; RELAXED-NEXT:    f32.mul $push4=, $pop1, $pop3132; RELAXED-NEXT:    call $push5=, __truncsfhf2, $2133; RELAXED-NEXT:    call $push6=, __extendhfsf2, $pop5134; RELAXED-NEXT:    f32.add $push7=, $pop4, $pop6135; RELAXED-NEXT:    return $pop7136;137; STRICT-LABEL: fmuladd_f16:138; STRICT:         .functype fmuladd_f16 (f32, f32, f32) -> (f32)139; STRICT-NEXT:  # %bb.0:140; STRICT-NEXT:    call $push0=, __truncsfhf2, $1141; STRICT-NEXT:    call $push1=, __extendhfsf2, $pop0142; STRICT-NEXT:    call $push2=, __truncsfhf2, $0143; STRICT-NEXT:    call $push3=, __extendhfsf2, $pop2144; STRICT-NEXT:    f32.mul $push4=, $pop1, $pop3145; STRICT-NEXT:    call $push5=, __truncsfhf2, $2146; STRICT-NEXT:    call $push6=, __extendhfsf2, $pop5147; STRICT-NEXT:    f32.add $push7=, $pop4, $pop6148; STRICT-NEXT:    return $pop7149;150; NOFP16-LABEL: fmuladd_f16:151; NOFP16:         .functype fmuladd_f16 (f32, f32, f32) -> (f32)152; NOFP16-NEXT:  # %bb.0:153; NOFP16-NEXT:    call $push0=, __truncsfhf2, $1154; NOFP16-NEXT:    call $push1=, __extendhfsf2, $pop0155; NOFP16-NEXT:    call $push2=, __truncsfhf2, $0156; NOFP16-NEXT:    call $push3=, __extendhfsf2, $pop2157; NOFP16-NEXT:    f32.mul $push4=, $pop1, $pop3158; NOFP16-NEXT:    call $push5=, __truncsfhf2, $2159; NOFP16-NEXT:    call $push6=, __extendhfsf2, $pop5160; NOFP16-NEXT:    f32.add $push7=, $pop4, $pop6161; NOFP16-NEXT:    return $pop7162;163; NOSIMD-LABEL: fmuladd_f16:164; NOSIMD:         .functype fmuladd_f16 (f32, f32, f32) -> (f32)165; NOSIMD-NEXT:  # %bb.0:166; NOSIMD-NEXT:    call $push0=, __truncsfhf2, $1167; NOSIMD-NEXT:    call $push1=, __extendhfsf2, $pop0168; NOSIMD-NEXT:    call $push2=, __truncsfhf2, $0169; NOSIMD-NEXT:    call $push3=, __extendhfsf2, $pop2170; NOSIMD-NEXT:    f32.mul $push4=, $pop1, $pop3171; NOSIMD-NEXT:    call $push5=, __truncsfhf2, $2172; NOSIMD-NEXT:    call $push6=, __extendhfsf2, $pop5173; NOSIMD-NEXT:    f32.add $push7=, $pop4, $pop6174; NOSIMD-NEXT:    return $pop7175  %fma = call half @llvm.fmuladd(half %a, half %b, half %c)176  ret half %fma177}178 179 180define float @fadd_fmul_contract_f32(float %a, float %b, float %c) {181; RELAXED-LABEL: fadd_fmul_contract_f32:182; RELAXED:         .functype fadd_fmul_contract_f32 (f32, f32, f32) -> (f32)183; RELAXED-NEXT:  # %bb.0:184; RELAXED-NEXT:    f32.mul $push0=, $1, $0185; RELAXED-NEXT:    f32.add $push1=, $pop0, $2186; RELAXED-NEXT:    return $pop1187;188; STRICT-LABEL: fadd_fmul_contract_f32:189; STRICT:         .functype fadd_fmul_contract_f32 (f32, f32, f32) -> (f32)190; STRICT-NEXT:  # %bb.0:191; STRICT-NEXT:    f32.mul $push0=, $1, $0192; STRICT-NEXT:    f32.add $push1=, $pop0, $2193; STRICT-NEXT:    return $pop1194;195; NOFP16-LABEL: fadd_fmul_contract_f32:196; NOFP16:         .functype fadd_fmul_contract_f32 (f32, f32, f32) -> (f32)197; NOFP16-NEXT:  # %bb.0:198; NOFP16-NEXT:    f32.mul $push0=, $1, $0199; NOFP16-NEXT:    f32.add $push1=, $pop0, $2200; NOFP16-NEXT:    return $pop1201;202; NOSIMD-LABEL: fadd_fmul_contract_f32:203; NOSIMD:         .functype fadd_fmul_contract_f32 (f32, f32, f32) -> (f32)204; NOSIMD-NEXT:  # %bb.0:205; NOSIMD-NEXT:    f32.mul $push0=, $1, $0206; NOSIMD-NEXT:    f32.add $push1=, $pop0, $2207; NOSIMD-NEXT:    return $pop1208  %mul = fmul contract float %b, %a209  %add = fadd contract float %mul, %c210  ret float %add211}212 213define float @fmuladd_contract_f32(float %a, float %b, float %c) {214; RELAXED-LABEL: fmuladd_contract_f32:215; RELAXED:         .functype fmuladd_contract_f32 (f32, f32, f32) -> (f32)216; RELAXED-NEXT:  # %bb.0:217; RELAXED-NEXT:    f32.mul $push0=, $0, $1218; RELAXED-NEXT:    f32.add $push1=, $pop0, $2219; RELAXED-NEXT:    return $pop1220;221; STRICT-LABEL: fmuladd_contract_f32:222; STRICT:         .functype fmuladd_contract_f32 (f32, f32, f32) -> (f32)223; STRICT-NEXT:  # %bb.0:224; STRICT-NEXT:    f32.mul $push0=, $0, $1225; STRICT-NEXT:    f32.add $push1=, $pop0, $2226; STRICT-NEXT:    return $pop1227;228; NOFP16-LABEL: fmuladd_contract_f32:229; NOFP16:         .functype fmuladd_contract_f32 (f32, f32, f32) -> (f32)230; NOFP16-NEXT:  # %bb.0:231; NOFP16-NEXT:    f32.mul $push0=, $0, $1232; NOFP16-NEXT:    f32.add $push1=, $pop0, $2233; NOFP16-NEXT:    return $pop1234;235; NOSIMD-LABEL: fmuladd_contract_f32:236; NOSIMD:         .functype fmuladd_contract_f32 (f32, f32, f32) -> (f32)237; NOSIMD-NEXT:  # %bb.0:238; NOSIMD-NEXT:    f32.mul $push0=, $0, $1239; NOSIMD-NEXT:    f32.add $push1=, $pop0, $2240; NOSIMD-NEXT:    return $pop1241  %fma = call contract float @llvm.fmuladd(float %a, float %b, float %c)242  ret float %fma243}244 245define float @fmuladd_f32(float %a, float %b, float %c) {246; RELAXED-LABEL: fmuladd_f32:247; RELAXED:         .functype fmuladd_f32 (f32, f32, f32) -> (f32)248; RELAXED-NEXT:  # %bb.0:249; RELAXED-NEXT:    f32.mul $push0=, $0, $1250; RELAXED-NEXT:    f32.add $push1=, $pop0, $2251; RELAXED-NEXT:    return $pop1252;253; STRICT-LABEL: fmuladd_f32:254; STRICT:         .functype fmuladd_f32 (f32, f32, f32) -> (f32)255; STRICT-NEXT:  # %bb.0:256; STRICT-NEXT:    f32.mul $push0=, $0, $1257; STRICT-NEXT:    f32.add $push1=, $pop0, $2258; STRICT-NEXT:    return $pop1259;260; NOFP16-LABEL: fmuladd_f32:261; NOFP16:         .functype fmuladd_f32 (f32, f32, f32) -> (f32)262; NOFP16-NEXT:  # %bb.0:263; NOFP16-NEXT:    f32.mul $push0=, $0, $1264; NOFP16-NEXT:    f32.add $push1=, $pop0, $2265; NOFP16-NEXT:    return $pop1266;267; NOSIMD-LABEL: fmuladd_f32:268; NOSIMD:         .functype fmuladd_f32 (f32, f32, f32) -> (f32)269; NOSIMD-NEXT:  # %bb.0:270; NOSIMD-NEXT:    f32.mul $push0=, $0, $1271; NOSIMD-NEXT:    f32.add $push1=, $pop0, $2272; NOSIMD-NEXT:    return $pop1273  %fma = call float @llvm.fmuladd(float %a, float %b, float %c)274  ret float %fma275}276 277define double @fadd_fmul_contract_f64(double %a, double %b, double %c) {278; RELAXED-LABEL: fadd_fmul_contract_f64:279; RELAXED:         .functype fadd_fmul_contract_f64 (f64, f64, f64) -> (f64)280; RELAXED-NEXT:  # %bb.0:281; RELAXED-NEXT:    f64.mul $push0=, $1, $0282; RELAXED-NEXT:    f64.add $push1=, $pop0, $2283; RELAXED-NEXT:    return $pop1284;285; STRICT-LABEL: fadd_fmul_contract_f64:286; STRICT:         .functype fadd_fmul_contract_f64 (f64, f64, f64) -> (f64)287; STRICT-NEXT:  # %bb.0:288; STRICT-NEXT:    f64.mul $push0=, $1, $0289; STRICT-NEXT:    f64.add $push1=, $pop0, $2290; STRICT-NEXT:    return $pop1291;292; NOFP16-LABEL: fadd_fmul_contract_f64:293; NOFP16:         .functype fadd_fmul_contract_f64 (f64, f64, f64) -> (f64)294; NOFP16-NEXT:  # %bb.0:295; NOFP16-NEXT:    f64.mul $push0=, $1, $0296; NOFP16-NEXT:    f64.add $push1=, $pop0, $2297; NOFP16-NEXT:    return $pop1298;299; NOSIMD-LABEL: fadd_fmul_contract_f64:300; NOSIMD:         .functype fadd_fmul_contract_f64 (f64, f64, f64) -> (f64)301; NOSIMD-NEXT:  # %bb.0:302; NOSIMD-NEXT:    f64.mul $push0=, $1, $0303; NOSIMD-NEXT:    f64.add $push1=, $pop0, $2304; NOSIMD-NEXT:    return $pop1305  %mul = fmul contract double %b, %a306  %add = fadd contract double %mul, %c307  ret double %add308}309 310define double @fmuladd_f64(double %a, double %b, double %c) {311; RELAXED-LABEL: fmuladd_f64:312; RELAXED:         .functype fmuladd_f64 (f64, f64, f64) -> (f64)313; RELAXED-NEXT:  # %bb.0:314; RELAXED-NEXT:    f64.mul $push0=, $0, $1315; RELAXED-NEXT:    f64.add $push1=, $pop0, $2316; RELAXED-NEXT:    return $pop1317;318; STRICT-LABEL: fmuladd_f64:319; STRICT:         .functype fmuladd_f64 (f64, f64, f64) -> (f64)320; STRICT-NEXT:  # %bb.0:321; STRICT-NEXT:    f64.mul $push0=, $0, $1322; STRICT-NEXT:    f64.add $push1=, $pop0, $2323; STRICT-NEXT:    return $pop1324;325; NOFP16-LABEL: fmuladd_f64:326; NOFP16:         .functype fmuladd_f64 (f64, f64, f64) -> (f64)327; NOFP16-NEXT:  # %bb.0:328; NOFP16-NEXT:    f64.mul $push0=, $0, $1329; NOFP16-NEXT:    f64.add $push1=, $pop0, $2330; NOFP16-NEXT:    return $pop1331;332; NOSIMD-LABEL: fmuladd_f64:333; NOSIMD:         .functype fmuladd_f64 (f64, f64, f64) -> (f64)334; NOSIMD-NEXT:  # %bb.0:335; NOSIMD-NEXT:    f64.mul $push0=, $0, $1336; NOSIMD-NEXT:    f64.add $push1=, $pop0, $2337; NOSIMD-NEXT:    return $pop1338  %fma = call double @llvm.fmuladd(double %a, double %b, double %c)339  ret double %fma340}341 342define double @fmuladd_contract_f64(double %a, double %b, double %c) {343; RELAXED-LABEL: fmuladd_contract_f64:344; RELAXED:         .functype fmuladd_contract_f64 (f64, f64, f64) -> (f64)345; RELAXED-NEXT:  # %bb.0:346; RELAXED-NEXT:    f64.mul $push0=, $0, $1347; RELAXED-NEXT:    f64.add $push1=, $pop0, $2348; RELAXED-NEXT:    return $pop1349;350; STRICT-LABEL: fmuladd_contract_f64:351; STRICT:         .functype fmuladd_contract_f64 (f64, f64, f64) -> (f64)352; STRICT-NEXT:  # %bb.0:353; STRICT-NEXT:    f64.mul $push0=, $0, $1354; STRICT-NEXT:    f64.add $push1=, $pop0, $2355; STRICT-NEXT:    return $pop1356;357; NOFP16-LABEL: fmuladd_contract_f64:358; NOFP16:         .functype fmuladd_contract_f64 (f64, f64, f64) -> (f64)359; NOFP16-NEXT:  # %bb.0:360; NOFP16-NEXT:    f64.mul $push0=, $0, $1361; NOFP16-NEXT:    f64.add $push1=, $pop0, $2362; NOFP16-NEXT:    return $pop1363;364; NOSIMD-LABEL: fmuladd_contract_f64:365; NOSIMD:         .functype fmuladd_contract_f64 (f64, f64, f64) -> (f64)366; NOSIMD-NEXT:  # %bb.0:367; NOSIMD-NEXT:    f64.mul $push0=, $0, $1368; NOSIMD-NEXT:    f64.add $push1=, $pop0, $2369; NOSIMD-NEXT:    return $pop1370  %fma = call contract double @llvm.fmuladd(double %a, double %b, double %c)371  ret double %fma372}373 374define <4 x float> @fadd_fmul_contract_4xf32(<4 x float> %a, <4 x float> %b, <4 x float> %c) {375; RELAXED-LABEL: fadd_fmul_contract_4xf32:376; RELAXED:         .functype fadd_fmul_contract_4xf32 (v128, v128, v128) -> (v128)377; RELAXED-NEXT:  # %bb.0:378; RELAXED-NEXT:    f32x4.relaxed_madd $push0=, $1, $0, $2379; RELAXED-NEXT:    return $pop0380;381; STRICT-LABEL: fadd_fmul_contract_4xf32:382; STRICT:         .functype fadd_fmul_contract_4xf32 (v128, v128, v128) -> (v128)383; STRICT-NEXT:  # %bb.0:384; STRICT-NEXT:    f32x4.mul $push0=, $1, $0385; STRICT-NEXT:    f32x4.add $push1=, $pop0, $2386; STRICT-NEXT:    return $pop1387;388; NOFP16-LABEL: fadd_fmul_contract_4xf32:389; NOFP16:         .functype fadd_fmul_contract_4xf32 (v128, v128, v128) -> (v128)390; NOFP16-NEXT:  # %bb.0:391; NOFP16-NEXT:    f32x4.mul $push0=, $1, $0392; NOFP16-NEXT:    f32x4.add $push1=, $pop0, $2393; NOFP16-NEXT:    return $pop1394;395; NOSIMD-LABEL: fadd_fmul_contract_4xf32:396; NOSIMD:         .functype fadd_fmul_contract_4xf32 (i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()397; NOSIMD-NEXT:  # %bb.0:398; NOSIMD-NEXT:    f32.mul $push0=, $8, $4399; NOSIMD-NEXT:    f32.add $push1=, $pop0, $12400; NOSIMD-NEXT:    f32.store 12($0), $pop1401; NOSIMD-NEXT:    f32.mul $push2=, $7, $3402; NOSIMD-NEXT:    f32.add $push3=, $pop2, $11403; NOSIMD-NEXT:    f32.store 8($0), $pop3404; NOSIMD-NEXT:    f32.mul $push4=, $6, $2405; NOSIMD-NEXT:    f32.add $push5=, $pop4, $10406; NOSIMD-NEXT:    f32.store 4($0), $pop5407; NOSIMD-NEXT:    f32.mul $push6=, $5, $1408; NOSIMD-NEXT:    f32.add $push7=, $pop6, $9409; NOSIMD-NEXT:    f32.store 0($0), $pop7410; NOSIMD-NEXT:    return411  %mul = fmul contract <4 x float> %b, %a412  %add = fadd contract <4 x float> %mul, %c413  ret <4 x float> %add414}415 416define <8 x half> @fadd_fmul_contract_8xf16(<8 x half> %a, <8 x half> %b, <8 x half> %c) {417; RELAXED-LABEL: fadd_fmul_contract_8xf16:418; RELAXED:         .functype fadd_fmul_contract_8xf16 (v128, v128, v128) -> (v128)419; RELAXED-NEXT:  # %bb.0:420; RELAXED-NEXT:    f16x8.madd $push0=, $1, $0, $2421; RELAXED-NEXT:    return $pop0422;423; STRICT-LABEL: fadd_fmul_contract_8xf16:424; STRICT:         .functype fadd_fmul_contract_8xf16 (v128, v128, v128) -> (v128)425; STRICT-NEXT:  # %bb.0:426; STRICT-NEXT:    f16x8.madd $push0=, $1, $0, $2427; STRICT-NEXT:    return $pop0428;429; NOFP16-LABEL: fadd_fmul_contract_8xf16:430; NOFP16:         .functype fadd_fmul_contract_8xf16 (i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()431; NOFP16-NEXT:  # %bb.0:432; NOFP16-NEXT:    call $push0=, __truncsfhf2, $8433; NOFP16-NEXT:    call $push1=, __extendhfsf2, $pop0434; NOFP16-NEXT:    call $push2=, __truncsfhf2, $16435; NOFP16-NEXT:    call $push3=, __extendhfsf2, $pop2436; NOFP16-NEXT:    f32.mul $push4=, $pop1, $pop3437; NOFP16-NEXT:    call $push5=, __truncsfhf2, $24438; NOFP16-NEXT:    call $push6=, __extendhfsf2, $pop5439; NOFP16-NEXT:    f32.add $push7=, $pop4, $pop6440; NOFP16-NEXT:    call $push8=, __truncsfhf2, $pop7441; NOFP16-NEXT:    i32.store16 14($0), $pop8442; NOFP16-NEXT:    call $push9=, __truncsfhf2, $7443; NOFP16-NEXT:    call $push10=, __extendhfsf2, $pop9444; NOFP16-NEXT:    call $push11=, __truncsfhf2, $15445; NOFP16-NEXT:    call $push12=, __extendhfsf2, $pop11446; NOFP16-NEXT:    f32.mul $push13=, $pop10, $pop12447; NOFP16-NEXT:    call $push14=, __truncsfhf2, $23448; NOFP16-NEXT:    call $push15=, __extendhfsf2, $pop14449; NOFP16-NEXT:    f32.add $push16=, $pop13, $pop15450; NOFP16-NEXT:    call $push17=, __truncsfhf2, $pop16451; NOFP16-NEXT:    i32.store16 12($0), $pop17452; NOFP16-NEXT:    call $push18=, __truncsfhf2, $6453; NOFP16-NEXT:    call $push19=, __extendhfsf2, $pop18454; NOFP16-NEXT:    call $push20=, __truncsfhf2, $14455; NOFP16-NEXT:    call $push21=, __extendhfsf2, $pop20456; NOFP16-NEXT:    f32.mul $push22=, $pop19, $pop21457; NOFP16-NEXT:    call $push23=, __truncsfhf2, $22458; NOFP16-NEXT:    call $push24=, __extendhfsf2, $pop23459; NOFP16-NEXT:    f32.add $push25=, $pop22, $pop24460; NOFP16-NEXT:    call $push26=, __truncsfhf2, $pop25461; NOFP16-NEXT:    i32.store16 10($0), $pop26462; NOFP16-NEXT:    call $push27=, __truncsfhf2, $5463; NOFP16-NEXT:    call $push28=, __extendhfsf2, $pop27464; NOFP16-NEXT:    call $push29=, __truncsfhf2, $13465; NOFP16-NEXT:    call $push30=, __extendhfsf2, $pop29466; NOFP16-NEXT:    f32.mul $push31=, $pop28, $pop30467; NOFP16-NEXT:    call $push32=, __truncsfhf2, $21468; NOFP16-NEXT:    call $push33=, __extendhfsf2, $pop32469; NOFP16-NEXT:    f32.add $push34=, $pop31, $pop33470; NOFP16-NEXT:    call $push35=, __truncsfhf2, $pop34471; NOFP16-NEXT:    i32.store16 8($0), $pop35472; NOFP16-NEXT:    call $push36=, __truncsfhf2, $4473; NOFP16-NEXT:    call $push37=, __extendhfsf2, $pop36474; NOFP16-NEXT:    call $push38=, __truncsfhf2, $12475; NOFP16-NEXT:    call $push39=, __extendhfsf2, $pop38476; NOFP16-NEXT:    f32.mul $push40=, $pop37, $pop39477; NOFP16-NEXT:    call $push41=, __truncsfhf2, $20478; NOFP16-NEXT:    call $push42=, __extendhfsf2, $pop41479; NOFP16-NEXT:    f32.add $push43=, $pop40, $pop42480; NOFP16-NEXT:    call $push44=, __truncsfhf2, $pop43481; NOFP16-NEXT:    i32.store16 6($0), $pop44482; NOFP16-NEXT:    call $push45=, __truncsfhf2, $3483; NOFP16-NEXT:    call $push46=, __extendhfsf2, $pop45484; NOFP16-NEXT:    call $push47=, __truncsfhf2, $11485; NOFP16-NEXT:    call $push48=, __extendhfsf2, $pop47486; NOFP16-NEXT:    f32.mul $push49=, $pop46, $pop48487; NOFP16-NEXT:    call $push50=, __truncsfhf2, $19488; NOFP16-NEXT:    call $push51=, __extendhfsf2, $pop50489; NOFP16-NEXT:    f32.add $push52=, $pop49, $pop51490; NOFP16-NEXT:    call $push53=, __truncsfhf2, $pop52491; NOFP16-NEXT:    i32.store16 4($0), $pop53492; NOFP16-NEXT:    call $push54=, __truncsfhf2, $2493; NOFP16-NEXT:    call $push55=, __extendhfsf2, $pop54494; NOFP16-NEXT:    call $push56=, __truncsfhf2, $10495; NOFP16-NEXT:    call $push57=, __extendhfsf2, $pop56496; NOFP16-NEXT:    f32.mul $push58=, $pop55, $pop57497; NOFP16-NEXT:    call $push59=, __truncsfhf2, $18498; NOFP16-NEXT:    call $push60=, __extendhfsf2, $pop59499; NOFP16-NEXT:    f32.add $push61=, $pop58, $pop60500; NOFP16-NEXT:    call $push62=, __truncsfhf2, $pop61501; NOFP16-NEXT:    i32.store16 2($0), $pop62502; NOFP16-NEXT:    call $push63=, __truncsfhf2, $1503; NOFP16-NEXT:    call $push64=, __extendhfsf2, $pop63504; NOFP16-NEXT:    call $push65=, __truncsfhf2, $9505; NOFP16-NEXT:    call $push66=, __extendhfsf2, $pop65506; NOFP16-NEXT:    f32.mul $push67=, $pop64, $pop66507; NOFP16-NEXT:    call $push68=, __truncsfhf2, $17508; NOFP16-NEXT:    call $push69=, __extendhfsf2, $pop68509; NOFP16-NEXT:    f32.add $push70=, $pop67, $pop69510; NOFP16-NEXT:    call $push71=, __truncsfhf2, $pop70511; NOFP16-NEXT:    i32.store16 0($0), $pop71512; NOFP16-NEXT:    return513;514; NOSIMD-LABEL: fadd_fmul_contract_8xf16:515; NOSIMD:         .functype fadd_fmul_contract_8xf16 (i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()516; NOSIMD-NEXT:  # %bb.0:517; NOSIMD-NEXT:    call $push0=, __truncsfhf2, $8518; NOSIMD-NEXT:    call $push1=, __extendhfsf2, $pop0519; NOSIMD-NEXT:    call $push2=, __truncsfhf2, $16520; NOSIMD-NEXT:    call $push3=, __extendhfsf2, $pop2521; NOSIMD-NEXT:    f32.mul $push4=, $pop1, $pop3522; NOSIMD-NEXT:    call $push5=, __truncsfhf2, $24523; NOSIMD-NEXT:    call $push6=, __extendhfsf2, $pop5524; NOSIMD-NEXT:    f32.add $push7=, $pop4, $pop6525; NOSIMD-NEXT:    call $push8=, __truncsfhf2, $pop7526; NOSIMD-NEXT:    i32.store16 14($0), $pop8527; NOSIMD-NEXT:    call $push9=, __truncsfhf2, $7528; NOSIMD-NEXT:    call $push10=, __extendhfsf2, $pop9529; NOSIMD-NEXT:    call $push11=, __truncsfhf2, $15530; NOSIMD-NEXT:    call $push12=, __extendhfsf2, $pop11531; NOSIMD-NEXT:    f32.mul $push13=, $pop10, $pop12532; NOSIMD-NEXT:    call $push14=, __truncsfhf2, $23533; NOSIMD-NEXT:    call $push15=, __extendhfsf2, $pop14534; NOSIMD-NEXT:    f32.add $push16=, $pop13, $pop15535; NOSIMD-NEXT:    call $push17=, __truncsfhf2, $pop16536; NOSIMD-NEXT:    i32.store16 12($0), $pop17537; NOSIMD-NEXT:    call $push18=, __truncsfhf2, $6538; NOSIMD-NEXT:    call $push19=, __extendhfsf2, $pop18539; NOSIMD-NEXT:    call $push20=, __truncsfhf2, $14540; NOSIMD-NEXT:    call $push21=, __extendhfsf2, $pop20541; NOSIMD-NEXT:    f32.mul $push22=, $pop19, $pop21542; NOSIMD-NEXT:    call $push23=, __truncsfhf2, $22543; NOSIMD-NEXT:    call $push24=, __extendhfsf2, $pop23544; NOSIMD-NEXT:    f32.add $push25=, $pop22, $pop24545; NOSIMD-NEXT:    call $push26=, __truncsfhf2, $pop25546; NOSIMD-NEXT:    i32.store16 10($0), $pop26547; NOSIMD-NEXT:    call $push27=, __truncsfhf2, $5548; NOSIMD-NEXT:    call $push28=, __extendhfsf2, $pop27549; NOSIMD-NEXT:    call $push29=, __truncsfhf2, $13550; NOSIMD-NEXT:    call $push30=, __extendhfsf2, $pop29551; NOSIMD-NEXT:    f32.mul $push31=, $pop28, $pop30552; NOSIMD-NEXT:    call $push32=, __truncsfhf2, $21553; NOSIMD-NEXT:    call $push33=, __extendhfsf2, $pop32554; NOSIMD-NEXT:    f32.add $push34=, $pop31, $pop33555; NOSIMD-NEXT:    call $push35=, __truncsfhf2, $pop34556; NOSIMD-NEXT:    i32.store16 8($0), $pop35557; NOSIMD-NEXT:    call $push36=, __truncsfhf2, $4558; NOSIMD-NEXT:    call $push37=, __extendhfsf2, $pop36559; NOSIMD-NEXT:    call $push38=, __truncsfhf2, $12560; NOSIMD-NEXT:    call $push39=, __extendhfsf2, $pop38561; NOSIMD-NEXT:    f32.mul $push40=, $pop37, $pop39562; NOSIMD-NEXT:    call $push41=, __truncsfhf2, $20563; NOSIMD-NEXT:    call $push42=, __extendhfsf2, $pop41564; NOSIMD-NEXT:    f32.add $push43=, $pop40, $pop42565; NOSIMD-NEXT:    call $push44=, __truncsfhf2, $pop43566; NOSIMD-NEXT:    i32.store16 6($0), $pop44567; NOSIMD-NEXT:    call $push45=, __truncsfhf2, $3568; NOSIMD-NEXT:    call $push46=, __extendhfsf2, $pop45569; NOSIMD-NEXT:    call $push47=, __truncsfhf2, $11570; NOSIMD-NEXT:    call $push48=, __extendhfsf2, $pop47571; NOSIMD-NEXT:    f32.mul $push49=, $pop46, $pop48572; NOSIMD-NEXT:    call $push50=, __truncsfhf2, $19573; NOSIMD-NEXT:    call $push51=, __extendhfsf2, $pop50574; NOSIMD-NEXT:    f32.add $push52=, $pop49, $pop51575; NOSIMD-NEXT:    call $push53=, __truncsfhf2, $pop52576; NOSIMD-NEXT:    i32.store16 4($0), $pop53577; NOSIMD-NEXT:    call $push54=, __truncsfhf2, $2578; NOSIMD-NEXT:    call $push55=, __extendhfsf2, $pop54579; NOSIMD-NEXT:    call $push56=, __truncsfhf2, $10580; NOSIMD-NEXT:    call $push57=, __extendhfsf2, $pop56581; NOSIMD-NEXT:    f32.mul $push58=, $pop55, $pop57582; NOSIMD-NEXT:    call $push59=, __truncsfhf2, $18583; NOSIMD-NEXT:    call $push60=, __extendhfsf2, $pop59584; NOSIMD-NEXT:    f32.add $push61=, $pop58, $pop60585; NOSIMD-NEXT:    call $push62=, __truncsfhf2, $pop61586; NOSIMD-NEXT:    i32.store16 2($0), $pop62587; NOSIMD-NEXT:    call $push63=, __truncsfhf2, $1588; NOSIMD-NEXT:    call $push64=, __extendhfsf2, $pop63589; NOSIMD-NEXT:    call $push65=, __truncsfhf2, $9590; NOSIMD-NEXT:    call $push66=, __extendhfsf2, $pop65591; NOSIMD-NEXT:    f32.mul $push67=, $pop64, $pop66592; NOSIMD-NEXT:    call $push68=, __truncsfhf2, $17593; NOSIMD-NEXT:    call $push69=, __extendhfsf2, $pop68594; NOSIMD-NEXT:    f32.add $push70=, $pop67, $pop69595; NOSIMD-NEXT:    call $push71=, __truncsfhf2, $pop70596; NOSIMD-NEXT:    i32.store16 0($0), $pop71597; NOSIMD-NEXT:    return598  %mul = fmul contract <8 x half> %b, %a599  %add = fadd contract <8 x half> %mul, %c600  ret <8 x half> %add601}602 603define <4 x float> @fadd_fmul_4xf32(<4 x float> %a, <4 x float> %b, <4 x float> %c) {604; RELAXED-LABEL: fadd_fmul_4xf32:605; RELAXED:         .functype fadd_fmul_4xf32 (v128, v128, v128) -> (v128)606; RELAXED-NEXT:  # %bb.0:607; RELAXED-NEXT:    f32x4.mul $push0=, $1, $0608; RELAXED-NEXT:    f32x4.add $push1=, $pop0, $2609; RELAXED-NEXT:    return $pop1610;611; STRICT-LABEL: fadd_fmul_4xf32:612; STRICT:         .functype fadd_fmul_4xf32 (v128, v128, v128) -> (v128)613; STRICT-NEXT:  # %bb.0:614; STRICT-NEXT:    f32x4.mul $push0=, $1, $0615; STRICT-NEXT:    f32x4.add $push1=, $pop0, $2616; STRICT-NEXT:    return $pop1617;618; NOFP16-LABEL: fadd_fmul_4xf32:619; NOFP16:         .functype fadd_fmul_4xf32 (v128, v128, v128) -> (v128)620; NOFP16-NEXT:  # %bb.0:621; NOFP16-NEXT:    f32x4.mul $push0=, $1, $0622; NOFP16-NEXT:    f32x4.add $push1=, $pop0, $2623; NOFP16-NEXT:    return $pop1624;625; NOSIMD-LABEL: fadd_fmul_4xf32:626; NOSIMD:         .functype fadd_fmul_4xf32 (i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()627; NOSIMD-NEXT:  # %bb.0:628; NOSIMD-NEXT:    f32.mul $push0=, $8, $4629; NOSIMD-NEXT:    f32.add $push1=, $pop0, $12630; NOSIMD-NEXT:    f32.store 12($0), $pop1631; NOSIMD-NEXT:    f32.mul $push2=, $7, $3632; NOSIMD-NEXT:    f32.add $push3=, $pop2, $11633; NOSIMD-NEXT:    f32.store 8($0), $pop3634; NOSIMD-NEXT:    f32.mul $push4=, $6, $2635; NOSIMD-NEXT:    f32.add $push5=, $pop4, $10636; NOSIMD-NEXT:    f32.store 4($0), $pop5637; NOSIMD-NEXT:    f32.mul $push6=, $5, $1638; NOSIMD-NEXT:    f32.add $push7=, $pop6, $9639; NOSIMD-NEXT:    f32.store 0($0), $pop7640; NOSIMD-NEXT:    return641  %mul = fmul <4 x float> %b, %a642  %add = fadd contract <4 x float> %mul, %c643  ret <4 x float> %add644}645 646define <8 x half> @fmuladd_contract_8xf16(<8 x half> %a, <8 x half> %b, <8 x half> %c) {647; RELAXED-LABEL: fmuladd_contract_8xf16:648; RELAXED:         .functype fmuladd_contract_8xf16 (v128, v128, v128) -> (v128)649; RELAXED-NEXT:  # %bb.0:650; RELAXED-NEXT:    f16x8.madd $push0=, $0, $1, $2651; RELAXED-NEXT:    return $pop0652;653; STRICT-LABEL: fmuladd_contract_8xf16:654; STRICT:         .functype fmuladd_contract_8xf16 (v128, v128, v128) -> (v128)655; STRICT-NEXT:  # %bb.0:656; STRICT-NEXT:    f16x8.madd $push0=, $0, $1, $2657; STRICT-NEXT:    return $pop0658;659; NOFP16-LABEL: fmuladd_contract_8xf16:660; NOFP16:         .functype fmuladd_contract_8xf16 (i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()661; NOFP16-NEXT:  # %bb.0:662; NOFP16-NEXT:    call $push0=, __truncsfhf2, $16663; NOFP16-NEXT:    call $push1=, __extendhfsf2, $pop0664; NOFP16-NEXT:    call $push2=, __truncsfhf2, $8665; NOFP16-NEXT:    call $push3=, __extendhfsf2, $pop2666; NOFP16-NEXT:    f32.mul $push4=, $pop1, $pop3667; NOFP16-NEXT:    call $push5=, __truncsfhf2, $24668; NOFP16-NEXT:    call $push6=, __extendhfsf2, $pop5669; NOFP16-NEXT:    f32.add $push7=, $pop4, $pop6670; NOFP16-NEXT:    call $push8=, __truncsfhf2, $pop7671; NOFP16-NEXT:    i32.store16 14($0), $pop8672; NOFP16-NEXT:    call $push9=, __truncsfhf2, $15673; NOFP16-NEXT:    call $push10=, __extendhfsf2, $pop9674; NOFP16-NEXT:    call $push11=, __truncsfhf2, $7675; NOFP16-NEXT:    call $push12=, __extendhfsf2, $pop11676; NOFP16-NEXT:    f32.mul $push13=, $pop10, $pop12677; NOFP16-NEXT:    call $push14=, __truncsfhf2, $23678; NOFP16-NEXT:    call $push15=, __extendhfsf2, $pop14679; NOFP16-NEXT:    f32.add $push16=, $pop13, $pop15680; NOFP16-NEXT:    call $push17=, __truncsfhf2, $pop16681; NOFP16-NEXT:    i32.store16 12($0), $pop17682; NOFP16-NEXT:    call $push18=, __truncsfhf2, $14683; NOFP16-NEXT:    call $push19=, __extendhfsf2, $pop18684; NOFP16-NEXT:    call $push20=, __truncsfhf2, $6685; NOFP16-NEXT:    call $push21=, __extendhfsf2, $pop20686; NOFP16-NEXT:    f32.mul $push22=, $pop19, $pop21687; NOFP16-NEXT:    call $push23=, __truncsfhf2, $22688; NOFP16-NEXT:    call $push24=, __extendhfsf2, $pop23689; NOFP16-NEXT:    f32.add $push25=, $pop22, $pop24690; NOFP16-NEXT:    call $push26=, __truncsfhf2, $pop25691; NOFP16-NEXT:    i32.store16 10($0), $pop26692; NOFP16-NEXT:    call $push27=, __truncsfhf2, $13693; NOFP16-NEXT:    call $push28=, __extendhfsf2, $pop27694; NOFP16-NEXT:    call $push29=, __truncsfhf2, $5695; NOFP16-NEXT:    call $push30=, __extendhfsf2, $pop29696; NOFP16-NEXT:    f32.mul $push31=, $pop28, $pop30697; NOFP16-NEXT:    call $push32=, __truncsfhf2, $21698; NOFP16-NEXT:    call $push33=, __extendhfsf2, $pop32699; NOFP16-NEXT:    f32.add $push34=, $pop31, $pop33700; NOFP16-NEXT:    call $push35=, __truncsfhf2, $pop34701; NOFP16-NEXT:    i32.store16 8($0), $pop35702; NOFP16-NEXT:    call $push36=, __truncsfhf2, $12703; NOFP16-NEXT:    call $push37=, __extendhfsf2, $pop36704; NOFP16-NEXT:    call $push38=, __truncsfhf2, $4705; NOFP16-NEXT:    call $push39=, __extendhfsf2, $pop38706; NOFP16-NEXT:    f32.mul $push40=, $pop37, $pop39707; NOFP16-NEXT:    call $push41=, __truncsfhf2, $20708; NOFP16-NEXT:    call $push42=, __extendhfsf2, $pop41709; NOFP16-NEXT:    f32.add $push43=, $pop40, $pop42710; NOFP16-NEXT:    call $push44=, __truncsfhf2, $pop43711; NOFP16-NEXT:    i32.store16 6($0), $pop44712; NOFP16-NEXT:    call $push45=, __truncsfhf2, $11713; NOFP16-NEXT:    call $push46=, __extendhfsf2, $pop45714; NOFP16-NEXT:    call $push47=, __truncsfhf2, $3715; NOFP16-NEXT:    call $push48=, __extendhfsf2, $pop47716; NOFP16-NEXT:    f32.mul $push49=, $pop46, $pop48717; NOFP16-NEXT:    call $push50=, __truncsfhf2, $19718; NOFP16-NEXT:    call $push51=, __extendhfsf2, $pop50719; NOFP16-NEXT:    f32.add $push52=, $pop49, $pop51720; NOFP16-NEXT:    call $push53=, __truncsfhf2, $pop52721; NOFP16-NEXT:    i32.store16 4($0), $pop53722; NOFP16-NEXT:    call $push54=, __truncsfhf2, $10723; NOFP16-NEXT:    call $push55=, __extendhfsf2, $pop54724; NOFP16-NEXT:    call $push56=, __truncsfhf2, $2725; NOFP16-NEXT:    call $push57=, __extendhfsf2, $pop56726; NOFP16-NEXT:    f32.mul $push58=, $pop55, $pop57727; NOFP16-NEXT:    call $push59=, __truncsfhf2, $18728; NOFP16-NEXT:    call $push60=, __extendhfsf2, $pop59729; NOFP16-NEXT:    f32.add $push61=, $pop58, $pop60730; NOFP16-NEXT:    call $push62=, __truncsfhf2, $pop61731; NOFP16-NEXT:    i32.store16 2($0), $pop62732; NOFP16-NEXT:    call $push63=, __truncsfhf2, $9733; NOFP16-NEXT:    call $push64=, __extendhfsf2, $pop63734; NOFP16-NEXT:    call $push65=, __truncsfhf2, $1735; NOFP16-NEXT:    call $push66=, __extendhfsf2, $pop65736; NOFP16-NEXT:    f32.mul $push67=, $pop64, $pop66737; NOFP16-NEXT:    call $push68=, __truncsfhf2, $17738; NOFP16-NEXT:    call $push69=, __extendhfsf2, $pop68739; NOFP16-NEXT:    f32.add $push70=, $pop67, $pop69740; NOFP16-NEXT:    call $push71=, __truncsfhf2, $pop70741; NOFP16-NEXT:    i32.store16 0($0), $pop71742; NOFP16-NEXT:    return743;744; NOSIMD-LABEL: fmuladd_contract_8xf16:745; NOSIMD:         .functype fmuladd_contract_8xf16 (i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()746; NOSIMD-NEXT:  # %bb.0:747; NOSIMD-NEXT:    call $push0=, __truncsfhf2, $16748; NOSIMD-NEXT:    call $push1=, __extendhfsf2, $pop0749; NOSIMD-NEXT:    call $push2=, __truncsfhf2, $8750; NOSIMD-NEXT:    call $push3=, __extendhfsf2, $pop2751; NOSIMD-NEXT:    f32.mul $push4=, $pop1, $pop3752; NOSIMD-NEXT:    call $push5=, __truncsfhf2, $24753; NOSIMD-NEXT:    call $push6=, __extendhfsf2, $pop5754; NOSIMD-NEXT:    f32.add $push7=, $pop4, $pop6755; NOSIMD-NEXT:    call $push8=, __truncsfhf2, $pop7756; NOSIMD-NEXT:    i32.store16 14($0), $pop8757; NOSIMD-NEXT:    call $push9=, __truncsfhf2, $15758; NOSIMD-NEXT:    call $push10=, __extendhfsf2, $pop9759; NOSIMD-NEXT:    call $push11=, __truncsfhf2, $7760; NOSIMD-NEXT:    call $push12=, __extendhfsf2, $pop11761; NOSIMD-NEXT:    f32.mul $push13=, $pop10, $pop12762; NOSIMD-NEXT:    call $push14=, __truncsfhf2, $23763; NOSIMD-NEXT:    call $push15=, __extendhfsf2, $pop14764; NOSIMD-NEXT:    f32.add $push16=, $pop13, $pop15765; NOSIMD-NEXT:    call $push17=, __truncsfhf2, $pop16766; NOSIMD-NEXT:    i32.store16 12($0), $pop17767; NOSIMD-NEXT:    call $push18=, __truncsfhf2, $14768; NOSIMD-NEXT:    call $push19=, __extendhfsf2, $pop18769; NOSIMD-NEXT:    call $push20=, __truncsfhf2, $6770; NOSIMD-NEXT:    call $push21=, __extendhfsf2, $pop20771; NOSIMD-NEXT:    f32.mul $push22=, $pop19, $pop21772; NOSIMD-NEXT:    call $push23=, __truncsfhf2, $22773; NOSIMD-NEXT:    call $push24=, __extendhfsf2, $pop23774; NOSIMD-NEXT:    f32.add $push25=, $pop22, $pop24775; NOSIMD-NEXT:    call $push26=, __truncsfhf2, $pop25776; NOSIMD-NEXT:    i32.store16 10($0), $pop26777; NOSIMD-NEXT:    call $push27=, __truncsfhf2, $13778; NOSIMD-NEXT:    call $push28=, __extendhfsf2, $pop27779; NOSIMD-NEXT:    call $push29=, __truncsfhf2, $5780; NOSIMD-NEXT:    call $push30=, __extendhfsf2, $pop29781; NOSIMD-NEXT:    f32.mul $push31=, $pop28, $pop30782; NOSIMD-NEXT:    call $push32=, __truncsfhf2, $21783; NOSIMD-NEXT:    call $push33=, __extendhfsf2, $pop32784; NOSIMD-NEXT:    f32.add $push34=, $pop31, $pop33785; NOSIMD-NEXT:    call $push35=, __truncsfhf2, $pop34786; NOSIMD-NEXT:    i32.store16 8($0), $pop35787; NOSIMD-NEXT:    call $push36=, __truncsfhf2, $12788; NOSIMD-NEXT:    call $push37=, __extendhfsf2, $pop36789; NOSIMD-NEXT:    call $push38=, __truncsfhf2, $4790; NOSIMD-NEXT:    call $push39=, __extendhfsf2, $pop38791; NOSIMD-NEXT:    f32.mul $push40=, $pop37, $pop39792; NOSIMD-NEXT:    call $push41=, __truncsfhf2, $20793; NOSIMD-NEXT:    call $push42=, __extendhfsf2, $pop41794; NOSIMD-NEXT:    f32.add $push43=, $pop40, $pop42795; NOSIMD-NEXT:    call $push44=, __truncsfhf2, $pop43796; NOSIMD-NEXT:    i32.store16 6($0), $pop44797; NOSIMD-NEXT:    call $push45=, __truncsfhf2, $11798; NOSIMD-NEXT:    call $push46=, __extendhfsf2, $pop45799; NOSIMD-NEXT:    call $push47=, __truncsfhf2, $3800; NOSIMD-NEXT:    call $push48=, __extendhfsf2, $pop47801; NOSIMD-NEXT:    f32.mul $push49=, $pop46, $pop48802; NOSIMD-NEXT:    call $push50=, __truncsfhf2, $19803; NOSIMD-NEXT:    call $push51=, __extendhfsf2, $pop50804; NOSIMD-NEXT:    f32.add $push52=, $pop49, $pop51805; NOSIMD-NEXT:    call $push53=, __truncsfhf2, $pop52806; NOSIMD-NEXT:    i32.store16 4($0), $pop53807; NOSIMD-NEXT:    call $push54=, __truncsfhf2, $10808; NOSIMD-NEXT:    call $push55=, __extendhfsf2, $pop54809; NOSIMD-NEXT:    call $push56=, __truncsfhf2, $2810; NOSIMD-NEXT:    call $push57=, __extendhfsf2, $pop56811; NOSIMD-NEXT:    f32.mul $push58=, $pop55, $pop57812; NOSIMD-NEXT:    call $push59=, __truncsfhf2, $18813; NOSIMD-NEXT:    call $push60=, __extendhfsf2, $pop59814; NOSIMD-NEXT:    f32.add $push61=, $pop58, $pop60815; NOSIMD-NEXT:    call $push62=, __truncsfhf2, $pop61816; NOSIMD-NEXT:    i32.store16 2($0), $pop62817; NOSIMD-NEXT:    call $push63=, __truncsfhf2, $9818; NOSIMD-NEXT:    call $push64=, __extendhfsf2, $pop63819; NOSIMD-NEXT:    call $push65=, __truncsfhf2, $1820; NOSIMD-NEXT:    call $push66=, __extendhfsf2, $pop65821; NOSIMD-NEXT:    f32.mul $push67=, $pop64, $pop66822; NOSIMD-NEXT:    call $push68=, __truncsfhf2, $17823; NOSIMD-NEXT:    call $push69=, __extendhfsf2, $pop68824; NOSIMD-NEXT:    f32.add $push70=, $pop67, $pop69825; NOSIMD-NEXT:    call $push71=, __truncsfhf2, $pop70826; NOSIMD-NEXT:    i32.store16 0($0), $pop71827; NOSIMD-NEXT:    return828  %fma = call contract <8 x half> @llvm.fmuladd(<8 x half> %a, <8 x half> %b, <8 x half> %c)829  ret <8 x half> %fma830}831 832define <8 x half> @fmuladd_8xf16(<8 x half> %a, <8 x half> %b, <8 x half> %c) {833; RELAXED-LABEL: fmuladd_8xf16:834; RELAXED:         .functype fmuladd_8xf16 (v128, v128, v128) -> (v128)835; RELAXED-NEXT:  # %bb.0:836; RELAXED-NEXT:    f16x8.madd $push0=, $0, $1, $2837; RELAXED-NEXT:    return $pop0838;839; STRICT-LABEL: fmuladd_8xf16:840; STRICT:         .functype fmuladd_8xf16 (v128, v128, v128) -> (v128)841; STRICT-NEXT:  # %bb.0:842; STRICT-NEXT:    f16x8.madd $push0=, $0, $1, $2843; STRICT-NEXT:    return $pop0844;845; NOFP16-LABEL: fmuladd_8xf16:846; NOFP16:         .functype fmuladd_8xf16 (i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()847; NOFP16-NEXT:  # %bb.0:848; NOFP16-NEXT:    call $push0=, __truncsfhf2, $16849; NOFP16-NEXT:    call $push1=, __extendhfsf2, $pop0850; NOFP16-NEXT:    call $push2=, __truncsfhf2, $8851; NOFP16-NEXT:    call $push3=, __extendhfsf2, $pop2852; NOFP16-NEXT:    f32.mul $push4=, $pop1, $pop3853; NOFP16-NEXT:    call $push5=, __truncsfhf2, $24854; NOFP16-NEXT:    call $push6=, __extendhfsf2, $pop5855; NOFP16-NEXT:    f32.add $push7=, $pop4, $pop6856; NOFP16-NEXT:    call $push8=, __truncsfhf2, $pop7857; NOFP16-NEXT:    i32.store16 14($0), $pop8858; NOFP16-NEXT:    call $push9=, __truncsfhf2, $15859; NOFP16-NEXT:    call $push10=, __extendhfsf2, $pop9860; NOFP16-NEXT:    call $push11=, __truncsfhf2, $7861; NOFP16-NEXT:    call $push12=, __extendhfsf2, $pop11862; NOFP16-NEXT:    f32.mul $push13=, $pop10, $pop12863; NOFP16-NEXT:    call $push14=, __truncsfhf2, $23864; NOFP16-NEXT:    call $push15=, __extendhfsf2, $pop14865; NOFP16-NEXT:    f32.add $push16=, $pop13, $pop15866; NOFP16-NEXT:    call $push17=, __truncsfhf2, $pop16867; NOFP16-NEXT:    i32.store16 12($0), $pop17868; NOFP16-NEXT:    call $push18=, __truncsfhf2, $14869; NOFP16-NEXT:    call $push19=, __extendhfsf2, $pop18870; NOFP16-NEXT:    call $push20=, __truncsfhf2, $6871; NOFP16-NEXT:    call $push21=, __extendhfsf2, $pop20872; NOFP16-NEXT:    f32.mul $push22=, $pop19, $pop21873; NOFP16-NEXT:    call $push23=, __truncsfhf2, $22874; NOFP16-NEXT:    call $push24=, __extendhfsf2, $pop23875; NOFP16-NEXT:    f32.add $push25=, $pop22, $pop24876; NOFP16-NEXT:    call $push26=, __truncsfhf2, $pop25877; NOFP16-NEXT:    i32.store16 10($0), $pop26878; NOFP16-NEXT:    call $push27=, __truncsfhf2, $13879; NOFP16-NEXT:    call $push28=, __extendhfsf2, $pop27880; NOFP16-NEXT:    call $push29=, __truncsfhf2, $5881; NOFP16-NEXT:    call $push30=, __extendhfsf2, $pop29882; NOFP16-NEXT:    f32.mul $push31=, $pop28, $pop30883; NOFP16-NEXT:    call $push32=, __truncsfhf2, $21884; NOFP16-NEXT:    call $push33=, __extendhfsf2, $pop32885; NOFP16-NEXT:    f32.add $push34=, $pop31, $pop33886; NOFP16-NEXT:    call $push35=, __truncsfhf2, $pop34887; NOFP16-NEXT:    i32.store16 8($0), $pop35888; NOFP16-NEXT:    call $push36=, __truncsfhf2, $12889; NOFP16-NEXT:    call $push37=, __extendhfsf2, $pop36890; NOFP16-NEXT:    call $push38=, __truncsfhf2, $4891; NOFP16-NEXT:    call $push39=, __extendhfsf2, $pop38892; NOFP16-NEXT:    f32.mul $push40=, $pop37, $pop39893; NOFP16-NEXT:    call $push41=, __truncsfhf2, $20894; NOFP16-NEXT:    call $push42=, __extendhfsf2, $pop41895; NOFP16-NEXT:    f32.add $push43=, $pop40, $pop42896; NOFP16-NEXT:    call $push44=, __truncsfhf2, $pop43897; NOFP16-NEXT:    i32.store16 6($0), $pop44898; NOFP16-NEXT:    call $push45=, __truncsfhf2, $11899; NOFP16-NEXT:    call $push46=, __extendhfsf2, $pop45900; NOFP16-NEXT:    call $push47=, __truncsfhf2, $3901; NOFP16-NEXT:    call $push48=, __extendhfsf2, $pop47902; NOFP16-NEXT:    f32.mul $push49=, $pop46, $pop48903; NOFP16-NEXT:    call $push50=, __truncsfhf2, $19904; NOFP16-NEXT:    call $push51=, __extendhfsf2, $pop50905; NOFP16-NEXT:    f32.add $push52=, $pop49, $pop51906; NOFP16-NEXT:    call $push53=, __truncsfhf2, $pop52907; NOFP16-NEXT:    i32.store16 4($0), $pop53908; NOFP16-NEXT:    call $push54=, __truncsfhf2, $10909; NOFP16-NEXT:    call $push55=, __extendhfsf2, $pop54910; NOFP16-NEXT:    call $push56=, __truncsfhf2, $2911; NOFP16-NEXT:    call $push57=, __extendhfsf2, $pop56912; NOFP16-NEXT:    f32.mul $push58=, $pop55, $pop57913; NOFP16-NEXT:    call $push59=, __truncsfhf2, $18914; NOFP16-NEXT:    call $push60=, __extendhfsf2, $pop59915; NOFP16-NEXT:    f32.add $push61=, $pop58, $pop60916; NOFP16-NEXT:    call $push62=, __truncsfhf2, $pop61917; NOFP16-NEXT:    i32.store16 2($0), $pop62918; NOFP16-NEXT:    call $push63=, __truncsfhf2, $9919; NOFP16-NEXT:    call $push64=, __extendhfsf2, $pop63920; NOFP16-NEXT:    call $push65=, __truncsfhf2, $1921; NOFP16-NEXT:    call $push66=, __extendhfsf2, $pop65922; NOFP16-NEXT:    f32.mul $push67=, $pop64, $pop66923; NOFP16-NEXT:    call $push68=, __truncsfhf2, $17924; NOFP16-NEXT:    call $push69=, __extendhfsf2, $pop68925; NOFP16-NEXT:    f32.add $push70=, $pop67, $pop69926; NOFP16-NEXT:    call $push71=, __truncsfhf2, $pop70927; NOFP16-NEXT:    i32.store16 0($0), $pop71928; NOFP16-NEXT:    return929;930; NOSIMD-LABEL: fmuladd_8xf16:931; NOSIMD:         .functype fmuladd_8xf16 (i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()932; NOSIMD-NEXT:  # %bb.0:933; NOSIMD-NEXT:    call $push0=, __truncsfhf2, $16934; NOSIMD-NEXT:    call $push1=, __extendhfsf2, $pop0935; NOSIMD-NEXT:    call $push2=, __truncsfhf2, $8936; NOSIMD-NEXT:    call $push3=, __extendhfsf2, $pop2937; NOSIMD-NEXT:    f32.mul $push4=, $pop1, $pop3938; NOSIMD-NEXT:    call $push5=, __truncsfhf2, $24939; NOSIMD-NEXT:    call $push6=, __extendhfsf2, $pop5940; NOSIMD-NEXT:    f32.add $push7=, $pop4, $pop6941; NOSIMD-NEXT:    call $push8=, __truncsfhf2, $pop7942; NOSIMD-NEXT:    i32.store16 14($0), $pop8943; NOSIMD-NEXT:    call $push9=, __truncsfhf2, $15944; NOSIMD-NEXT:    call $push10=, __extendhfsf2, $pop9945; NOSIMD-NEXT:    call $push11=, __truncsfhf2, $7946; NOSIMD-NEXT:    call $push12=, __extendhfsf2, $pop11947; NOSIMD-NEXT:    f32.mul $push13=, $pop10, $pop12948; NOSIMD-NEXT:    call $push14=, __truncsfhf2, $23949; NOSIMD-NEXT:    call $push15=, __extendhfsf2, $pop14950; NOSIMD-NEXT:    f32.add $push16=, $pop13, $pop15951; NOSIMD-NEXT:    call $push17=, __truncsfhf2, $pop16952; NOSIMD-NEXT:    i32.store16 12($0), $pop17953; NOSIMD-NEXT:    call $push18=, __truncsfhf2, $14954; NOSIMD-NEXT:    call $push19=, __extendhfsf2, $pop18955; NOSIMD-NEXT:    call $push20=, __truncsfhf2, $6956; NOSIMD-NEXT:    call $push21=, __extendhfsf2, $pop20957; NOSIMD-NEXT:    f32.mul $push22=, $pop19, $pop21958; NOSIMD-NEXT:    call $push23=, __truncsfhf2, $22959; NOSIMD-NEXT:    call $push24=, __extendhfsf2, $pop23960; NOSIMD-NEXT:    f32.add $push25=, $pop22, $pop24961; NOSIMD-NEXT:    call $push26=, __truncsfhf2, $pop25962; NOSIMD-NEXT:    i32.store16 10($0), $pop26963; NOSIMD-NEXT:    call $push27=, __truncsfhf2, $13964; NOSIMD-NEXT:    call $push28=, __extendhfsf2, $pop27965; NOSIMD-NEXT:    call $push29=, __truncsfhf2, $5966; NOSIMD-NEXT:    call $push30=, __extendhfsf2, $pop29967; NOSIMD-NEXT:    f32.mul $push31=, $pop28, $pop30968; NOSIMD-NEXT:    call $push32=, __truncsfhf2, $21969; NOSIMD-NEXT:    call $push33=, __extendhfsf2, $pop32970; NOSIMD-NEXT:    f32.add $push34=, $pop31, $pop33971; NOSIMD-NEXT:    call $push35=, __truncsfhf2, $pop34972; NOSIMD-NEXT:    i32.store16 8($0), $pop35973; NOSIMD-NEXT:    call $push36=, __truncsfhf2, $12974; NOSIMD-NEXT:    call $push37=, __extendhfsf2, $pop36975; NOSIMD-NEXT:    call $push38=, __truncsfhf2, $4976; NOSIMD-NEXT:    call $push39=, __extendhfsf2, $pop38977; NOSIMD-NEXT:    f32.mul $push40=, $pop37, $pop39978; NOSIMD-NEXT:    call $push41=, __truncsfhf2, $20979; NOSIMD-NEXT:    call $push42=, __extendhfsf2, $pop41980; NOSIMD-NEXT:    f32.add $push43=, $pop40, $pop42981; NOSIMD-NEXT:    call $push44=, __truncsfhf2, $pop43982; NOSIMD-NEXT:    i32.store16 6($0), $pop44983; NOSIMD-NEXT:    call $push45=, __truncsfhf2, $11984; NOSIMD-NEXT:    call $push46=, __extendhfsf2, $pop45985; NOSIMD-NEXT:    call $push47=, __truncsfhf2, $3986; NOSIMD-NEXT:    call $push48=, __extendhfsf2, $pop47987; NOSIMD-NEXT:    f32.mul $push49=, $pop46, $pop48988; NOSIMD-NEXT:    call $push50=, __truncsfhf2, $19989; NOSIMD-NEXT:    call $push51=, __extendhfsf2, $pop50990; NOSIMD-NEXT:    f32.add $push52=, $pop49, $pop51991; NOSIMD-NEXT:    call $push53=, __truncsfhf2, $pop52992; NOSIMD-NEXT:    i32.store16 4($0), $pop53993; NOSIMD-NEXT:    call $push54=, __truncsfhf2, $10994; NOSIMD-NEXT:    call $push55=, __extendhfsf2, $pop54995; NOSIMD-NEXT:    call $push56=, __truncsfhf2, $2996; NOSIMD-NEXT:    call $push57=, __extendhfsf2, $pop56997; NOSIMD-NEXT:    f32.mul $push58=, $pop55, $pop57998; NOSIMD-NEXT:    call $push59=, __truncsfhf2, $18999; NOSIMD-NEXT:    call $push60=, __extendhfsf2, $pop591000; NOSIMD-NEXT:    f32.add $push61=, $pop58, $pop601001; NOSIMD-NEXT:    call $push62=, __truncsfhf2, $pop611002; NOSIMD-NEXT:    i32.store16 2($0), $pop621003; NOSIMD-NEXT:    call $push63=, __truncsfhf2, $91004; NOSIMD-NEXT:    call $push64=, __extendhfsf2, $pop631005; NOSIMD-NEXT:    call $push65=, __truncsfhf2, $11006; NOSIMD-NEXT:    call $push66=, __extendhfsf2, $pop651007; NOSIMD-NEXT:    f32.mul $push67=, $pop64, $pop661008; NOSIMD-NEXT:    call $push68=, __truncsfhf2, $171009; NOSIMD-NEXT:    call $push69=, __extendhfsf2, $pop681010; NOSIMD-NEXT:    f32.add $push70=, $pop67, $pop691011; NOSIMD-NEXT:    call $push71=, __truncsfhf2, $pop701012; NOSIMD-NEXT:    i32.store16 0($0), $pop711013; NOSIMD-NEXT:    return1014  %fma = call <8 x half> @llvm.fmuladd(<8 x half> %a, <8 x half> %b, <8 x half> %c)1015  ret <8 x half> %fma1016}1017 1018define <4 x float> @fmuladd_contract_4xf32(<4 x float> %a, <4 x float> %b, <4 x float> %c) {1019; RELAXED-LABEL: fmuladd_contract_4xf32:1020; RELAXED:         .functype fmuladd_contract_4xf32 (v128, v128, v128) -> (v128)1021; RELAXED-NEXT:  # %bb.0:1022; RELAXED-NEXT:    f32x4.relaxed_madd $push0=, $0, $1, $21023; RELAXED-NEXT:    return $pop01024;1025; STRICT-LABEL: fmuladd_contract_4xf32:1026; STRICT:         .functype fmuladd_contract_4xf32 (v128, v128, v128) -> (v128)1027; STRICT-NEXT:  # %bb.0:1028; STRICT-NEXT:    f32x4.mul $push0=, $0, $11029; STRICT-NEXT:    f32x4.add $push1=, $pop0, $21030; STRICT-NEXT:    return $pop11031;1032; NOFP16-LABEL: fmuladd_contract_4xf32:1033; NOFP16:         .functype fmuladd_contract_4xf32 (v128, v128, v128) -> (v128)1034; NOFP16-NEXT:  # %bb.0:1035; NOFP16-NEXT:    f32x4.mul $push0=, $0, $11036; NOFP16-NEXT:    f32x4.add $push1=, $pop0, $21037; NOFP16-NEXT:    return $pop11038;1039; NOSIMD-LABEL: fmuladd_contract_4xf32:1040; NOSIMD:         .functype fmuladd_contract_4xf32 (i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()1041; NOSIMD-NEXT:  # %bb.0:1042; NOSIMD-NEXT:    f32.mul $push0=, $4, $81043; NOSIMD-NEXT:    f32.add $push1=, $pop0, $121044; NOSIMD-NEXT:    f32.store 12($0), $pop11045; NOSIMD-NEXT:    f32.mul $push2=, $3, $71046; NOSIMD-NEXT:    f32.add $push3=, $pop2, $111047; NOSIMD-NEXT:    f32.store 8($0), $pop31048; NOSIMD-NEXT:    f32.mul $push4=, $2, $61049; NOSIMD-NEXT:    f32.add $push5=, $pop4, $101050; NOSIMD-NEXT:    f32.store 4($0), $pop51051; NOSIMD-NEXT:    f32.mul $push6=, $1, $51052; NOSIMD-NEXT:    f32.add $push7=, $pop6, $91053; NOSIMD-NEXT:    f32.store 0($0), $pop71054; NOSIMD-NEXT:    return1055  %fma = call contract <4 x float> @llvm.fmuladd(<4 x float> %a, <4 x float> %b, <4 x float> %c)1056  ret <4 x float> %fma1057}1058 1059define <4 x float> @fmuladd_4xf32(<4 x float> %a, <4 x float> %b, <4 x float> %c) {1060; RELAXED-LABEL: fmuladd_4xf32:1061; RELAXED:         .functype fmuladd_4xf32 (v128, v128, v128) -> (v128)1062; RELAXED-NEXT:  # %bb.0:1063; RELAXED-NEXT:    f32x4.relaxed_madd $push0=, $0, $1, $21064; RELAXED-NEXT:    return $pop01065;1066; STRICT-LABEL: fmuladd_4xf32:1067; STRICT:         .functype fmuladd_4xf32 (v128, v128, v128) -> (v128)1068; STRICT-NEXT:  # %bb.0:1069; STRICT-NEXT:    f32x4.mul $push0=, $0, $11070; STRICT-NEXT:    f32x4.add $push1=, $pop0, $21071; STRICT-NEXT:    return $pop11072;1073; NOFP16-LABEL: fmuladd_4xf32:1074; NOFP16:         .functype fmuladd_4xf32 (v128, v128, v128) -> (v128)1075; NOFP16-NEXT:  # %bb.0:1076; NOFP16-NEXT:    f32x4.mul $push0=, $0, $11077; NOFP16-NEXT:    f32x4.add $push1=, $pop0, $21078; NOFP16-NEXT:    return $pop11079;1080; NOSIMD-LABEL: fmuladd_4xf32:1081; NOSIMD:         .functype fmuladd_4xf32 (i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()1082; NOSIMD-NEXT:  # %bb.0:1083; NOSIMD-NEXT:    f32.mul $push0=, $4, $81084; NOSIMD-NEXT:    f32.add $push1=, $pop0, $121085; NOSIMD-NEXT:    f32.store 12($0), $pop11086; NOSIMD-NEXT:    f32.mul $push2=, $3, $71087; NOSIMD-NEXT:    f32.add $push3=, $pop2, $111088; NOSIMD-NEXT:    f32.store 8($0), $pop31089; NOSIMD-NEXT:    f32.mul $push4=, $2, $61090; NOSIMD-NEXT:    f32.add $push5=, $pop4, $101091; NOSIMD-NEXT:    f32.store 4($0), $pop51092; NOSIMD-NEXT:    f32.mul $push6=, $1, $51093; NOSIMD-NEXT:    f32.add $push7=, $pop6, $91094; NOSIMD-NEXT:    f32.store 0($0), $pop71095; NOSIMD-NEXT:    return1096  %fma = call <4 x float> @llvm.fmuladd(<4 x float> %a, <4 x float> %b, <4 x float> %c)1097  ret <4 x float> %fma1098}1099 1100define <8 x float> @fmuladd_8xf32(<8 x float> %a, <8 x float> %b, <8 x float> %c) {1101; RELAXED-LABEL: fmuladd_8xf32:1102; RELAXED:         .functype fmuladd_8xf32 (i32, v128, v128, v128, v128, v128, v128) -> ()1103; RELAXED-NEXT:  # %bb.0:1104; RELAXED-NEXT:    f32x4.mul $push0=, $2, $41105; RELAXED-NEXT:    f32x4.add $push1=, $pop0, $61106; RELAXED-NEXT:    v128.store 16($0), $pop11107; RELAXED-NEXT:    f32x4.mul $push2=, $1, $31108; RELAXED-NEXT:    f32x4.add $push3=, $pop2, $51109; RELAXED-NEXT:    v128.store 0($0), $pop31110; RELAXED-NEXT:    return1111;1112; STRICT-LABEL: fmuladd_8xf32:1113; STRICT:         .functype fmuladd_8xf32 (i32, v128, v128, v128, v128, v128, v128) -> ()1114; STRICT-NEXT:  # %bb.0:1115; STRICT-NEXT:    f32x4.mul $push0=, $2, $41116; STRICT-NEXT:    f32x4.add $push1=, $pop0, $61117; STRICT-NEXT:    v128.store 16($0), $pop11118; STRICT-NEXT:    f32x4.mul $push2=, $1, $31119; STRICT-NEXT:    f32x4.add $push3=, $pop2, $51120; STRICT-NEXT:    v128.store 0($0), $pop31121; STRICT-NEXT:    return1122;1123; NOFP16-LABEL: fmuladd_8xf32:1124; NOFP16:         .functype fmuladd_8xf32 (i32, v128, v128, v128, v128, v128, v128) -> ()1125; NOFP16-NEXT:  # %bb.0:1126; NOFP16-NEXT:    f32x4.mul $push0=, $2, $41127; NOFP16-NEXT:    f32x4.add $push1=, $pop0, $61128; NOFP16-NEXT:    v128.store 16($0), $pop11129; NOFP16-NEXT:    f32x4.mul $push2=, $1, $31130; NOFP16-NEXT:    f32x4.add $push3=, $pop2, $51131; NOFP16-NEXT:    v128.store 0($0), $pop31132; NOFP16-NEXT:    return1133;1134; NOSIMD-LABEL: fmuladd_8xf32:1135; NOSIMD:         .functype fmuladd_8xf32 (i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()1136; NOSIMD-NEXT:  # %bb.0:1137; NOSIMD-NEXT:    f32.mul $push0=, $8, $161138; NOSIMD-NEXT:    f32.add $push1=, $pop0, $241139; NOSIMD-NEXT:    f32.store 28($0), $pop11140; NOSIMD-NEXT:    f32.mul $push2=, $7, $151141; NOSIMD-NEXT:    f32.add $push3=, $pop2, $231142; NOSIMD-NEXT:    f32.store 24($0), $pop31143; NOSIMD-NEXT:    f32.mul $push4=, $6, $141144; NOSIMD-NEXT:    f32.add $push5=, $pop4, $221145; NOSIMD-NEXT:    f32.store 20($0), $pop51146; NOSIMD-NEXT:    f32.mul $push6=, $5, $131147; NOSIMD-NEXT:    f32.add $push7=, $pop6, $211148; NOSIMD-NEXT:    f32.store 16($0), $pop71149; NOSIMD-NEXT:    f32.mul $push8=, $4, $121150; NOSIMD-NEXT:    f32.add $push9=, $pop8, $201151; NOSIMD-NEXT:    f32.store 12($0), $pop91152; NOSIMD-NEXT:    f32.mul $push10=, $3, $111153; NOSIMD-NEXT:    f32.add $push11=, $pop10, $191154; NOSIMD-NEXT:    f32.store 8($0), $pop111155; NOSIMD-NEXT:    f32.mul $push12=, $2, $101156; NOSIMD-NEXT:    f32.add $push13=, $pop12, $181157; NOSIMD-NEXT:    f32.store 4($0), $pop131158; NOSIMD-NEXT:    f32.mul $push14=, $1, $91159; NOSIMD-NEXT:    f32.add $push15=, $pop14, $171160; NOSIMD-NEXT:    f32.store 0($0), $pop151161; NOSIMD-NEXT:    return1162  %fma = call <8 x float> @llvm.fmuladd(<8 x float> %a, <8 x float> %b, <8 x float> %c)1163  ret <8 x float> %fma1164}1165 1166define <2 x double> @fmuladd_contract_2xf64(<2 x double> %a, <2 x double> %b, <2 x double> %c) {1167; RELAXED-LABEL: fmuladd_contract_2xf64:1168; RELAXED:         .functype fmuladd_contract_2xf64 (v128, v128, v128) -> (v128)1169; RELAXED-NEXT:  # %bb.0:1170; RELAXED-NEXT:    f64x2.relaxed_madd $push0=, $0, $1, $21171; RELAXED-NEXT:    return $pop01172;1173; STRICT-LABEL: fmuladd_contract_2xf64:1174; STRICT:         .functype fmuladd_contract_2xf64 (v128, v128, v128) -> (v128)1175; STRICT-NEXT:  # %bb.0:1176; STRICT-NEXT:    f64x2.mul $push0=, $0, $11177; STRICT-NEXT:    f64x2.add $push1=, $pop0, $21178; STRICT-NEXT:    return $pop11179;1180; NOFP16-LABEL: fmuladd_contract_2xf64:1181; NOFP16:         .functype fmuladd_contract_2xf64 (v128, v128, v128) -> (v128)1182; NOFP16-NEXT:  # %bb.0:1183; NOFP16-NEXT:    f64x2.mul $push0=, $0, $11184; NOFP16-NEXT:    f64x2.add $push1=, $pop0, $21185; NOFP16-NEXT:    return $pop11186;1187; NOSIMD-LABEL: fmuladd_contract_2xf64:1188; NOSIMD:         .functype fmuladd_contract_2xf64 (i32, f64, f64, f64, f64, f64, f64) -> ()1189; NOSIMD-NEXT:  # %bb.0:1190; NOSIMD-NEXT:    f64.mul $push0=, $2, $41191; NOSIMD-NEXT:    f64.add $push1=, $pop0, $61192; NOSIMD-NEXT:    f64.store 8($0), $pop11193; NOSIMD-NEXT:    f64.mul $push2=, $1, $31194; NOSIMD-NEXT:    f64.add $push3=, $pop2, $51195; NOSIMD-NEXT:    f64.store 0($0), $pop31196; NOSIMD-NEXT:    return1197  %fma = call contract <2 x double> @llvm.fmuladd(<2 x double> %a, <2 x double> %b, <2 x double> %c)1198  ret <2 x double> %fma1199}1200 1201define <2 x double> @fmuladd_2xf64(<2 x double> %a, <2 x double> %b, <2 x double> %c) {1202; RELAXED-LABEL: fmuladd_2xf64:1203; RELAXED:         .functype fmuladd_2xf64 (v128, v128, v128) -> (v128)1204; RELAXED-NEXT:  # %bb.0:1205; RELAXED-NEXT:    f64x2.relaxed_madd $push0=, $0, $1, $21206; RELAXED-NEXT:    return $pop01207;1208; STRICT-LABEL: fmuladd_2xf64:1209; STRICT:         .functype fmuladd_2xf64 (v128, v128, v128) -> (v128)1210; STRICT-NEXT:  # %bb.0:1211; STRICT-NEXT:    f64x2.mul $push0=, $0, $11212; STRICT-NEXT:    f64x2.add $push1=, $pop0, $21213; STRICT-NEXT:    return $pop11214;1215; NOFP16-LABEL: fmuladd_2xf64:1216; NOFP16:         .functype fmuladd_2xf64 (v128, v128, v128) -> (v128)1217; NOFP16-NEXT:  # %bb.0:1218; NOFP16-NEXT:    f64x2.mul $push0=, $0, $11219; NOFP16-NEXT:    f64x2.add $push1=, $pop0, $21220; NOFP16-NEXT:    return $pop11221;1222; NOSIMD-LABEL: fmuladd_2xf64:1223; NOSIMD:         .functype fmuladd_2xf64 (i32, f64, f64, f64, f64, f64, f64) -> ()1224; NOSIMD-NEXT:  # %bb.0:1225; NOSIMD-NEXT:    f64.mul $push0=, $2, $41226; NOSIMD-NEXT:    f64.add $push1=, $pop0, $61227; NOSIMD-NEXT:    f64.store 8($0), $pop11228; NOSIMD-NEXT:    f64.mul $push2=, $1, $31229; NOSIMD-NEXT:    f64.add $push3=, $pop2, $51230; NOSIMD-NEXT:    f64.store 0($0), $pop31231; NOSIMD-NEXT:    return1232  %fma = call <2 x double> @llvm.fmuladd(<2 x double> %a, <2 x double> %b, <2 x double> %c)1233  ret <2 x double> %fma1234}1235 1236define <4 x float> @fma_4xf32(<4 x float> %a, <4 x float> %b, <4 x float> %c) {1237; RELAXED-LABEL: fma_4xf32:1238; RELAXED:         .functype fma_4xf32 (v128, v128, v128) -> (v128)1239; RELAXED-NEXT:  # %bb.0:1240; RELAXED-NEXT:    f32x4.extract_lane $push2=, $0, 01241; RELAXED-NEXT:    f32x4.extract_lane $push1=, $1, 01242; RELAXED-NEXT:    f32x4.extract_lane $push0=, $2, 01243; RELAXED-NEXT:    call $push3=, fmaf, $pop2, $pop1, $pop01244; RELAXED-NEXT:    f32x4.splat $push4=, $pop31245; RELAXED-NEXT:    f32x4.extract_lane $push7=, $0, 11246; RELAXED-NEXT:    f32x4.extract_lane $push6=, $1, 11247; RELAXED-NEXT:    f32x4.extract_lane $push5=, $2, 11248; RELAXED-NEXT:    call $push8=, fmaf, $pop7, $pop6, $pop51249; RELAXED-NEXT:    f32x4.replace_lane $push9=, $pop4, 1, $pop81250; RELAXED-NEXT:    f32x4.extract_lane $push12=, $0, 21251; RELAXED-NEXT:    f32x4.extract_lane $push11=, $1, 21252; RELAXED-NEXT:    f32x4.extract_lane $push10=, $2, 21253; RELAXED-NEXT:    call $push13=, fmaf, $pop12, $pop11, $pop101254; RELAXED-NEXT:    f32x4.replace_lane $push14=, $pop9, 2, $pop131255; RELAXED-NEXT:    f32x4.extract_lane $push17=, $0, 31256; RELAXED-NEXT:    f32x4.extract_lane $push16=, $1, 31257; RELAXED-NEXT:    f32x4.extract_lane $push15=, $2, 31258; RELAXED-NEXT:    call $push18=, fmaf, $pop17, $pop16, $pop151259; RELAXED-NEXT:    f32x4.replace_lane $push19=, $pop14, 3, $pop181260; RELAXED-NEXT:    return $pop191261;1262; STRICT-LABEL: fma_4xf32:1263; STRICT:         .functype fma_4xf32 (v128, v128, v128) -> (v128)1264; STRICT-NEXT:  # %bb.0:1265; STRICT-NEXT:    f32x4.extract_lane $push2=, $0, 01266; STRICT-NEXT:    f32x4.extract_lane $push1=, $1, 01267; STRICT-NEXT:    f32x4.extract_lane $push0=, $2, 01268; STRICT-NEXT:    call $push3=, fmaf, $pop2, $pop1, $pop01269; STRICT-NEXT:    f32x4.splat $push4=, $pop31270; STRICT-NEXT:    f32x4.extract_lane $push7=, $0, 11271; STRICT-NEXT:    f32x4.extract_lane $push6=, $1, 11272; STRICT-NEXT:    f32x4.extract_lane $push5=, $2, 11273; STRICT-NEXT:    call $push8=, fmaf, $pop7, $pop6, $pop51274; STRICT-NEXT:    f32x4.replace_lane $push9=, $pop4, 1, $pop81275; STRICT-NEXT:    f32x4.extract_lane $push12=, $0, 21276; STRICT-NEXT:    f32x4.extract_lane $push11=, $1, 21277; STRICT-NEXT:    f32x4.extract_lane $push10=, $2, 21278; STRICT-NEXT:    call $push13=, fmaf, $pop12, $pop11, $pop101279; STRICT-NEXT:    f32x4.replace_lane $push14=, $pop9, 2, $pop131280; STRICT-NEXT:    f32x4.extract_lane $push17=, $0, 31281; STRICT-NEXT:    f32x4.extract_lane $push16=, $1, 31282; STRICT-NEXT:    f32x4.extract_lane $push15=, $2, 31283; STRICT-NEXT:    call $push18=, fmaf, $pop17, $pop16, $pop151284; STRICT-NEXT:    f32x4.replace_lane $push19=, $pop14, 3, $pop181285; STRICT-NEXT:    return $pop191286;1287; NOFP16-LABEL: fma_4xf32:1288; NOFP16:         .functype fma_4xf32 (v128, v128, v128) -> (v128)1289; NOFP16-NEXT:  # %bb.0:1290; NOFP16-NEXT:    f32x4.extract_lane $push2=, $0, 01291; NOFP16-NEXT:    f32x4.extract_lane $push1=, $1, 01292; NOFP16-NEXT:    f32x4.extract_lane $push0=, $2, 01293; NOFP16-NEXT:    call $push3=, fmaf, $pop2, $pop1, $pop01294; NOFP16-NEXT:    f32x4.splat $push4=, $pop31295; NOFP16-NEXT:    f32x4.extract_lane $push7=, $0, 11296; NOFP16-NEXT:    f32x4.extract_lane $push6=, $1, 11297; NOFP16-NEXT:    f32x4.extract_lane $push5=, $2, 11298; NOFP16-NEXT:    call $push8=, fmaf, $pop7, $pop6, $pop51299; NOFP16-NEXT:    f32x4.replace_lane $push9=, $pop4, 1, $pop81300; NOFP16-NEXT:    f32x4.extract_lane $push12=, $0, 21301; NOFP16-NEXT:    f32x4.extract_lane $push11=, $1, 21302; NOFP16-NEXT:    f32x4.extract_lane $push10=, $2, 21303; NOFP16-NEXT:    call $push13=, fmaf, $pop12, $pop11, $pop101304; NOFP16-NEXT:    f32x4.replace_lane $push14=, $pop9, 2, $pop131305; NOFP16-NEXT:    f32x4.extract_lane $push17=, $0, 31306; NOFP16-NEXT:    f32x4.extract_lane $push16=, $1, 31307; NOFP16-NEXT:    f32x4.extract_lane $push15=, $2, 31308; NOFP16-NEXT:    call $push18=, fmaf, $pop17, $pop16, $pop151309; NOFP16-NEXT:    f32x4.replace_lane $push19=, $pop14, 3, $pop181310; NOFP16-NEXT:    return $pop191311;1312; NOSIMD-LABEL: fma_4xf32:1313; NOSIMD:         .functype fma_4xf32 (i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()1314; NOSIMD-NEXT:  # %bb.0:1315; NOSIMD-NEXT:    call $push0=, fmaf, $4, $8, $121316; NOSIMD-NEXT:    f32.store 12($0), $pop01317; NOSIMD-NEXT:    call $push1=, fmaf, $3, $7, $111318; NOSIMD-NEXT:    f32.store 8($0), $pop11319; NOSIMD-NEXT:    call $push2=, fmaf, $2, $6, $101320; NOSIMD-NEXT:    f32.store 4($0), $pop21321; NOSIMD-NEXT:    call $push3=, fmaf, $1, $5, $91322; NOSIMD-NEXT:    f32.store 0($0), $pop31323; NOSIMD-NEXT:    return1324  %fma = call <4 x float> @llvm.fma(<4 x float> %a, <4 x float> %b, <4 x float> %c)1325  ret <4 x float> %fma1326}1327 1328 1329define <8 x float> @fadd_fmul_contract_8xf32(<8 x float> %a, <8 x float> %b, <8 x float> %c) {1330; RELAXED-LABEL: fadd_fmul_contract_8xf32:1331; RELAXED:         .functype fadd_fmul_contract_8xf32 (i32, v128, v128, v128, v128, v128, v128) -> ()1332; RELAXED-NEXT:  # %bb.0:1333; RELAXED-NEXT:    f32x4.relaxed_madd $push0=, $4, $2, $61334; RELAXED-NEXT:    v128.store 16($0), $pop01335; RELAXED-NEXT:    f32x4.relaxed_madd $push1=, $3, $1, $51336; RELAXED-NEXT:    v128.store 0($0), $pop11337; RELAXED-NEXT:    return1338;1339; STRICT-LABEL: fadd_fmul_contract_8xf32:1340; STRICT:         .functype fadd_fmul_contract_8xf32 (i32, v128, v128, v128, v128, v128, v128) -> ()1341; STRICT-NEXT:  # %bb.0:1342; STRICT-NEXT:    f32x4.mul $push0=, $4, $21343; STRICT-NEXT:    f32x4.add $push1=, $pop0, $61344; STRICT-NEXT:    v128.store 16($0), $pop11345; STRICT-NEXT:    f32x4.mul $push2=, $3, $11346; STRICT-NEXT:    f32x4.add $push3=, $pop2, $51347; STRICT-NEXT:    v128.store 0($0), $pop31348; STRICT-NEXT:    return1349;1350; NOFP16-LABEL: fadd_fmul_contract_8xf32:1351; NOFP16:         .functype fadd_fmul_contract_8xf32 (i32, v128, v128, v128, v128, v128, v128) -> ()1352; NOFP16-NEXT:  # %bb.0:1353; NOFP16-NEXT:    f32x4.mul $push0=, $4, $21354; NOFP16-NEXT:    f32x4.add $push1=, $pop0, $61355; NOFP16-NEXT:    v128.store 16($0), $pop11356; NOFP16-NEXT:    f32x4.mul $push2=, $3, $11357; NOFP16-NEXT:    f32x4.add $push3=, $pop2, $51358; NOFP16-NEXT:    v128.store 0($0), $pop31359; NOFP16-NEXT:    return1360;1361; NOSIMD-LABEL: fadd_fmul_contract_8xf32:1362; NOSIMD:         .functype fadd_fmul_contract_8xf32 (i32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()1363; NOSIMD-NEXT:  # %bb.0:1364; NOSIMD-NEXT:    f32.mul $push0=, $16, $81365; NOSIMD-NEXT:    f32.add $push1=, $pop0, $241366; NOSIMD-NEXT:    f32.store 28($0), $pop11367; NOSIMD-NEXT:    f32.mul $push2=, $15, $71368; NOSIMD-NEXT:    f32.add $push3=, $pop2, $231369; NOSIMD-NEXT:    f32.store 24($0), $pop31370; NOSIMD-NEXT:    f32.mul $push4=, $14, $61371; NOSIMD-NEXT:    f32.add $push5=, $pop4, $221372; NOSIMD-NEXT:    f32.store 20($0), $pop51373; NOSIMD-NEXT:    f32.mul $push6=, $13, $51374; NOSIMD-NEXT:    f32.add $push7=, $pop6, $211375; NOSIMD-NEXT:    f32.store 16($0), $pop71376; NOSIMD-NEXT:    f32.mul $push8=, $12, $41377; NOSIMD-NEXT:    f32.add $push9=, $pop8, $201378; NOSIMD-NEXT:    f32.store 12($0), $pop91379; NOSIMD-NEXT:    f32.mul $push10=, $11, $31380; NOSIMD-NEXT:    f32.add $push11=, $pop10, $191381; NOSIMD-NEXT:    f32.store 8($0), $pop111382; NOSIMD-NEXT:    f32.mul $push12=, $10, $21383; NOSIMD-NEXT:    f32.add $push13=, $pop12, $181384; NOSIMD-NEXT:    f32.store 4($0), $pop131385; NOSIMD-NEXT:    f32.mul $push14=, $9, $11386; NOSIMD-NEXT:    f32.add $push15=, $pop14, $171387; NOSIMD-NEXT:    f32.store 0($0), $pop151388; NOSIMD-NEXT:    return1389  %mul = fmul contract <8 x float> %b, %a1390  %add = fadd contract <8 x float> %mul, %c1391  ret <8 x float> %add1392}1393 1394define <2 x double> @fadd_fmul_contract_2xf64(<2 x double> %a, <2 x double> %b, <2 x double> %c) {1395; RELAXED-LABEL: fadd_fmul_contract_2xf64:1396; RELAXED:         .functype fadd_fmul_contract_2xf64 (v128, v128, v128) -> (v128)1397; RELAXED-NEXT:  # %bb.0:1398; RELAXED-NEXT:    f64x2.relaxed_madd $push0=, $1, $0, $21399; RELAXED-NEXT:    return $pop01400;1401; STRICT-LABEL: fadd_fmul_contract_2xf64:1402; STRICT:         .functype fadd_fmul_contract_2xf64 (v128, v128, v128) -> (v128)1403; STRICT-NEXT:  # %bb.0:1404; STRICT-NEXT:    f64x2.mul $push0=, $1, $01405; STRICT-NEXT:    f64x2.add $push1=, $pop0, $21406; STRICT-NEXT:    return $pop11407;1408; NOFP16-LABEL: fadd_fmul_contract_2xf64:1409; NOFP16:         .functype fadd_fmul_contract_2xf64 (v128, v128, v128) -> (v128)1410; NOFP16-NEXT:  # %bb.0:1411; NOFP16-NEXT:    f64x2.mul $push0=, $1, $01412; NOFP16-NEXT:    f64x2.add $push1=, $pop0, $21413; NOFP16-NEXT:    return $pop11414;1415; NOSIMD-LABEL: fadd_fmul_contract_2xf64:1416; NOSIMD:         .functype fadd_fmul_contract_2xf64 (i32, f64, f64, f64, f64, f64, f64) -> ()1417; NOSIMD-NEXT:  # %bb.0:1418; NOSIMD-NEXT:    f64.mul $push0=, $4, $21419; NOSIMD-NEXT:    f64.add $push1=, $pop0, $61420; NOSIMD-NEXT:    f64.store 8($0), $pop11421; NOSIMD-NEXT:    f64.mul $push2=, $3, $11422; NOSIMD-NEXT:    f64.add $push3=, $pop2, $51423; NOSIMD-NEXT:    f64.store 0($0), $pop31424; NOSIMD-NEXT:    return1425  %mul = fmul contract <2 x double> %b, %a1426  %add = fadd contract <2 x double> %mul, %c1427  ret <2 x double> %add1428}1429 1430define <2 x double> @fadd_fmul_2xf64(<2 x double> %a, <2 x double> %b, <2 x double> %c) {1431; RELAXED-LABEL: fadd_fmul_2xf64:1432; RELAXED:         .functype fadd_fmul_2xf64 (v128, v128, v128) -> (v128)1433; RELAXED-NEXT:  # %bb.0:1434; RELAXED-NEXT:    f64x2.mul $push0=, $1, $01435; RELAXED-NEXT:    f64x2.add $push1=, $pop0, $21436; RELAXED-NEXT:    return $pop11437;1438; STRICT-LABEL: fadd_fmul_2xf64:1439; STRICT:         .functype fadd_fmul_2xf64 (v128, v128, v128) -> (v128)1440; STRICT-NEXT:  # %bb.0:1441; STRICT-NEXT:    f64x2.mul $push0=, $1, $01442; STRICT-NEXT:    f64x2.add $push1=, $pop0, $21443; STRICT-NEXT:    return $pop11444;1445; NOFP16-LABEL: fadd_fmul_2xf64:1446; NOFP16:         .functype fadd_fmul_2xf64 (v128, v128, v128) -> (v128)1447; NOFP16-NEXT:  # %bb.0:1448; NOFP16-NEXT:    f64x2.mul $push0=, $1, $01449; NOFP16-NEXT:    f64x2.add $push1=, $pop0, $21450; NOFP16-NEXT:    return $pop11451;1452; NOSIMD-LABEL: fadd_fmul_2xf64:1453; NOSIMD:         .functype fadd_fmul_2xf64 (i32, f64, f64, f64, f64, f64, f64) -> ()1454; NOSIMD-NEXT:  # %bb.0:1455; NOSIMD-NEXT:    f64.mul $push0=, $4, $21456; NOSIMD-NEXT:    f64.add $push1=, $pop0, $61457; NOSIMD-NEXT:    f64.store 8($0), $pop11458; NOSIMD-NEXT:    f64.mul $push2=, $3, $11459; NOSIMD-NEXT:    f64.add $push3=, $pop2, $51460; NOSIMD-NEXT:    f64.store 0($0), $pop31461; NOSIMD-NEXT:    return1462  %mul = fmul <2 x double> %b, %a1463  %add = fadd <2 x double> %mul, %c1464  ret <2 x double> %add1465}1466 1467define float @fma_f32(float %a, float %b, float %c) {1468; RELAXED-LABEL: fma_f32:1469; RELAXED:         .functype fma_f32 (f32, f32, f32) -> (f32)1470; RELAXED-NEXT:  # %bb.0:1471; RELAXED-NEXT:    call $push0=, fmaf, $0, $1, $21472; RELAXED-NEXT:    return $pop01473;1474; STRICT-LABEL: fma_f32:1475; STRICT:         .functype fma_f32 (f32, f32, f32) -> (f32)1476; STRICT-NEXT:  # %bb.0:1477; STRICT-NEXT:    call $push0=, fmaf, $0, $1, $21478; STRICT-NEXT:    return $pop01479;1480; NOFP16-LABEL: fma_f32:1481; NOFP16:         .functype fma_f32 (f32, f32, f32) -> (f32)1482; NOFP16-NEXT:  # %bb.0:1483; NOFP16-NEXT:    call $push0=, fmaf, $0, $1, $21484; NOFP16-NEXT:    return $pop01485;1486; NOSIMD-LABEL: fma_f32:1487; NOSIMD:         .functype fma_f32 (f32, f32, f32) -> (f32)1488; NOSIMD-NEXT:  # %bb.0:1489; NOSIMD-NEXT:    call $push0=, fmaf, $0, $1, $21490; NOSIMD-NEXT:    return $pop01491  %fma = call float @llvm.fma(float %a, float %b, float %c)1492  ret float %fma1493}1494 1495define double @fma_f64(double %a, double %b, double %c) {1496; RELAXED-LABEL: fma_f64:1497; RELAXED:         .functype fma_f64 (f64, f64, f64) -> (f64)1498; RELAXED-NEXT:  # %bb.0:1499; RELAXED-NEXT:    call $push0=, fma, $0, $1, $21500; RELAXED-NEXT:    return $pop01501;1502; STRICT-LABEL: fma_f64:1503; STRICT:         .functype fma_f64 (f64, f64, f64) -> (f64)1504; STRICT-NEXT:  # %bb.0:1505; STRICT-NEXT:    call $push0=, fma, $0, $1, $21506; STRICT-NEXT:    return $pop01507;1508; NOFP16-LABEL: fma_f64:1509; NOFP16:         .functype fma_f64 (f64, f64, f64) -> (f64)1510; NOFP16-NEXT:  # %bb.0:1511; NOFP16-NEXT:    call $push0=, fma, $0, $1, $21512; NOFP16-NEXT:    return $pop01513;1514; NOSIMD-LABEL: fma_f64:1515; NOSIMD:         .functype fma_f64 (f64, f64, f64) -> (f64)1516; NOSIMD-NEXT:  # %bb.0:1517; NOSIMD-NEXT:    call $push0=, fma, $0, $1, $21518; NOSIMD-NEXT:    return $pop01519  %fma = call double @llvm.fma(double %a, double %b, double %c)1520  ret double %fma1521}1522