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