brintos

brintos / llvm-project-archived public Read only

0
0
Text · 28.7 KiB · 0e5cd3c Raw
811 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx --fp-contract=fast < %s \3; RUN:   | FileCheck %s --check-prefix=CONTRACT-FAST4; RUN: llc --mtriple=loongarch64 --mattr=+lsx --fp-contract=fast < %s \5; RUN:   | FileCheck %s --check-prefix=CONTRACT-FAST6; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx --fp-contract=on < %s \7; RUN:   | FileCheck %s --check-prefix=CONTRACT-ON8; RUN: llc --mtriple=loongarch64 --mattr=+lsx --fp-contract=on < %s \9; RUN:   | FileCheck %s --check-prefix=CONTRACT-ON10; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx --fp-contract=off < %s \11; RUN:   | FileCheck %s --check-prefix=CONTRACT-OFF12; RUN: llc --mtriple=loongarch64 --mattr=+lsx --fp-contract=off < %s \13; RUN:   | FileCheck %s --check-prefix=CONTRACT-OFF14 15define void @vfmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {16; CONTRACT-FAST-LABEL: vfmadd_s:17; CONTRACT-FAST:       # %bb.0: # %entry18; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 019; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 020; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 021; CONTRACT-FAST-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr222; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 023; CONTRACT-FAST-NEXT:    ret24;25; CONTRACT-ON-LABEL: vfmadd_s:26; CONTRACT-ON:       # %bb.0: # %entry27; CONTRACT-ON-NEXT:    vld $vr0, $a1, 028; CONTRACT-ON-NEXT:    vld $vr1, $a2, 029; CONTRACT-ON-NEXT:    vld $vr2, $a3, 030; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr131; CONTRACT-ON-NEXT:    vfadd.s $vr0, $vr0, $vr232; CONTRACT-ON-NEXT:    vst $vr0, $a0, 033; CONTRACT-ON-NEXT:    ret34;35; CONTRACT-OFF-LABEL: vfmadd_s:36; CONTRACT-OFF:       # %bb.0: # %entry37; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 038; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 039; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 040; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr141; CONTRACT-OFF-NEXT:    vfadd.s $vr0, $vr0, $vr242; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 043; CONTRACT-OFF-NEXT:    ret44entry:45  %v0 = load <4 x float>, ptr %a046  %v1 = load <4 x float>, ptr %a147  %v2 = load <4 x float>, ptr %a248  %mul = fmul<4 x float> %v0, %v149  %add = fadd<4 x float> %mul, %v250  store <4 x float> %add, ptr %res51  ret void52}53 54define void @vfmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {55; CONTRACT-FAST-LABEL: vfmsub_s:56; CONTRACT-FAST:       # %bb.0: # %entry57; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 058; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 059; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 060; CONTRACT-FAST-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr261; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 062; CONTRACT-FAST-NEXT:    ret63;64; CONTRACT-ON-LABEL: vfmsub_s:65; CONTRACT-ON:       # %bb.0: # %entry66; CONTRACT-ON-NEXT:    vld $vr0, $a1, 067; CONTRACT-ON-NEXT:    vld $vr1, $a2, 068; CONTRACT-ON-NEXT:    vld $vr2, $a3, 069; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr170; CONTRACT-ON-NEXT:    vfsub.s $vr0, $vr0, $vr271; CONTRACT-ON-NEXT:    vst $vr0, $a0, 072; CONTRACT-ON-NEXT:    ret73;74; CONTRACT-OFF-LABEL: vfmsub_s:75; CONTRACT-OFF:       # %bb.0: # %entry76; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 077; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 078; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 079; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr180; CONTRACT-OFF-NEXT:    vfsub.s $vr0, $vr0, $vr281; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 082; CONTRACT-OFF-NEXT:    ret83entry:84  %v0 = load <4 x float>, ptr %a085  %v1 = load <4 x float>, ptr %a186  %v2 = load <4 x float>, ptr %a287  %mul = fmul<4 x float> %v0, %v188  %sub = fsub<4 x float> %mul, %v289  store <4 x float> %sub, ptr %res90  ret void91}92 93define void @vfnmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {94; CONTRACT-FAST-LABEL: vfnmadd_s:95; CONTRACT-FAST:       # %bb.0: # %entry96; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 097; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 098; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 099; CONTRACT-FAST-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2100; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0101; CONTRACT-FAST-NEXT:    ret102;103; CONTRACT-ON-LABEL: vfnmadd_s:104; CONTRACT-ON:       # %bb.0: # %entry105; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0106; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0107; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0108; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr1109; CONTRACT-ON-NEXT:    vfadd.s $vr0, $vr0, $vr2110; CONTRACT-ON-NEXT:    vbitrevi.w $vr0, $vr0, 31111; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0112; CONTRACT-ON-NEXT:    ret113;114; CONTRACT-OFF-LABEL: vfnmadd_s:115; CONTRACT-OFF:       # %bb.0: # %entry116; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0117; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0118; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0119; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr1120; CONTRACT-OFF-NEXT:    vfadd.s $vr0, $vr0, $vr2121; CONTRACT-OFF-NEXT:    vbitrevi.w $vr0, $vr0, 31122; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0123; CONTRACT-OFF-NEXT:    ret124entry:125  %v0 = load <4 x float>, ptr %a0126  %v1 = load <4 x float>, ptr %a1127  %v2 = load <4 x float>, ptr %a2128  %mul = fmul<4 x float> %v0, %v1129  %add = fadd<4 x float> %mul, %v2130  %negadd = fneg<4 x float> %add131  store <4 x float> %negadd, ptr %res132  ret void133}134 135define void @vfnmadd_s_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {136; CONTRACT-FAST-LABEL: vfnmadd_s_nsz:137; CONTRACT-FAST:       # %bb.0: # %entry138; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0139; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0140; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0141; CONTRACT-FAST-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2142; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0143; CONTRACT-FAST-NEXT:    ret144;145; CONTRACT-ON-LABEL: vfnmadd_s_nsz:146; CONTRACT-ON:       # %bb.0: # %entry147; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0148; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0149; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0150; CONTRACT-ON-NEXT:    vbitrevi.w $vr0, $vr0, 31151; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr1152; CONTRACT-ON-NEXT:    vfsub.s $vr0, $vr0, $vr2153; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0154; CONTRACT-ON-NEXT:    ret155;156; CONTRACT-OFF-LABEL: vfnmadd_s_nsz:157; CONTRACT-OFF:       # %bb.0: # %entry158; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0159; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0160; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0161; CONTRACT-OFF-NEXT:    vbitrevi.w $vr0, $vr0, 31162; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr1163; CONTRACT-OFF-NEXT:    vfsub.s $vr0, $vr0, $vr2164; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0165; CONTRACT-OFF-NEXT:    ret166entry:167  %v0 = load <4 x float>, ptr %a0168  %v1 = load <4 x float>, ptr %a1169  %v2 = load <4 x float>, ptr %a2170  %negv0 = fneg nsz<4 x float> %v0171  %negv2 = fneg nsz<4 x float> %v2172  %mul = fmul nsz<4 x float> %negv0, %v1173  %add = fadd nsz<4 x float> %mul, %negv2174  store <4 x float> %add, ptr %res175  ret void176}177 178;; Check that vfnmadd.s is not emitted.179define void @not_vfnmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {180; CONTRACT-FAST-LABEL: not_vfnmadd_s:181; CONTRACT-FAST:       # %bb.0: # %entry182; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0183; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0184; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0185; CONTRACT-FAST-NEXT:    vbitrevi.w $vr0, $vr0, 31186; CONTRACT-FAST-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2187; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0188; CONTRACT-FAST-NEXT:    ret189;190; CONTRACT-ON-LABEL: not_vfnmadd_s:191; CONTRACT-ON:       # %bb.0: # %entry192; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0193; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0194; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0195; CONTRACT-ON-NEXT:    vbitrevi.w $vr0, $vr0, 31196; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr1197; CONTRACT-ON-NEXT:    vfsub.s $vr0, $vr0, $vr2198; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0199; CONTRACT-ON-NEXT:    ret200;201; CONTRACT-OFF-LABEL: not_vfnmadd_s:202; CONTRACT-OFF:       # %bb.0: # %entry203; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0204; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0205; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0206; CONTRACT-OFF-NEXT:    vbitrevi.w $vr0, $vr0, 31207; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr1208; CONTRACT-OFF-NEXT:    vfsub.s $vr0, $vr0, $vr2209; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0210; CONTRACT-OFF-NEXT:    ret211entry:212  %v0 = load <4 x float>, ptr %a0213  %v1 = load <4 x float>, ptr %a1214  %v2 = load <4 x float>, ptr %a2215  %negv0 = fneg<4 x float> %v0216  %negv2 = fneg<4 x float> %v2217  %mul = fmul<4 x float> %negv0, %v1218  %add = fadd<4 x float> %mul, %negv2219  store <4 x float> %add, ptr %res220  ret void221}222 223define void @vfnmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {224; CONTRACT-FAST-LABEL: vfnmsub_s:225; CONTRACT-FAST:       # %bb.0: # %entry226; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0227; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0228; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0229; CONTRACT-FAST-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2230; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0231; CONTRACT-FAST-NEXT:    ret232;233; CONTRACT-ON-LABEL: vfnmsub_s:234; CONTRACT-ON:       # %bb.0: # %entry235; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0236; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0237; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0238; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr1239; CONTRACT-ON-NEXT:    vfsub.s $vr0, $vr0, $vr2240; CONTRACT-ON-NEXT:    vbitrevi.w $vr0, $vr0, 31241; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0242; CONTRACT-ON-NEXT:    ret243;244; CONTRACT-OFF-LABEL: vfnmsub_s:245; CONTRACT-OFF:       # %bb.0: # %entry246; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0247; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0248; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0249; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr1250; CONTRACT-OFF-NEXT:    vfsub.s $vr0, $vr0, $vr2251; CONTRACT-OFF-NEXT:    vbitrevi.w $vr0, $vr0, 31252; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0253; CONTRACT-OFF-NEXT:    ret254entry:255  %v0 = load <4 x float>, ptr %a0256  %v1 = load <4 x float>, ptr %a1257  %v2 = load <4 x float>, ptr %a2258  %negv2 = fneg<4 x float> %v2259  %mul = fmul<4 x float> %v0, %v1260  %add = fadd<4 x float> %mul, %negv2261  %neg = fneg<4 x float> %add262  store <4 x float> %neg, ptr %res263  ret void264}265 266define void @vfnmsub_s_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {267; CONTRACT-FAST-LABEL: vfnmsub_s_nsz:268; CONTRACT-FAST:       # %bb.0: # %entry269; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0270; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0271; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0272; CONTRACT-FAST-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2273; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0274; CONTRACT-FAST-NEXT:    ret275;276; CONTRACT-ON-LABEL: vfnmsub_s_nsz:277; CONTRACT-ON:       # %bb.0: # %entry278; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0279; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0280; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0281; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr1282; CONTRACT-ON-NEXT:    vfsub.s $vr0, $vr2, $vr0283; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0284; CONTRACT-ON-NEXT:    ret285;286; CONTRACT-OFF-LABEL: vfnmsub_s_nsz:287; CONTRACT-OFF:       # %bb.0: # %entry288; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0289; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0290; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0291; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr1292; CONTRACT-OFF-NEXT:    vfsub.s $vr0, $vr2, $vr0293; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0294; CONTRACT-OFF-NEXT:    ret295entry:296  %v0 = load <4 x float>, ptr %a0297  %v1 = load <4 x float>, ptr %a1298  %v2 = load <4 x float>, ptr %a2299  %negv0 = fneg nsz<4 x float> %v0300  %mul = fmul nsz<4 x float> %negv0, %v1301  %add = fadd nsz<4 x float> %mul, %v2302  store <4 x float> %add, ptr %res303  ret void304}305 306;; Check that vfnmsub.s is not emitted.307define void @not_vfnmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {308; CONTRACT-FAST-LABEL: not_vfnmsub_s:309; CONTRACT-FAST:       # %bb.0: # %entry310; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0311; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0312; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0313; CONTRACT-FAST-NEXT:    vbitrevi.w $vr0, $vr0, 31314; CONTRACT-FAST-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2315; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0316; CONTRACT-FAST-NEXT:    ret317;318; CONTRACT-ON-LABEL: not_vfnmsub_s:319; CONTRACT-ON:       # %bb.0: # %entry320; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0321; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0322; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0323; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr1324; CONTRACT-ON-NEXT:    vfsub.s $vr0, $vr2, $vr0325; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0326; CONTRACT-ON-NEXT:    ret327;328; CONTRACT-OFF-LABEL: not_vfnmsub_s:329; CONTRACT-OFF:       # %bb.0: # %entry330; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0331; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0332; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0333; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr1334; CONTRACT-OFF-NEXT:    vfsub.s $vr0, $vr2, $vr0335; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0336; CONTRACT-OFF-NEXT:    ret337entry:338  %v0 = load <4 x float>, ptr %a0339  %v1 = load <4 x float>, ptr %a1340  %v2 = load <4 x float>, ptr %a2341  %negv0 = fneg<4 x float> %v0342  %mul = fmul<4 x float> %negv0, %v1343  %add = fadd<4 x float> %mul, %v2344  store <4 x float> %add, ptr %res345  ret void346}347 348define void @contract_vfmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {349; CONTRACT-FAST-LABEL: contract_vfmadd_s:350; CONTRACT-FAST:       # %bb.0: # %entry351; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0352; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0353; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0354; CONTRACT-FAST-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2355; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0356; CONTRACT-FAST-NEXT:    ret357;358; CONTRACT-ON-LABEL: contract_vfmadd_s:359; CONTRACT-ON:       # %bb.0: # %entry360; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0361; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0362; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0363; CONTRACT-ON-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2364; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0365; CONTRACT-ON-NEXT:    ret366;367; CONTRACT-OFF-LABEL: contract_vfmadd_s:368; CONTRACT-OFF:       # %bb.0: # %entry369; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0370; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0371; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0372; CONTRACT-OFF-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2373; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0374; CONTRACT-OFF-NEXT:    ret375entry:376  %v0 = load <4 x float>, ptr %a0377  %v1 = load <4 x float>, ptr %a1378  %v2 = load <4 x float>, ptr %a2379  %mul = fmul contract <4 x float> %v0, %v1380  %add = fadd contract <4 x float> %mul, %v2381  store <4 x float> %add, ptr %res382  ret void383}384 385define void @contract_vfmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {386; CONTRACT-FAST-LABEL: contract_vfmsub_s:387; CONTRACT-FAST:       # %bb.0: # %entry388; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0389; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0390; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0391; CONTRACT-FAST-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2392; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0393; CONTRACT-FAST-NEXT:    ret394;395; CONTRACT-ON-LABEL: contract_vfmsub_s:396; CONTRACT-ON:       # %bb.0: # %entry397; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0398; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0399; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0400; CONTRACT-ON-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2401; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0402; CONTRACT-ON-NEXT:    ret403;404; CONTRACT-OFF-LABEL: contract_vfmsub_s:405; CONTRACT-OFF:       # %bb.0: # %entry406; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0407; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0408; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0409; CONTRACT-OFF-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2410; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0411; CONTRACT-OFF-NEXT:    ret412entry:413  %v0 = load <4 x float>, ptr %a0414  %v1 = load <4 x float>, ptr %a1415  %v2 = load <4 x float>, ptr %a2416  %mul = fmul contract <4 x float> %v0, %v1417  %sub = fsub contract <4 x float> %mul, %v2418  store <4 x float> %sub, ptr %res419  ret void420}421 422define void @contract_vfnmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {423; CONTRACT-FAST-LABEL: contract_vfnmadd_s:424; CONTRACT-FAST:       # %bb.0: # %entry425; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0426; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0427; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0428; CONTRACT-FAST-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2429; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0430; CONTRACT-FAST-NEXT:    ret431;432; CONTRACT-ON-LABEL: contract_vfnmadd_s:433; CONTRACT-ON:       # %bb.0: # %entry434; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0435; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0436; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0437; CONTRACT-ON-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2438; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0439; CONTRACT-ON-NEXT:    ret440;441; CONTRACT-OFF-LABEL: contract_vfnmadd_s:442; CONTRACT-OFF:       # %bb.0: # %entry443; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0444; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0445; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0446; CONTRACT-OFF-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2447; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0448; CONTRACT-OFF-NEXT:    ret449entry:450  %v0 = load <4 x float>, ptr %a0451  %v1 = load <4 x float>, ptr %a1452  %v2 = load <4 x float>, ptr %a2453  %mul = fmul contract <4 x float> %v0, %v1454  %add = fadd contract <4 x float> %mul, %v2455  %negadd = fneg contract <4 x float> %add456  store <4 x float> %negadd, ptr %res457  ret void458}459 460define void @contract_vfnmadd_s_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {461; CONTRACT-FAST-LABEL: contract_vfnmadd_s_nsz:462; CONTRACT-FAST:       # %bb.0: # %entry463; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0464; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0465; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0466; CONTRACT-FAST-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2467; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0468; CONTRACT-FAST-NEXT:    ret469;470; CONTRACT-ON-LABEL: contract_vfnmadd_s_nsz:471; CONTRACT-ON:       # %bb.0: # %entry472; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0473; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0474; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0475; CONTRACT-ON-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2476; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0477; CONTRACT-ON-NEXT:    ret478;479; CONTRACT-OFF-LABEL: contract_vfnmadd_s_nsz:480; CONTRACT-OFF:       # %bb.0: # %entry481; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0482; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0483; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0484; CONTRACT-OFF-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2485; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0486; CONTRACT-OFF-NEXT:    ret487entry:488  %v0 = load <4 x float>, ptr %a0489  %v1 = load <4 x float>, ptr %a1490  %v2 = load <4 x float>, ptr %a2491  %negv0 = fneg contract nsz<4 x float> %v0492  %negv2 = fneg contract nsz<4 x float> %v2493  %mul = fmul contract nsz<4 x float> %negv0, %v1494  %add = fadd contract nsz<4 x float> %mul, %negv2495  store <4 x float> %add, ptr %res496  ret void497}498 499;; Check that vfnmadd.s is not emitted.500define void @not_contract_vfnmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {501; CONTRACT-FAST-LABEL: not_contract_vfnmadd_s:502; CONTRACT-FAST:       # %bb.0: # %entry503; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0504; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0505; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0506; CONTRACT-FAST-NEXT:    vbitrevi.w $vr0, $vr0, 31507; CONTRACT-FAST-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2508; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0509; CONTRACT-FAST-NEXT:    ret510;511; CONTRACT-ON-LABEL: not_contract_vfnmadd_s:512; CONTRACT-ON:       # %bb.0: # %entry513; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0514; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0515; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0516; CONTRACT-ON-NEXT:    vbitrevi.w $vr0, $vr0, 31517; CONTRACT-ON-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2518; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0519; CONTRACT-ON-NEXT:    ret520;521; CONTRACT-OFF-LABEL: not_contract_vfnmadd_s:522; CONTRACT-OFF:       # %bb.0: # %entry523; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0524; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0525; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0526; CONTRACT-OFF-NEXT:    vbitrevi.w $vr0, $vr0, 31527; CONTRACT-OFF-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2528; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0529; CONTRACT-OFF-NEXT:    ret530entry:531  %v0 = load <4 x float>, ptr %a0532  %v1 = load <4 x float>, ptr %a1533  %v2 = load <4 x float>, ptr %a2534  %negv0 = fneg contract <4 x float> %v0535  %negv2 = fneg contract <4 x float> %v2536  %mul = fmul contract <4 x float> %negv0, %v1537  %add = fadd contract <4 x float> %mul, %negv2538  store <4 x float> %add, ptr %res539  ret void540}541 542define void @contract_vfnmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {543; CONTRACT-FAST-LABEL: contract_vfnmsub_s:544; CONTRACT-FAST:       # %bb.0: # %entry545; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0546; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0547; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0548; CONTRACT-FAST-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2549; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0550; CONTRACT-FAST-NEXT:    ret551;552; CONTRACT-ON-LABEL: contract_vfnmsub_s:553; CONTRACT-ON:       # %bb.0: # %entry554; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0555; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0556; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0557; CONTRACT-ON-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2558; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0559; CONTRACT-ON-NEXT:    ret560;561; CONTRACT-OFF-LABEL: contract_vfnmsub_s:562; CONTRACT-OFF:       # %bb.0: # %entry563; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0564; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0565; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0566; CONTRACT-OFF-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2567; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0568; CONTRACT-OFF-NEXT:    ret569entry:570  %v0 = load <4 x float>, ptr %a0571  %v1 = load <4 x float>, ptr %a1572  %v2 = load <4 x float>, ptr %a2573  %negv2 = fneg contract <4 x float> %v2574  %mul = fmul contract <4 x float> %v0, %v1575  %add = fadd contract <4 x float> %mul, %negv2576  %neg = fneg contract <4 x float> %add577  store <4 x float> %neg, ptr %res578  ret void579}580 581define void @contract_vfnmsub_s_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {582; CONTRACT-FAST-LABEL: contract_vfnmsub_s_nsz:583; CONTRACT-FAST:       # %bb.0: # %entry584; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0585; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0586; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0587; CONTRACT-FAST-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2588; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0589; CONTRACT-FAST-NEXT:    ret590;591; CONTRACT-ON-LABEL: contract_vfnmsub_s_nsz:592; CONTRACT-ON:       # %bb.0: # %entry593; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0594; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0595; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0596; CONTRACT-ON-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2597; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0598; CONTRACT-ON-NEXT:    ret599;600; CONTRACT-OFF-LABEL: contract_vfnmsub_s_nsz:601; CONTRACT-OFF:       # %bb.0: # %entry602; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0603; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0604; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0605; CONTRACT-OFF-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2606; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0607; CONTRACT-OFF-NEXT:    ret608entry:609  %v0 = load <4 x float>, ptr %a0610  %v1 = load <4 x float>, ptr %a1611  %v2 = load <4 x float>, ptr %a2612  %negv0 = fneg contract nsz<4 x float> %v0613  %mul = fmul contract nsz<4 x float> %negv0, %v1614  %add = fadd contract nsz<4 x float> %mul, %v2615  store <4 x float> %add, ptr %res616  ret void617}618 619;; Check that vfnmsub.s is not emitted.620define void @not_contract_vfnmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {621; CONTRACT-FAST-LABEL: not_contract_vfnmsub_s:622; CONTRACT-FAST:       # %bb.0: # %entry623; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0624; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0625; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0626; CONTRACT-FAST-NEXT:    vbitrevi.w $vr0, $vr0, 31627; CONTRACT-FAST-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2628; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0629; CONTRACT-FAST-NEXT:    ret630;631; CONTRACT-ON-LABEL: not_contract_vfnmsub_s:632; CONTRACT-ON:       # %bb.0: # %entry633; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0634; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0635; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0636; CONTRACT-ON-NEXT:    vbitrevi.w $vr0, $vr0, 31637; CONTRACT-ON-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2638; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0639; CONTRACT-ON-NEXT:    ret640;641; CONTRACT-OFF-LABEL: not_contract_vfnmsub_s:642; CONTRACT-OFF:       # %bb.0: # %entry643; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0644; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0645; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0646; CONTRACT-OFF-NEXT:    vbitrevi.w $vr0, $vr0, 31647; CONTRACT-OFF-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2648; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0649; CONTRACT-OFF-NEXT:    ret650entry:651  %v0 = load <4 x float>, ptr %a0652  %v1 = load <4 x float>, ptr %a1653  %v2 = load <4 x float>, ptr %a2654  %negv0 = fneg contract <4 x float> %v0655  %mul = fmul contract <4 x float> %negv0, %v1656  %add = fadd contract <4 x float> %mul, %v2657  store <4 x float> %add, ptr %res658  ret void659}660 661define void @vfmadd_s_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {662; CONTRACT-FAST-LABEL: vfmadd_s_contract:663; CONTRACT-FAST:       # %bb.0: # %entry664; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0665; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0666; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0667; CONTRACT-FAST-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2668; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0669; CONTRACT-FAST-NEXT:    ret670;671; CONTRACT-ON-LABEL: vfmadd_s_contract:672; CONTRACT-ON:       # %bb.0: # %entry673; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0674; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0675; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0676; CONTRACT-ON-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2677; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0678; CONTRACT-ON-NEXT:    ret679;680; CONTRACT-OFF-LABEL: vfmadd_s_contract:681; CONTRACT-OFF:       # %bb.0: # %entry682; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0683; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0684; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0685; CONTRACT-OFF-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2686; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0687; CONTRACT-OFF-NEXT:    ret688entry:689  %v0 = load <4 x float>, ptr %a0690  %v1 = load <4 x float>, ptr %a1691  %v2 = load <4 x float>, ptr %a2692  %mul = fmul contract <4 x float> %v0, %v1693  %add = fadd contract <4 x float> %mul, %v2694  store <4 x float> %add, ptr %res695  ret void696}697 698define void @vfmsub_s_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {699; CONTRACT-FAST-LABEL: vfmsub_s_contract:700; CONTRACT-FAST:       # %bb.0: # %entry701; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0702; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0703; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0704; CONTRACT-FAST-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2705; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0706; CONTRACT-FAST-NEXT:    ret707;708; CONTRACT-ON-LABEL: vfmsub_s_contract:709; CONTRACT-ON:       # %bb.0: # %entry710; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0711; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0712; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0713; CONTRACT-ON-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2714; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0715; CONTRACT-ON-NEXT:    ret716;717; CONTRACT-OFF-LABEL: vfmsub_s_contract:718; CONTRACT-OFF:       # %bb.0: # %entry719; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0720; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0721; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0722; CONTRACT-OFF-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2723; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0724; CONTRACT-OFF-NEXT:    ret725entry:726  %v0 = load <4 x float>, ptr %a0727  %v1 = load <4 x float>, ptr %a1728  %v2 = load <4 x float>, ptr %a2729  %mul = fmul contract <4 x float> %v0, %v1730  %sub = fsub contract <4 x float> %mul, %v2731  store <4 x float> %sub, ptr %res732  ret void733}734 735define void @vfnmadd_s_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {736; CONTRACT-FAST-LABEL: vfnmadd_s_contract:737; CONTRACT-FAST:       # %bb.0: # %entry738; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0739; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0740; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0741; CONTRACT-FAST-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2742; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0743; CONTRACT-FAST-NEXT:    ret744;745; CONTRACT-ON-LABEL: vfnmadd_s_contract:746; CONTRACT-ON:       # %bb.0: # %entry747; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0748; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0749; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0750; CONTRACT-ON-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2751; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0752; CONTRACT-ON-NEXT:    ret753;754; CONTRACT-OFF-LABEL: vfnmadd_s_contract:755; CONTRACT-OFF:       # %bb.0: # %entry756; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0757; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0758; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0759; CONTRACT-OFF-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2760; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0761; CONTRACT-OFF-NEXT:    ret762entry:763  %v0 = load <4 x float>, ptr %a0764  %v1 = load <4 x float>, ptr %a1765  %v2 = load <4 x float>, ptr %a2766  %mul = fmul contract <4 x float> %v0, %v1767  %add = fadd contract <4 x float> %mul, %v2768  %negadd = fneg contract <4 x float> %add769  store <4 x float> %negadd, ptr %res770  ret void771}772 773define void @vfnmsub_s_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {774; CONTRACT-FAST-LABEL: vfnmsub_s_contract:775; CONTRACT-FAST:       # %bb.0: # %entry776; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0777; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0778; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0779; CONTRACT-FAST-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2780; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0781; CONTRACT-FAST-NEXT:    ret782;783; CONTRACT-ON-LABEL: vfnmsub_s_contract:784; CONTRACT-ON:       # %bb.0: # %entry785; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0786; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0787; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0788; CONTRACT-ON-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2789; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0790; CONTRACT-ON-NEXT:    ret791;792; CONTRACT-OFF-LABEL: vfnmsub_s_contract:793; CONTRACT-OFF:       # %bb.0: # %entry794; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0795; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0796; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0797; CONTRACT-OFF-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2798; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0799; CONTRACT-OFF-NEXT:    ret800entry:801  %v0 = load <4 x float>, ptr %a0802  %v1 = load <4 x float>, ptr %a1803  %v2 = load <4 x float>, ptr %a2804  %mul = fmul contract <4 x float> %v0, %v1805  %negv2 = fneg contract <4 x float> %v2806  %add = fadd contract <4 x float> %negv2, %mul807  %negadd = fneg contract <4 x float> %add808  store <4 x float> %negadd, ptr %res809  ret void810}811