brintos

brintos / llvm-project-archived public Read only

0
0
Text · 55.5 KiB · 8e1ba7e Raw
1383 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx --fp-contract=fast < %s \3; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT-FAST4; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx --fp-contract=on < %s \5; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT-ON6; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx --fp-contract=off < %s \7; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT-OFF8; RUN: llc --mtriple=loongarch64 --mattr=+lasx --fp-contract=fast < %s \9; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT-FAST10; RUN: llc --mtriple=loongarch64 --mattr=+lasx --fp-contract=on < %s \11; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT-ON12; RUN: llc --mtriple=loongarch64 --mattr=+lasx --fp-contract=off < %s \13; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT-OFF14 15define void @xvfmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {16; LA32-CONTRACT-FAST-LABEL: xvfmadd_d:17; LA32-CONTRACT-FAST:       # %bb.0: # %entry18; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 019; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 020; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 021; LA32-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr222; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 023; LA32-CONTRACT-FAST-NEXT:    ret24;25; LA32-CONTRACT-ON-LABEL: xvfmadd_d:26; LA32-CONTRACT-ON:       # %bb.0: # %entry27; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 028; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 029; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 030; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr131; LA32-CONTRACT-ON-NEXT:    xvfadd.d $xr0, $xr0, $xr232; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 033; LA32-CONTRACT-ON-NEXT:    ret34;35; LA32-CONTRACT-OFF-LABEL: xvfmadd_d:36; LA32-CONTRACT-OFF:       # %bb.0: # %entry37; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 038; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 039; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 040; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr141; LA32-CONTRACT-OFF-NEXT:    xvfadd.d $xr0, $xr0, $xr242; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 043; LA32-CONTRACT-OFF-NEXT:    ret44;45; LA64-CONTRACT-FAST-LABEL: xvfmadd_d:46; LA64-CONTRACT-FAST:       # %bb.0: # %entry47; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 048; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 049; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 050; LA64-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr251; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 052; LA64-CONTRACT-FAST-NEXT:    ret53;54; LA64-CONTRACT-ON-LABEL: xvfmadd_d:55; LA64-CONTRACT-ON:       # %bb.0: # %entry56; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 057; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 058; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 059; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr160; LA64-CONTRACT-ON-NEXT:    xvfadd.d $xr0, $xr0, $xr261; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 062; LA64-CONTRACT-ON-NEXT:    ret63;64; LA64-CONTRACT-OFF-LABEL: xvfmadd_d:65; LA64-CONTRACT-OFF:       # %bb.0: # %entry66; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 067; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 068; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 069; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr170; LA64-CONTRACT-OFF-NEXT:    xvfadd.d $xr0, $xr0, $xr271; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 072; LA64-CONTRACT-OFF-NEXT:    ret73entry:74  %v0 = load <4 x double>, ptr %a075  %v1 = load <4 x double>, ptr %a176  %v2 = load <4 x double>, ptr %a277  %mul = fmul<4 x double> %v0, %v178  %add = fadd<4 x double> %mul, %v279  store <4 x double> %add, ptr %res80  ret void81}82 83define void @xvfmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {84; LA32-CONTRACT-FAST-LABEL: xvfmsub_d:85; LA32-CONTRACT-FAST:       # %bb.0: # %entry86; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 087; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 088; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 089; LA32-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr290; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 091; LA32-CONTRACT-FAST-NEXT:    ret92;93; LA32-CONTRACT-ON-LABEL: xvfmsub_d:94; LA32-CONTRACT-ON:       # %bb.0: # %entry95; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 096; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 097; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 098; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr199; LA32-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2100; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0101; LA32-CONTRACT-ON-NEXT:    ret102;103; LA32-CONTRACT-OFF-LABEL: xvfmsub_d:104; LA32-CONTRACT-OFF:       # %bb.0: # %entry105; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0106; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0107; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0108; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1109; LA32-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2110; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0111; LA32-CONTRACT-OFF-NEXT:    ret112;113; LA64-CONTRACT-FAST-LABEL: xvfmsub_d:114; LA64-CONTRACT-FAST:       # %bb.0: # %entry115; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0116; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0117; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0118; LA64-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2119; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0120; LA64-CONTRACT-FAST-NEXT:    ret121;122; LA64-CONTRACT-ON-LABEL: xvfmsub_d:123; LA64-CONTRACT-ON:       # %bb.0: # %entry124; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0125; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0126; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0127; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1128; LA64-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2129; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0130; LA64-CONTRACT-ON-NEXT:    ret131;132; LA64-CONTRACT-OFF-LABEL: xvfmsub_d:133; LA64-CONTRACT-OFF:       # %bb.0: # %entry134; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0135; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0136; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0137; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1138; LA64-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2139; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0140; LA64-CONTRACT-OFF-NEXT:    ret141entry:142  %v0 = load <4 x double>, ptr %a0143  %v1 = load <4 x double>, ptr %a1144  %v2 = load <4 x double>, ptr %a2145  %mul = fmul<4 x double> %v0, %v1146  %sub = fsub<4 x double> %mul, %v2147  store <4 x double> %sub, ptr %res148  ret void149}150 151define void @xvfnmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {152; LA32-CONTRACT-FAST-LABEL: xvfnmadd_d:153; LA32-CONTRACT-FAST:       # %bb.0: # %entry154; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0155; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0156; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0157; LA32-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2158; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0159; LA32-CONTRACT-FAST-NEXT:    ret160;161; LA32-CONTRACT-ON-LABEL: xvfnmadd_d:162; LA32-CONTRACT-ON:       # %bb.0: # %entry163; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0164; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0165; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0166; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1167; LA32-CONTRACT-ON-NEXT:    xvfadd.d $xr0, $xr0, $xr2168; LA32-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63169; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0170; LA32-CONTRACT-ON-NEXT:    ret171;172; LA32-CONTRACT-OFF-LABEL: xvfnmadd_d:173; LA32-CONTRACT-OFF:       # %bb.0: # %entry174; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0175; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0176; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0177; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1178; LA32-CONTRACT-OFF-NEXT:    xvfadd.d $xr0, $xr0, $xr2179; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63180; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0181; LA32-CONTRACT-OFF-NEXT:    ret182;183; LA64-CONTRACT-FAST-LABEL: xvfnmadd_d:184; LA64-CONTRACT-FAST:       # %bb.0: # %entry185; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0186; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0187; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0188; LA64-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2189; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0190; LA64-CONTRACT-FAST-NEXT:    ret191;192; LA64-CONTRACT-ON-LABEL: xvfnmadd_d:193; LA64-CONTRACT-ON:       # %bb.0: # %entry194; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0195; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0196; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0197; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1198; LA64-CONTRACT-ON-NEXT:    xvfadd.d $xr0, $xr0, $xr2199; LA64-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63200; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0201; LA64-CONTRACT-ON-NEXT:    ret202;203; LA64-CONTRACT-OFF-LABEL: xvfnmadd_d:204; LA64-CONTRACT-OFF:       # %bb.0: # %entry205; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0206; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0207; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0208; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1209; LA64-CONTRACT-OFF-NEXT:    xvfadd.d $xr0, $xr0, $xr2210; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63211; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0212; LA64-CONTRACT-OFF-NEXT:    ret213entry:214  %v0 = load <4 x double>, ptr %a0215  %v1 = load <4 x double>, ptr %a1216  %v2 = load <4 x double>, ptr %a2217  %mul = fmul<4 x double> %v0, %v1218  %add = fadd<4 x double> %mul, %v2219  %negadd = fneg<4 x double> %add220  store <4 x double> %negadd, ptr %res221  ret void222}223 224define void @xvfnmadd_d_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {225; LA32-CONTRACT-FAST-LABEL: xvfnmadd_d_nsz:226; LA32-CONTRACT-FAST:       # %bb.0: # %entry227; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0228; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0229; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0230; LA32-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2231; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0232; LA32-CONTRACT-FAST-NEXT:    ret233;234; LA32-CONTRACT-ON-LABEL: xvfnmadd_d_nsz:235; LA32-CONTRACT-ON:       # %bb.0: # %entry236; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0237; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0238; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0239; LA32-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63240; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1241; LA32-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2242; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0243; LA32-CONTRACT-ON-NEXT:    ret244;245; LA32-CONTRACT-OFF-LABEL: xvfnmadd_d_nsz:246; LA32-CONTRACT-OFF:       # %bb.0: # %entry247; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0248; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0249; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0250; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63251; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1252; LA32-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2253; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0254; LA32-CONTRACT-OFF-NEXT:    ret255;256; LA64-CONTRACT-FAST-LABEL: xvfnmadd_d_nsz:257; LA64-CONTRACT-FAST:       # %bb.0: # %entry258; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0259; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0260; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0261; LA64-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2262; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0263; LA64-CONTRACT-FAST-NEXT:    ret264;265; LA64-CONTRACT-ON-LABEL: xvfnmadd_d_nsz:266; LA64-CONTRACT-ON:       # %bb.0: # %entry267; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0268; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0269; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0270; LA64-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63271; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1272; LA64-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2273; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0274; LA64-CONTRACT-ON-NEXT:    ret275;276; LA64-CONTRACT-OFF-LABEL: xvfnmadd_d_nsz:277; LA64-CONTRACT-OFF:       # %bb.0: # %entry278; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0279; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0280; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0281; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63282; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1283; LA64-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2284; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0285; LA64-CONTRACT-OFF-NEXT:    ret286entry:287  %v0 = load <4 x double>, ptr %a0288  %v1 = load <4 x double>, ptr %a1289  %v2 = load <4 x double>, ptr %a2290  %negv0 = fneg nsz<4 x double> %v0291  %negv2 = fneg nsz<4 x double> %v2292  %mul = fmul nsz<4 x double> %negv0, %v1293  %add = fadd nsz<4 x double> %mul, %negv2294  store <4 x double> %add, ptr %res295  ret void296}297 298;; Check that xvfnmadd.d is not emitted.299define void @not_xvfnmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {300; LA32-CONTRACT-FAST-LABEL: not_xvfnmadd_d:301; LA32-CONTRACT-FAST:       # %bb.0: # %entry302; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0303; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0304; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0305; LA32-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 63306; LA32-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2307; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0308; LA32-CONTRACT-FAST-NEXT:    ret309;310; LA32-CONTRACT-ON-LABEL: not_xvfnmadd_d:311; LA32-CONTRACT-ON:       # %bb.0: # %entry312; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0313; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0314; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0315; LA32-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63316; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1317; LA32-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2318; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0319; LA32-CONTRACT-ON-NEXT:    ret320;321; LA32-CONTRACT-OFF-LABEL: not_xvfnmadd_d:322; LA32-CONTRACT-OFF:       # %bb.0: # %entry323; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0324; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0325; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0326; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63327; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1328; LA32-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2329; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0330; LA32-CONTRACT-OFF-NEXT:    ret331;332; LA64-CONTRACT-FAST-LABEL: not_xvfnmadd_d:333; LA64-CONTRACT-FAST:       # %bb.0: # %entry334; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0335; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0336; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0337; LA64-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 63338; LA64-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2339; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0340; LA64-CONTRACT-FAST-NEXT:    ret341;342; LA64-CONTRACT-ON-LABEL: not_xvfnmadd_d:343; LA64-CONTRACT-ON:       # %bb.0: # %entry344; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0345; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0346; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0347; LA64-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63348; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1349; LA64-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2350; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0351; LA64-CONTRACT-ON-NEXT:    ret352;353; LA64-CONTRACT-OFF-LABEL: not_xvfnmadd_d:354; LA64-CONTRACT-OFF:       # %bb.0: # %entry355; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0356; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0357; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0358; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63359; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1360; LA64-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2361; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0362; LA64-CONTRACT-OFF-NEXT:    ret363entry:364  %v0 = load <4 x double>, ptr %a0365  %v1 = load <4 x double>, ptr %a1366  %v2 = load <4 x double>, ptr %a2367  %negv0 = fneg<4 x double> %v0368  %negv2 = fneg<4 x double> %v2369  %mul = fmul<4 x double> %negv0, %v1370  %add = fadd<4 x double> %mul, %negv2371  store <4 x double> %add, ptr %res372  ret void373}374 375define void @xvfnmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {376; LA32-CONTRACT-FAST-LABEL: xvfnmsub_d:377; LA32-CONTRACT-FAST:       # %bb.0: # %entry378; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0379; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0380; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0381; LA32-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2382; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0383; LA32-CONTRACT-FAST-NEXT:    ret384;385; LA32-CONTRACT-ON-LABEL: xvfnmsub_d:386; LA32-CONTRACT-ON:       # %bb.0: # %entry387; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0388; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0389; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0390; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1391; LA32-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2392; LA32-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63393; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0394; LA32-CONTRACT-ON-NEXT:    ret395;396; LA32-CONTRACT-OFF-LABEL: xvfnmsub_d:397; LA32-CONTRACT-OFF:       # %bb.0: # %entry398; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0399; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0400; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0401; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1402; LA32-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2403; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63404; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0405; LA32-CONTRACT-OFF-NEXT:    ret406;407; LA64-CONTRACT-FAST-LABEL: xvfnmsub_d:408; LA64-CONTRACT-FAST:       # %bb.0: # %entry409; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0410; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0411; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0412; LA64-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2413; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0414; LA64-CONTRACT-FAST-NEXT:    ret415;416; LA64-CONTRACT-ON-LABEL: xvfnmsub_d:417; LA64-CONTRACT-ON:       # %bb.0: # %entry418; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0419; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0420; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0421; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1422; LA64-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2423; LA64-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63424; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0425; LA64-CONTRACT-ON-NEXT:    ret426;427; LA64-CONTRACT-OFF-LABEL: xvfnmsub_d:428; LA64-CONTRACT-OFF:       # %bb.0: # %entry429; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0430; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0431; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0432; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1433; LA64-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2434; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63435; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0436; LA64-CONTRACT-OFF-NEXT:    ret437entry:438  %v0 = load <4 x double>, ptr %a0439  %v1 = load <4 x double>, ptr %a1440  %v2 = load <4 x double>, ptr %a2441  %negv2 = fneg<4 x double> %v2442  %mul = fmul<4 x double> %v0, %v1443  %add = fadd<4 x double> %mul, %negv2444  %neg = fneg<4 x double> %add445  store <4 x double> %neg, ptr %res446  ret void447}448 449define void @xvfnmsub_d_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {450; LA32-CONTRACT-FAST-LABEL: xvfnmsub_d_nsz:451; LA32-CONTRACT-FAST:       # %bb.0: # %entry452; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0453; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0454; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0455; LA32-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2456; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0457; LA32-CONTRACT-FAST-NEXT:    ret458;459; LA32-CONTRACT-ON-LABEL: xvfnmsub_d_nsz:460; LA32-CONTRACT-ON:       # %bb.0: # %entry461; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0462; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0463; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0464; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1465; LA32-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr2, $xr0466; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0467; LA32-CONTRACT-ON-NEXT:    ret468;469; LA32-CONTRACT-OFF-LABEL: xvfnmsub_d_nsz:470; LA32-CONTRACT-OFF:       # %bb.0: # %entry471; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0472; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0473; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0474; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1475; LA32-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr2, $xr0476; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0477; LA32-CONTRACT-OFF-NEXT:    ret478;479; LA64-CONTRACT-FAST-LABEL: xvfnmsub_d_nsz:480; LA64-CONTRACT-FAST:       # %bb.0: # %entry481; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0482; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0483; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0484; LA64-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2485; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0486; LA64-CONTRACT-FAST-NEXT:    ret487;488; LA64-CONTRACT-ON-LABEL: xvfnmsub_d_nsz:489; LA64-CONTRACT-ON:       # %bb.0: # %entry490; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0491; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0492; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0493; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1494; LA64-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr2, $xr0495; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0496; LA64-CONTRACT-ON-NEXT:    ret497;498; LA64-CONTRACT-OFF-LABEL: xvfnmsub_d_nsz:499; LA64-CONTRACT-OFF:       # %bb.0: # %entry500; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0501; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0502; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0503; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1504; LA64-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr2, $xr0505; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0506; LA64-CONTRACT-OFF-NEXT:    ret507entry:508  %v0 = load <4 x double>, ptr %a0509  %v1 = load <4 x double>, ptr %a1510  %v2 = load <4 x double>, ptr %a2511  %negv0 = fneg nsz<4 x double> %v0512  %mul = fmul nsz<4 x double> %negv0, %v1513  %add = fadd nsz<4 x double> %mul, %v2514  store <4 x double> %add, ptr %res515  ret void516}517 518;; Check that xvfnmsub.d is not emitted.519define void @not_xvfnmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {520; LA32-CONTRACT-FAST-LABEL: not_xvfnmsub_d:521; LA32-CONTRACT-FAST:       # %bb.0: # %entry522; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0523; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0524; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0525; LA32-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 63526; LA32-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2527; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0528; LA32-CONTRACT-FAST-NEXT:    ret529;530; LA32-CONTRACT-ON-LABEL: not_xvfnmsub_d:531; LA32-CONTRACT-ON:       # %bb.0: # %entry532; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0533; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0534; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0535; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1536; LA32-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr2, $xr0537; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0538; LA32-CONTRACT-ON-NEXT:    ret539;540; LA32-CONTRACT-OFF-LABEL: not_xvfnmsub_d:541; LA32-CONTRACT-OFF:       # %bb.0: # %entry542; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0543; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0544; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0545; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1546; LA32-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr2, $xr0547; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0548; LA32-CONTRACT-OFF-NEXT:    ret549;550; LA64-CONTRACT-FAST-LABEL: not_xvfnmsub_d:551; LA64-CONTRACT-FAST:       # %bb.0: # %entry552; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0553; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0554; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0555; LA64-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 63556; LA64-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2557; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0558; LA64-CONTRACT-FAST-NEXT:    ret559;560; LA64-CONTRACT-ON-LABEL: not_xvfnmsub_d:561; LA64-CONTRACT-ON:       # %bb.0: # %entry562; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0563; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0564; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0565; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1566; LA64-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr2, $xr0567; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0568; LA64-CONTRACT-ON-NEXT:    ret569;570; LA64-CONTRACT-OFF-LABEL: not_xvfnmsub_d:571; LA64-CONTRACT-OFF:       # %bb.0: # %entry572; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0573; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0574; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0575; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1576; LA64-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr2, $xr0577; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0578; LA64-CONTRACT-OFF-NEXT:    ret579entry:580  %v0 = load <4 x double>, ptr %a0581  %v1 = load <4 x double>, ptr %a1582  %v2 = load <4 x double>, ptr %a2583  %negv0 = fneg<4 x double> %v0584  %mul = fmul<4 x double> %negv0, %v1585  %add = fadd<4 x double> %mul, %v2586  store <4 x double> %add, ptr %res587  ret void588}589 590define void @contract_xvfmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {591; LA32-CONTRACT-FAST-LABEL: contract_xvfmadd_d:592; LA32-CONTRACT-FAST:       # %bb.0: # %entry593; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0594; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0595; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0596; LA32-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2597; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0598; LA32-CONTRACT-FAST-NEXT:    ret599;600; LA32-CONTRACT-ON-LABEL: contract_xvfmadd_d:601; LA32-CONTRACT-ON:       # %bb.0: # %entry602; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0603; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0604; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0605; LA32-CONTRACT-ON-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2606; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0607; LA32-CONTRACT-ON-NEXT:    ret608;609; LA32-CONTRACT-OFF-LABEL: contract_xvfmadd_d:610; LA32-CONTRACT-OFF:       # %bb.0: # %entry611; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0612; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0613; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0614; LA32-CONTRACT-OFF-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2615; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0616; LA32-CONTRACT-OFF-NEXT:    ret617;618; LA64-CONTRACT-FAST-LABEL: contract_xvfmadd_d:619; LA64-CONTRACT-FAST:       # %bb.0: # %entry620; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0621; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0622; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0623; LA64-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2624; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0625; LA64-CONTRACT-FAST-NEXT:    ret626;627; LA64-CONTRACT-ON-LABEL: contract_xvfmadd_d:628; LA64-CONTRACT-ON:       # %bb.0: # %entry629; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0630; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0631; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0632; LA64-CONTRACT-ON-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2633; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0634; LA64-CONTRACT-ON-NEXT:    ret635;636; LA64-CONTRACT-OFF-LABEL: contract_xvfmadd_d:637; LA64-CONTRACT-OFF:       # %bb.0: # %entry638; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0639; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0640; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0641; LA64-CONTRACT-OFF-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2642; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0643; LA64-CONTRACT-OFF-NEXT:    ret644entry:645  %v0 = load <4 x double>, ptr %a0646  %v1 = load <4 x double>, ptr %a1647  %v2 = load <4 x double>, ptr %a2648  %mul = fmul contract <4 x double> %v0, %v1649  %add = fadd contract <4 x double> %mul, %v2650  store <4 x double> %add, ptr %res651  ret void652}653 654define void @contract_xvfmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {655; LA32-CONTRACT-FAST-LABEL: contract_xvfmsub_d:656; LA32-CONTRACT-FAST:       # %bb.0: # %entry657; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0658; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0659; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0660; LA32-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2661; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0662; LA32-CONTRACT-FAST-NEXT:    ret663;664; LA32-CONTRACT-ON-LABEL: contract_xvfmsub_d:665; LA32-CONTRACT-ON:       # %bb.0: # %entry666; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0667; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0668; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0669; LA32-CONTRACT-ON-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2670; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0671; LA32-CONTRACT-ON-NEXT:    ret672;673; LA32-CONTRACT-OFF-LABEL: contract_xvfmsub_d:674; LA32-CONTRACT-OFF:       # %bb.0: # %entry675; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0676; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0677; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0678; LA32-CONTRACT-OFF-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2679; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0680; LA32-CONTRACT-OFF-NEXT:    ret681;682; LA64-CONTRACT-FAST-LABEL: contract_xvfmsub_d:683; LA64-CONTRACT-FAST:       # %bb.0: # %entry684; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0685; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0686; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0687; LA64-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2688; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0689; LA64-CONTRACT-FAST-NEXT:    ret690;691; LA64-CONTRACT-ON-LABEL: contract_xvfmsub_d:692; LA64-CONTRACT-ON:       # %bb.0: # %entry693; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0694; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0695; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0696; LA64-CONTRACT-ON-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2697; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0698; LA64-CONTRACT-ON-NEXT:    ret699;700; LA64-CONTRACT-OFF-LABEL: contract_xvfmsub_d:701; LA64-CONTRACT-OFF:       # %bb.0: # %entry702; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0703; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0704; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0705; LA64-CONTRACT-OFF-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2706; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0707; LA64-CONTRACT-OFF-NEXT:    ret708entry:709  %v0 = load <4 x double>, ptr %a0710  %v1 = load <4 x double>, ptr %a1711  %v2 = load <4 x double>, ptr %a2712  %mul = fmul contract <4 x double> %v0, %v1713  %sub = fsub contract <4 x double> %mul, %v2714  store <4 x double> %sub, ptr %res715  ret void716}717 718define void @contract_xvfnmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {719; LA32-CONTRACT-FAST-LABEL: contract_xvfnmadd_d:720; LA32-CONTRACT-FAST:       # %bb.0: # %entry721; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0722; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0723; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0724; LA32-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2725; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0726; LA32-CONTRACT-FAST-NEXT:    ret727;728; LA32-CONTRACT-ON-LABEL: contract_xvfnmadd_d:729; LA32-CONTRACT-ON:       # %bb.0: # %entry730; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0731; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0732; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0733; LA32-CONTRACT-ON-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2734; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0735; LA32-CONTRACT-ON-NEXT:    ret736;737; LA32-CONTRACT-OFF-LABEL: contract_xvfnmadd_d:738; LA32-CONTRACT-OFF:       # %bb.0: # %entry739; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0740; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0741; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0742; LA32-CONTRACT-OFF-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2743; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0744; LA32-CONTRACT-OFF-NEXT:    ret745;746; LA64-CONTRACT-FAST-LABEL: contract_xvfnmadd_d:747; LA64-CONTRACT-FAST:       # %bb.0: # %entry748; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0749; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0750; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0751; LA64-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2752; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0753; LA64-CONTRACT-FAST-NEXT:    ret754;755; LA64-CONTRACT-ON-LABEL: contract_xvfnmadd_d:756; LA64-CONTRACT-ON:       # %bb.0: # %entry757; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0758; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0759; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0760; LA64-CONTRACT-ON-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2761; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0762; LA64-CONTRACT-ON-NEXT:    ret763;764; LA64-CONTRACT-OFF-LABEL: contract_xvfnmadd_d:765; LA64-CONTRACT-OFF:       # %bb.0: # %entry766; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0767; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0768; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0769; LA64-CONTRACT-OFF-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2770; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0771; LA64-CONTRACT-OFF-NEXT:    ret772entry:773  %v0 = load <4 x double>, ptr %a0774  %v1 = load <4 x double>, ptr %a1775  %v2 = load <4 x double>, ptr %a2776  %mul = fmul contract <4 x double> %v0, %v1777  %add = fadd contract <4 x double> %mul, %v2778  %negadd = fneg contract <4 x double> %add779  store <4 x double> %negadd, ptr %res780  ret void781}782 783define void @contract_xvfnmadd_d_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {784; LA32-CONTRACT-FAST-LABEL: contract_xvfnmadd_d_nsz:785; LA32-CONTRACT-FAST:       # %bb.0: # %entry786; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0787; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0788; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0789; LA32-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2790; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0791; LA32-CONTRACT-FAST-NEXT:    ret792;793; LA32-CONTRACT-ON-LABEL: contract_xvfnmadd_d_nsz:794; LA32-CONTRACT-ON:       # %bb.0: # %entry795; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0796; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0797; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0798; LA32-CONTRACT-ON-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2799; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0800; LA32-CONTRACT-ON-NEXT:    ret801;802; LA32-CONTRACT-OFF-LABEL: contract_xvfnmadd_d_nsz:803; LA32-CONTRACT-OFF:       # %bb.0: # %entry804; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0805; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0806; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0807; LA32-CONTRACT-OFF-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2808; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0809; LA32-CONTRACT-OFF-NEXT:    ret810;811; LA64-CONTRACT-FAST-LABEL: contract_xvfnmadd_d_nsz:812; LA64-CONTRACT-FAST:       # %bb.0: # %entry813; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0814; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0815; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0816; LA64-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2817; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0818; LA64-CONTRACT-FAST-NEXT:    ret819;820; LA64-CONTRACT-ON-LABEL: contract_xvfnmadd_d_nsz:821; LA64-CONTRACT-ON:       # %bb.0: # %entry822; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0823; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0824; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0825; LA64-CONTRACT-ON-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2826; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0827; LA64-CONTRACT-ON-NEXT:    ret828;829; LA64-CONTRACT-OFF-LABEL: contract_xvfnmadd_d_nsz:830; LA64-CONTRACT-OFF:       # %bb.0: # %entry831; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0832; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0833; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0834; LA64-CONTRACT-OFF-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2835; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0836; LA64-CONTRACT-OFF-NEXT:    ret837entry:838  %v0 = load <4 x double>, ptr %a0839  %v1 = load <4 x double>, ptr %a1840  %v2 = load <4 x double>, ptr %a2841  %negv0 = fneg contract nsz<4 x double> %v0842  %negv2 = fneg contract nsz<4 x double> %v2843  %mul = fmul contract nsz<4 x double> %negv0, %v1844  %add = fadd contract nsz<4 x double> %mul, %negv2845  store <4 x double> %add, ptr %res846  ret void847}848 849;; Check that xvfnmadd.d is not emitted.850define void @not_contract_xvfnmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {851; LA32-CONTRACT-FAST-LABEL: not_contract_xvfnmadd_d:852; LA32-CONTRACT-FAST:       # %bb.0: # %entry853; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0854; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0855; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0856; LA32-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 63857; LA32-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2858; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0859; LA32-CONTRACT-FAST-NEXT:    ret860;861; LA32-CONTRACT-ON-LABEL: not_contract_xvfnmadd_d:862; LA32-CONTRACT-ON:       # %bb.0: # %entry863; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0864; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0865; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0866; LA32-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63867; LA32-CONTRACT-ON-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2868; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0869; LA32-CONTRACT-ON-NEXT:    ret870;871; LA32-CONTRACT-OFF-LABEL: not_contract_xvfnmadd_d:872; LA32-CONTRACT-OFF:       # %bb.0: # %entry873; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0874; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0875; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0876; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63877; LA32-CONTRACT-OFF-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2878; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0879; LA32-CONTRACT-OFF-NEXT:    ret880;881; LA64-CONTRACT-FAST-LABEL: not_contract_xvfnmadd_d:882; LA64-CONTRACT-FAST:       # %bb.0: # %entry883; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0884; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0885; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0886; LA64-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 63887; LA64-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2888; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0889; LA64-CONTRACT-FAST-NEXT:    ret890;891; LA64-CONTRACT-ON-LABEL: not_contract_xvfnmadd_d:892; LA64-CONTRACT-ON:       # %bb.0: # %entry893; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0894; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0895; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0896; LA64-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63897; LA64-CONTRACT-ON-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2898; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0899; LA64-CONTRACT-ON-NEXT:    ret900;901; LA64-CONTRACT-OFF-LABEL: not_contract_xvfnmadd_d:902; LA64-CONTRACT-OFF:       # %bb.0: # %entry903; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0904; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0905; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0906; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63907; LA64-CONTRACT-OFF-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2908; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0909; LA64-CONTRACT-OFF-NEXT:    ret910entry:911  %v0 = load <4 x double>, ptr %a0912  %v1 = load <4 x double>, ptr %a1913  %v2 = load <4 x double>, ptr %a2914  %negv0 = fneg contract <4 x double> %v0915  %negv2 = fneg contract <4 x double> %v2916  %mul = fmul contract <4 x double> %negv0, %v1917  %add = fadd contract <4 x double> %mul, %negv2918  store <4 x double> %add, ptr %res919  ret void920}921 922define void @contract_xvfnmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {923; LA32-CONTRACT-FAST-LABEL: contract_xvfnmsub_d:924; LA32-CONTRACT-FAST:       # %bb.0: # %entry925; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0926; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0927; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0928; LA32-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2929; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0930; LA32-CONTRACT-FAST-NEXT:    ret931;932; LA32-CONTRACT-ON-LABEL: contract_xvfnmsub_d:933; LA32-CONTRACT-ON:       # %bb.0: # %entry934; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0935; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0936; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0937; LA32-CONTRACT-ON-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2938; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0939; LA32-CONTRACT-ON-NEXT:    ret940;941; LA32-CONTRACT-OFF-LABEL: contract_xvfnmsub_d:942; LA32-CONTRACT-OFF:       # %bb.0: # %entry943; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0944; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0945; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0946; LA32-CONTRACT-OFF-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2947; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0948; LA32-CONTRACT-OFF-NEXT:    ret949;950; LA64-CONTRACT-FAST-LABEL: contract_xvfnmsub_d:951; LA64-CONTRACT-FAST:       # %bb.0: # %entry952; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0953; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0954; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0955; LA64-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2956; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0957; LA64-CONTRACT-FAST-NEXT:    ret958;959; LA64-CONTRACT-ON-LABEL: contract_xvfnmsub_d:960; LA64-CONTRACT-ON:       # %bb.0: # %entry961; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0962; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0963; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0964; LA64-CONTRACT-ON-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2965; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0966; LA64-CONTRACT-ON-NEXT:    ret967;968; LA64-CONTRACT-OFF-LABEL: contract_xvfnmsub_d:969; LA64-CONTRACT-OFF:       # %bb.0: # %entry970; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0971; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0972; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0973; LA64-CONTRACT-OFF-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2974; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0975; LA64-CONTRACT-OFF-NEXT:    ret976entry:977  %v0 = load <4 x double>, ptr %a0978  %v1 = load <4 x double>, ptr %a1979  %v2 = load <4 x double>, ptr %a2980  %negv2 = fneg contract <4 x double> %v2981  %mul = fmul contract <4 x double> %v0, %v1982  %add = fadd contract <4 x double> %mul, %negv2983  %neg = fneg contract <4 x double> %add984  store <4 x double> %neg, ptr %res985  ret void986}987 988define void @contract_xvfnmsub_d_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {989; LA32-CONTRACT-FAST-LABEL: contract_xvfnmsub_d_nsz:990; LA32-CONTRACT-FAST:       # %bb.0: # %entry991; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0992; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0993; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0994; LA32-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2995; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0996; LA32-CONTRACT-FAST-NEXT:    ret997;998; LA32-CONTRACT-ON-LABEL: contract_xvfnmsub_d_nsz:999; LA32-CONTRACT-ON:       # %bb.0: # %entry1000; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 01001; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 01002; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 01003; LA32-CONTRACT-ON-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr21004; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 01005; LA32-CONTRACT-ON-NEXT:    ret1006;1007; LA32-CONTRACT-OFF-LABEL: contract_xvfnmsub_d_nsz:1008; LA32-CONTRACT-OFF:       # %bb.0: # %entry1009; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 01010; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 01011; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 01012; LA32-CONTRACT-OFF-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr21013; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 01014; LA32-CONTRACT-OFF-NEXT:    ret1015;1016; LA64-CONTRACT-FAST-LABEL: contract_xvfnmsub_d_nsz:1017; LA64-CONTRACT-FAST:       # %bb.0: # %entry1018; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 01019; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 01020; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 01021; LA64-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr21022; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 01023; LA64-CONTRACT-FAST-NEXT:    ret1024;1025; LA64-CONTRACT-ON-LABEL: contract_xvfnmsub_d_nsz:1026; LA64-CONTRACT-ON:       # %bb.0: # %entry1027; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 01028; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 01029; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 01030; LA64-CONTRACT-ON-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr21031; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 01032; LA64-CONTRACT-ON-NEXT:    ret1033;1034; LA64-CONTRACT-OFF-LABEL: contract_xvfnmsub_d_nsz:1035; LA64-CONTRACT-OFF:       # %bb.0: # %entry1036; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 01037; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 01038; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 01039; LA64-CONTRACT-OFF-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr21040; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 01041; LA64-CONTRACT-OFF-NEXT:    ret1042entry:1043  %v0 = load <4 x double>, ptr %a01044  %v1 = load <4 x double>, ptr %a11045  %v2 = load <4 x double>, ptr %a21046  %negv0 = fneg contract nsz<4 x double> %v01047  %mul = fmul contract nsz<4 x double> %negv0, %v11048  %add = fadd contract nsz<4 x double> %mul, %v21049  store <4 x double> %add, ptr %res1050  ret void1051}1052 1053;; Check that xvfnmsub.d is not emitted.1054define void @not_contract_xvfnmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {1055; LA32-CONTRACT-FAST-LABEL: not_contract_xvfnmsub_d:1056; LA32-CONTRACT-FAST:       # %bb.0: # %entry1057; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 01058; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 01059; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 01060; LA32-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 631061; LA32-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr21062; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 01063; LA32-CONTRACT-FAST-NEXT:    ret1064;1065; LA32-CONTRACT-ON-LABEL: not_contract_xvfnmsub_d:1066; LA32-CONTRACT-ON:       # %bb.0: # %entry1067; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 01068; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 01069; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 01070; LA32-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 631071; LA32-CONTRACT-ON-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr21072; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 01073; LA32-CONTRACT-ON-NEXT:    ret1074;1075; LA32-CONTRACT-OFF-LABEL: not_contract_xvfnmsub_d:1076; LA32-CONTRACT-OFF:       # %bb.0: # %entry1077; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 01078; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 01079; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 01080; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 631081; LA32-CONTRACT-OFF-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr21082; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 01083; LA32-CONTRACT-OFF-NEXT:    ret1084;1085; LA64-CONTRACT-FAST-LABEL: not_contract_xvfnmsub_d:1086; LA64-CONTRACT-FAST:       # %bb.0: # %entry1087; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 01088; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 01089; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 01090; LA64-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 631091; LA64-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr21092; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 01093; LA64-CONTRACT-FAST-NEXT:    ret1094;1095; LA64-CONTRACT-ON-LABEL: not_contract_xvfnmsub_d:1096; LA64-CONTRACT-ON:       # %bb.0: # %entry1097; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 01098; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 01099; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 01100; LA64-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 631101; LA64-CONTRACT-ON-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr21102; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 01103; LA64-CONTRACT-ON-NEXT:    ret1104;1105; LA64-CONTRACT-OFF-LABEL: not_contract_xvfnmsub_d:1106; LA64-CONTRACT-OFF:       # %bb.0: # %entry1107; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 01108; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 01109; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 01110; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 631111; LA64-CONTRACT-OFF-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr21112; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 01113; LA64-CONTRACT-OFF-NEXT:    ret1114entry:1115  %v0 = load <4 x double>, ptr %a01116  %v1 = load <4 x double>, ptr %a11117  %v2 = load <4 x double>, ptr %a21118  %negv0 = fneg contract <4 x double> %v01119  %mul = fmul contract <4 x double> %negv0, %v11120  %add = fadd contract <4 x double> %mul, %v21121  store <4 x double> %add, ptr %res1122  ret void1123}1124 1125define void @xvfmadd_d_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {1126; LA32-CONTRACT-FAST-LABEL: xvfmadd_d_contract:1127; LA32-CONTRACT-FAST:       # %bb.0: # %entry1128; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 01129; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 01130; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 01131; LA32-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr21132; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 01133; LA32-CONTRACT-FAST-NEXT:    ret1134;1135; LA32-CONTRACT-ON-LABEL: xvfmadd_d_contract:1136; LA32-CONTRACT-ON:       # %bb.0: # %entry1137; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 01138; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 01139; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 01140; LA32-CONTRACT-ON-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr21141; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 01142; LA32-CONTRACT-ON-NEXT:    ret1143;1144; LA32-CONTRACT-OFF-LABEL: xvfmadd_d_contract:1145; LA32-CONTRACT-OFF:       # %bb.0: # %entry1146; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 01147; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 01148; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 01149; LA32-CONTRACT-OFF-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr21150; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 01151; LA32-CONTRACT-OFF-NEXT:    ret1152;1153; LA64-CONTRACT-FAST-LABEL: xvfmadd_d_contract:1154; LA64-CONTRACT-FAST:       # %bb.0: # %entry1155; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 01156; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 01157; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 01158; LA64-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr21159; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 01160; LA64-CONTRACT-FAST-NEXT:    ret1161;1162; LA64-CONTRACT-ON-LABEL: xvfmadd_d_contract:1163; LA64-CONTRACT-ON:       # %bb.0: # %entry1164; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 01165; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 01166; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 01167; LA64-CONTRACT-ON-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr21168; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 01169; LA64-CONTRACT-ON-NEXT:    ret1170;1171; LA64-CONTRACT-OFF-LABEL: xvfmadd_d_contract:1172; LA64-CONTRACT-OFF:       # %bb.0: # %entry1173; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 01174; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 01175; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 01176; LA64-CONTRACT-OFF-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr21177; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 01178; LA64-CONTRACT-OFF-NEXT:    ret1179entry:1180  %v0 = load <4 x double>, ptr %a01181  %v1 = load <4 x double>, ptr %a11182  %v2 = load <4 x double>, ptr %a21183  %mul = fmul contract <4 x double> %v0, %v11184  %add = fadd contract <4 x double> %mul, %v21185  store <4 x double> %add, ptr %res1186  ret void1187}1188 1189define void @xvfmsub_d_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {1190; LA32-CONTRACT-FAST-LABEL: xvfmsub_d_contract:1191; LA32-CONTRACT-FAST:       # %bb.0: # %entry1192; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 01193; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 01194; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 01195; LA32-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr21196; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 01197; LA32-CONTRACT-FAST-NEXT:    ret1198;1199; LA32-CONTRACT-ON-LABEL: xvfmsub_d_contract:1200; LA32-CONTRACT-ON:       # %bb.0: # %entry1201; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 01202; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 01203; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 01204; LA32-CONTRACT-ON-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr21205; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 01206; LA32-CONTRACT-ON-NEXT:    ret1207;1208; LA32-CONTRACT-OFF-LABEL: xvfmsub_d_contract:1209; LA32-CONTRACT-OFF:       # %bb.0: # %entry1210; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 01211; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 01212; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 01213; LA32-CONTRACT-OFF-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr21214; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 01215; LA32-CONTRACT-OFF-NEXT:    ret1216;1217; LA64-CONTRACT-FAST-LABEL: xvfmsub_d_contract:1218; LA64-CONTRACT-FAST:       # %bb.0: # %entry1219; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 01220; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 01221; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 01222; LA64-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr21223; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 01224; LA64-CONTRACT-FAST-NEXT:    ret1225;1226; LA64-CONTRACT-ON-LABEL: xvfmsub_d_contract:1227; LA64-CONTRACT-ON:       # %bb.0: # %entry1228; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 01229; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 01230; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 01231; LA64-CONTRACT-ON-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr21232; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 01233; LA64-CONTRACT-ON-NEXT:    ret1234;1235; LA64-CONTRACT-OFF-LABEL: xvfmsub_d_contract:1236; LA64-CONTRACT-OFF:       # %bb.0: # %entry1237; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 01238; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 01239; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 01240; LA64-CONTRACT-OFF-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr21241; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 01242; LA64-CONTRACT-OFF-NEXT:    ret1243entry:1244  %v0 = load <4 x double>, ptr %a01245  %v1 = load <4 x double>, ptr %a11246  %v2 = load <4 x double>, ptr %a21247  %mul = fmul contract <4 x double> %v0, %v11248  %sub = fsub contract <4 x double> %mul, %v21249  store <4 x double> %sub, ptr %res1250  ret void1251}1252 1253define void @xvfnmadd_d_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {1254; LA32-CONTRACT-FAST-LABEL: xvfnmadd_d_contract:1255; LA32-CONTRACT-FAST:       # %bb.0: # %entry1256; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 01257; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 01258; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 01259; LA32-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr21260; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 01261; LA32-CONTRACT-FAST-NEXT:    ret1262;1263; LA32-CONTRACT-ON-LABEL: xvfnmadd_d_contract:1264; LA32-CONTRACT-ON:       # %bb.0: # %entry1265; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 01266; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 01267; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 01268; LA32-CONTRACT-ON-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr21269; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 01270; LA32-CONTRACT-ON-NEXT:    ret1271;1272; LA32-CONTRACT-OFF-LABEL: xvfnmadd_d_contract:1273; LA32-CONTRACT-OFF:       # %bb.0: # %entry1274; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 01275; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 01276; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 01277; LA32-CONTRACT-OFF-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr21278; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 01279; LA32-CONTRACT-OFF-NEXT:    ret1280;1281; LA64-CONTRACT-FAST-LABEL: xvfnmadd_d_contract:1282; LA64-CONTRACT-FAST:       # %bb.0: # %entry1283; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 01284; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 01285; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 01286; LA64-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr21287; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 01288; LA64-CONTRACT-FAST-NEXT:    ret1289;1290; LA64-CONTRACT-ON-LABEL: xvfnmadd_d_contract:1291; LA64-CONTRACT-ON:       # %bb.0: # %entry1292; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 01293; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 01294; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 01295; LA64-CONTRACT-ON-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr21296; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 01297; LA64-CONTRACT-ON-NEXT:    ret1298;1299; LA64-CONTRACT-OFF-LABEL: xvfnmadd_d_contract:1300; LA64-CONTRACT-OFF:       # %bb.0: # %entry1301; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 01302; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 01303; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 01304; LA64-CONTRACT-OFF-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr21305; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 01306; LA64-CONTRACT-OFF-NEXT:    ret1307entry:1308  %v0 = load <4 x double>, ptr %a01309  %v1 = load <4 x double>, ptr %a11310  %v2 = load <4 x double>, ptr %a21311  %mul = fmul contract <4 x double> %v0, %v11312  %add = fadd contract <4 x double> %mul, %v21313  %negadd = fneg contract <4 x double> %add1314  store <4 x double> %negadd, ptr %res1315  ret void1316}1317 1318define void @xvfnmsub_d_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {1319; LA32-CONTRACT-FAST-LABEL: xvfnmsub_d_contract:1320; LA32-CONTRACT-FAST:       # %bb.0: # %entry1321; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 01322; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 01323; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 01324; LA32-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr21325; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 01326; LA32-CONTRACT-FAST-NEXT:    ret1327;1328; LA32-CONTRACT-ON-LABEL: xvfnmsub_d_contract:1329; LA32-CONTRACT-ON:       # %bb.0: # %entry1330; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 01331; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 01332; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 01333; LA32-CONTRACT-ON-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr21334; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 01335; LA32-CONTRACT-ON-NEXT:    ret1336;1337; LA32-CONTRACT-OFF-LABEL: xvfnmsub_d_contract:1338; LA32-CONTRACT-OFF:       # %bb.0: # %entry1339; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 01340; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 01341; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 01342; LA32-CONTRACT-OFF-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr21343; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 01344; LA32-CONTRACT-OFF-NEXT:    ret1345;1346; LA64-CONTRACT-FAST-LABEL: xvfnmsub_d_contract:1347; LA64-CONTRACT-FAST:       # %bb.0: # %entry1348; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 01349; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 01350; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 01351; LA64-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr21352; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 01353; LA64-CONTRACT-FAST-NEXT:    ret1354;1355; LA64-CONTRACT-ON-LABEL: xvfnmsub_d_contract:1356; LA64-CONTRACT-ON:       # %bb.0: # %entry1357; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 01358; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 01359; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 01360; LA64-CONTRACT-ON-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr21361; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 01362; LA64-CONTRACT-ON-NEXT:    ret1363;1364; LA64-CONTRACT-OFF-LABEL: xvfnmsub_d_contract:1365; LA64-CONTRACT-OFF:       # %bb.0: # %entry1366; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 01367; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 01368; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 01369; LA64-CONTRACT-OFF-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr21370; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 01371; LA64-CONTRACT-OFF-NEXT:    ret1372entry:1373  %v0 = load <4 x double>, ptr %a01374  %v1 = load <4 x double>, ptr %a11375  %v2 = load <4 x double>, ptr %a21376  %mul = fmul contract <4 x double> %v0, %v11377  %negv2 = fneg contract <4 x double> %v21378  %add = fadd contract <4 x double> %negv2, %mul1379  %negadd = fneg contract <4 x double> %add1380  store <4 x double> %negadd, ptr %res1381  ret void1382}1383