brintos

brintos / llvm-project-archived public Read only

0
0
Text · 28.2 KiB · 5f1c5a5 Raw
919 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fma | FileCheck %s3 4define <2 x double> @fmaddsubpd_loop_128(i32 %iter, <2 x double> %a, <2 x double> %b, <2 x double> %c) {5; CHECK-LABEL: fmaddsubpd_loop_128:6; CHECK:       # %bb.0: # %entry7; CHECK-NEXT:    xorl %eax, %eax8; CHECK-NEXT:    cmpl %edi, %eax9; CHECK-NEXT:    jge .LBB0_310; CHECK-NEXT:    .p2align 411; CHECK-NEXT:  .LBB0_2: # %for.body12; CHECK-NEXT:    # =>This Inner Loop Header: Depth=113; CHECK-NEXT:    vfmaddsub231pd {{.*#+}} xmm2 = (xmm0 * xmm1) +/- xmm214; CHECK-NEXT:    incl %eax15; CHECK-NEXT:    cmpl %edi, %eax16; CHECK-NEXT:    jl .LBB0_217; CHECK-NEXT:  .LBB0_3: # %for.end18; CHECK-NEXT:    vmovapd %xmm2, %xmm019; CHECK-NEXT:    retq20entry:21  br label %for.cond22 23for.cond:24  %c.addr.0 = phi <2 x double> [ %c, %entry ], [ %0, %for.inc ]25  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]26  %cmp = icmp slt i32 %i.0, %iter27  br i1 %cmp, label %for.body, label %for.end28 29for.body:30  br label %for.inc31 32for.inc:33  %0 = call <2 x double> @llvm.x86.fma.vfmaddsub.pd(<2 x double> %a, <2 x double> %b, <2 x double> %c.addr.0)34  %inc = add nsw i32 %i.0, 135  br label %for.cond36 37for.end:38  ret <2 x double> %c.addr.039}40 41define <2 x double> @fmsubaddpd_loop_128(i32 %iter, <2 x double> %a, <2 x double> %b, <2 x double> %c) {42; CHECK-LABEL: fmsubaddpd_loop_128:43; CHECK:       # %bb.0: # %entry44; CHECK-NEXT:    xorl %eax, %eax45; CHECK-NEXT:    cmpl %edi, %eax46; CHECK-NEXT:    jge .LBB1_347; CHECK-NEXT:    .p2align 448; CHECK-NEXT:  .LBB1_2: # %for.body49; CHECK-NEXT:    # =>This Inner Loop Header: Depth=150; CHECK-NEXT:    vfmsubadd231pd {{.*#+}} xmm2 = (xmm0 * xmm1) -/+ xmm251; CHECK-NEXT:    incl %eax52; CHECK-NEXT:    cmpl %edi, %eax53; CHECK-NEXT:    jl .LBB1_254; CHECK-NEXT:  .LBB1_3: # %for.end55; CHECK-NEXT:    vmovapd %xmm2, %xmm056; CHECK-NEXT:    retq57entry:58  br label %for.cond59 60for.cond:61  %c.addr.0 = phi <2 x double> [ %c, %entry ], [ %0, %for.inc ]62  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]63  %cmp = icmp slt i32 %i.0, %iter64  br i1 %cmp, label %for.body, label %for.end65 66for.body:67  br label %for.inc68 69for.inc:70  %0 = call <2 x double> @llvm.x86.fma.vfmsubadd.pd(<2 x double> %a, <2 x double> %b, <2 x double> %c.addr.0)71  %inc = add nsw i32 %i.0, 172  br label %for.cond73 74for.end:75  ret <2 x double> %c.addr.076}77 78define <2 x double> @fmaddpd_loop_128(i32 %iter, <2 x double> %a, <2 x double> %b, <2 x double> %c) {79; CHECK-LABEL: fmaddpd_loop_128:80; CHECK:       # %bb.0: # %entry81; CHECK-NEXT:    xorl %eax, %eax82; CHECK-NEXT:    cmpl %edi, %eax83; CHECK-NEXT:    jge .LBB2_384; CHECK-NEXT:    .p2align 485; CHECK-NEXT:  .LBB2_2: # %for.body86; CHECK-NEXT:    # =>This Inner Loop Header: Depth=187; CHECK-NEXT:    vfmadd231pd {{.*#+}} xmm2 = (xmm0 * xmm1) + xmm288; CHECK-NEXT:    incl %eax89; CHECK-NEXT:    cmpl %edi, %eax90; CHECK-NEXT:    jl .LBB2_291; CHECK-NEXT:  .LBB2_3: # %for.end92; CHECK-NEXT:    vmovapd %xmm2, %xmm093; CHECK-NEXT:    retq94entry:95  br label %for.cond96 97for.cond:98  %c.addr.0 = phi <2 x double> [ %c, %entry ], [ %0, %for.inc ]99  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]100  %cmp = icmp slt i32 %i.0, %iter101  br i1 %cmp, label %for.body, label %for.end102 103for.body:104  br label %for.inc105 106for.inc:107  %0 = call <2 x double> @llvm.x86.fma.vfmadd.pd(<2 x double> %a, <2 x double> %b, <2 x double> %c.addr.0)108  %inc = add nsw i32 %i.0, 1109  br label %for.cond110 111for.end:112  ret <2 x double> %c.addr.0113}114 115define <2 x double> @fmsubpd_loop_128(i32 %iter, <2 x double> %a, <2 x double> %b, <2 x double> %c) {116; CHECK-LABEL: fmsubpd_loop_128:117; CHECK:       # %bb.0: # %entry118; CHECK-NEXT:    xorl %eax, %eax119; CHECK-NEXT:    cmpl %edi, %eax120; CHECK-NEXT:    jge .LBB3_3121; CHECK-NEXT:    .p2align 4122; CHECK-NEXT:  .LBB3_2: # %for.body123; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1124; CHECK-NEXT:    vfmsub231pd {{.*#+}} xmm2 = (xmm0 * xmm1) - xmm2125; CHECK-NEXT:    incl %eax126; CHECK-NEXT:    cmpl %edi, %eax127; CHECK-NEXT:    jl .LBB3_2128; CHECK-NEXT:  .LBB3_3: # %for.end129; CHECK-NEXT:    vmovapd %xmm2, %xmm0130; CHECK-NEXT:    retq131entry:132  br label %for.cond133 134for.cond:135  %c.addr.0 = phi <2 x double> [ %c, %entry ], [ %0, %for.inc ]136  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]137  %cmp = icmp slt i32 %i.0, %iter138  br i1 %cmp, label %for.body, label %for.end139 140for.body:141  br label %for.inc142 143for.inc:144  %0 = call <2 x double> @llvm.x86.fma.vfmsub.pd(<2 x double> %a, <2 x double> %b, <2 x double> %c.addr.0)145  %inc = add nsw i32 %i.0, 1146  br label %for.cond147 148for.end:149  ret <2 x double> %c.addr.0150}151 152define <2 x double> @fnmaddpd_loop_128(i32 %iter, <2 x double> %a, <2 x double> %b, <2 x double> %c) {153; CHECK-LABEL: fnmaddpd_loop_128:154; CHECK:       # %bb.0: # %entry155; CHECK-NEXT:    xorl %eax, %eax156; CHECK-NEXT:    cmpl %edi, %eax157; CHECK-NEXT:    jge .LBB4_3158; CHECK-NEXT:    .p2align 4159; CHECK-NEXT:  .LBB4_2: # %for.body160; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1161; CHECK-NEXT:    vfnmadd231pd {{.*#+}} xmm2 = -(xmm0 * xmm1) + xmm2162; CHECK-NEXT:    incl %eax163; CHECK-NEXT:    cmpl %edi, %eax164; CHECK-NEXT:    jl .LBB4_2165; CHECK-NEXT:  .LBB4_3: # %for.end166; CHECK-NEXT:    vmovapd %xmm2, %xmm0167; CHECK-NEXT:    retq168entry:169  br label %for.cond170 171for.cond:172  %c.addr.0 = phi <2 x double> [ %c, %entry ], [ %0, %for.inc ]173  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]174  %cmp = icmp slt i32 %i.0, %iter175  br i1 %cmp, label %for.body, label %for.end176 177for.body:178  br label %for.inc179 180for.inc:181  %0 = call <2 x double> @llvm.x86.fma.vfnmadd.pd(<2 x double> %a, <2 x double> %b, <2 x double> %c.addr.0)182  %inc = add nsw i32 %i.0, 1183  br label %for.cond184 185for.end:186  ret <2 x double> %c.addr.0187}188 189define <2 x double> @fnmsubpd_loop_128(i32 %iter, <2 x double> %a, <2 x double> %b, <2 x double> %c) {190; CHECK-LABEL: fnmsubpd_loop_128:191; CHECK:       # %bb.0: # %entry192; CHECK-NEXT:    xorl %eax, %eax193; CHECK-NEXT:    cmpl %edi, %eax194; CHECK-NEXT:    jge .LBB5_3195; CHECK-NEXT:    .p2align 4196; CHECK-NEXT:  .LBB5_2: # %for.body197; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1198; CHECK-NEXT:    vfnmsub231pd {{.*#+}} xmm2 = -(xmm0 * xmm1) - xmm2199; CHECK-NEXT:    incl %eax200; CHECK-NEXT:    cmpl %edi, %eax201; CHECK-NEXT:    jl .LBB5_2202; CHECK-NEXT:  .LBB5_3: # %for.end203; CHECK-NEXT:    vmovapd %xmm2, %xmm0204; CHECK-NEXT:    retq205entry:206  br label %for.cond207 208for.cond:209  %c.addr.0 = phi <2 x double> [ %c, %entry ], [ %0, %for.inc ]210  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]211  %cmp = icmp slt i32 %i.0, %iter212  br i1 %cmp, label %for.body, label %for.end213 214for.body:215  br label %for.inc216 217for.inc:218  %0 = call <2 x double> @llvm.x86.fma.vfnmsub.pd(<2 x double> %a, <2 x double> %b, <2 x double> %c.addr.0)219  %inc = add nsw i32 %i.0, 1220  br label %for.cond221 222for.end:223  ret <2 x double> %c.addr.0224}225 226declare <2 x double> @llvm.x86.fma.vfmaddsub.pd(<2 x double>, <2 x double>, <2 x double>)227declare <2 x double> @llvm.x86.fma.vfmsubadd.pd(<2 x double>, <2 x double>, <2 x double>)228declare <2 x double> @llvm.x86.fma.vfmadd.pd(<2 x double>, <2 x double>, <2 x double>)229declare <2 x double> @llvm.x86.fma.vfmsub.pd(<2 x double>, <2 x double>, <2 x double>)230declare <2 x double> @llvm.x86.fma.vfnmadd.pd(<2 x double>, <2 x double>, <2 x double>)231declare <2 x double> @llvm.x86.fma.vfnmsub.pd(<2 x double>, <2 x double>, <2 x double>)232 233define <4 x float> @fmaddsubps_loop_128(i32 %iter, <4 x float> %a, <4 x float> %b, <4 x float> %c) {234; CHECK-LABEL: fmaddsubps_loop_128:235; CHECK:       # %bb.0: # %entry236; CHECK-NEXT:    xorl %eax, %eax237; CHECK-NEXT:    cmpl %edi, %eax238; CHECK-NEXT:    jge .LBB6_3239; CHECK-NEXT:    .p2align 4240; CHECK-NEXT:  .LBB6_2: # %for.body241; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1242; CHECK-NEXT:    vfmaddsub231ps {{.*#+}} xmm2 = (xmm0 * xmm1) +/- xmm2243; CHECK-NEXT:    incl %eax244; CHECK-NEXT:    cmpl %edi, %eax245; CHECK-NEXT:    jl .LBB6_2246; CHECK-NEXT:  .LBB6_3: # %for.end247; CHECK-NEXT:    vmovaps %xmm2, %xmm0248; CHECK-NEXT:    retq249entry:250  br label %for.cond251 252for.cond:253  %c.addr.0 = phi <4 x float> [ %c, %entry ], [ %0, %for.inc ]254  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]255  %cmp = icmp slt i32 %i.0, %iter256  br i1 %cmp, label %for.body, label %for.end257 258for.body:259  br label %for.inc260 261for.inc:262  %0 = call <4 x float> @llvm.x86.fma.vfmaddsub.ps(<4 x float> %a, <4 x float> %b, <4 x float> %c.addr.0)263  %inc = add nsw i32 %i.0, 1264  br label %for.cond265 266for.end:267  ret <4 x float> %c.addr.0268}269 270define <4 x float> @fmsubaddps_loop_128(i32 %iter, <4 x float> %a, <4 x float> %b, <4 x float> %c) {271; CHECK-LABEL: fmsubaddps_loop_128:272; CHECK:       # %bb.0: # %entry273; CHECK-NEXT:    xorl %eax, %eax274; CHECK-NEXT:    cmpl %edi, %eax275; CHECK-NEXT:    jge .LBB7_3276; CHECK-NEXT:    .p2align 4277; CHECK-NEXT:  .LBB7_2: # %for.body278; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1279; CHECK-NEXT:    vfmsubadd231ps {{.*#+}} xmm2 = (xmm0 * xmm1) -/+ xmm2280; CHECK-NEXT:    incl %eax281; CHECK-NEXT:    cmpl %edi, %eax282; CHECK-NEXT:    jl .LBB7_2283; CHECK-NEXT:  .LBB7_3: # %for.end284; CHECK-NEXT:    vmovaps %xmm2, %xmm0285; CHECK-NEXT:    retq286entry:287  br label %for.cond288 289for.cond:290  %c.addr.0 = phi <4 x float> [ %c, %entry ], [ %0, %for.inc ]291  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]292  %cmp = icmp slt i32 %i.0, %iter293  br i1 %cmp, label %for.body, label %for.end294 295for.body:296  br label %for.inc297 298for.inc:299  %0 = call <4 x float> @llvm.x86.fma.vfmsubadd.ps(<4 x float> %a, <4 x float> %b, <4 x float> %c.addr.0)300  %inc = add nsw i32 %i.0, 1301  br label %for.cond302 303for.end:304  ret <4 x float> %c.addr.0305}306 307define <4 x float> @fmaddps_loop_128(i32 %iter, <4 x float> %a, <4 x float> %b, <4 x float> %c) {308; CHECK-LABEL: fmaddps_loop_128:309; CHECK:       # %bb.0: # %entry310; CHECK-NEXT:    xorl %eax, %eax311; CHECK-NEXT:    cmpl %edi, %eax312; CHECK-NEXT:    jge .LBB8_3313; CHECK-NEXT:    .p2align 4314; CHECK-NEXT:  .LBB8_2: # %for.body315; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1316; CHECK-NEXT:    vfmadd231ps {{.*#+}} xmm2 = (xmm0 * xmm1) + xmm2317; CHECK-NEXT:    incl %eax318; CHECK-NEXT:    cmpl %edi, %eax319; CHECK-NEXT:    jl .LBB8_2320; CHECK-NEXT:  .LBB8_3: # %for.end321; CHECK-NEXT:    vmovaps %xmm2, %xmm0322; CHECK-NEXT:    retq323entry:324  br label %for.cond325 326for.cond:327  %c.addr.0 = phi <4 x float> [ %c, %entry ], [ %0, %for.inc ]328  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]329  %cmp = icmp slt i32 %i.0, %iter330  br i1 %cmp, label %for.body, label %for.end331 332for.body:333  br label %for.inc334 335for.inc:336  %0 = call <4 x float> @llvm.x86.fma.vfmadd.ps(<4 x float> %a, <4 x float> %b, <4 x float> %c.addr.0)337  %inc = add nsw i32 %i.0, 1338  br label %for.cond339 340for.end:341  ret <4 x float> %c.addr.0342}343 344define <4 x float> @fmsubps_loop_128(i32 %iter, <4 x float> %a, <4 x float> %b, <4 x float> %c) {345; CHECK-LABEL: fmsubps_loop_128:346; CHECK:       # %bb.0: # %entry347; CHECK-NEXT:    xorl %eax, %eax348; CHECK-NEXT:    cmpl %edi, %eax349; CHECK-NEXT:    jge .LBB9_3350; CHECK-NEXT:    .p2align 4351; CHECK-NEXT:  .LBB9_2: # %for.body352; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1353; CHECK-NEXT:    vfmsub231ps {{.*#+}} xmm2 = (xmm0 * xmm1) - xmm2354; CHECK-NEXT:    incl %eax355; CHECK-NEXT:    cmpl %edi, %eax356; CHECK-NEXT:    jl .LBB9_2357; CHECK-NEXT:  .LBB9_3: # %for.end358; CHECK-NEXT:    vmovaps %xmm2, %xmm0359; CHECK-NEXT:    retq360entry:361  br label %for.cond362 363for.cond:364  %c.addr.0 = phi <4 x float> [ %c, %entry ], [ %0, %for.inc ]365  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]366  %cmp = icmp slt i32 %i.0, %iter367  br i1 %cmp, label %for.body, label %for.end368 369for.body:370  br label %for.inc371 372for.inc:373  %0 = call <4 x float> @llvm.x86.fma.vfmsub.ps(<4 x float> %a, <4 x float> %b, <4 x float> %c.addr.0)374  %inc = add nsw i32 %i.0, 1375  br label %for.cond376 377for.end:378  ret <4 x float> %c.addr.0379}380 381define <4 x float> @fnmaddps_loop_128(i32 %iter, <4 x float> %a, <4 x float> %b, <4 x float> %c) {382; CHECK-LABEL: fnmaddps_loop_128:383; CHECK:       # %bb.0: # %entry384; CHECK-NEXT:    xorl %eax, %eax385; CHECK-NEXT:    cmpl %edi, %eax386; CHECK-NEXT:    jge .LBB10_3387; CHECK-NEXT:    .p2align 4388; CHECK-NEXT:  .LBB10_2: # %for.body389; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1390; CHECK-NEXT:    vfnmadd231ps {{.*#+}} xmm2 = -(xmm0 * xmm1) + xmm2391; CHECK-NEXT:    incl %eax392; CHECK-NEXT:    cmpl %edi, %eax393; CHECK-NEXT:    jl .LBB10_2394; CHECK-NEXT:  .LBB10_3: # %for.end395; CHECK-NEXT:    vmovaps %xmm2, %xmm0396; CHECK-NEXT:    retq397entry:398  br label %for.cond399 400for.cond:401  %c.addr.0 = phi <4 x float> [ %c, %entry ], [ %0, %for.inc ]402  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]403  %cmp = icmp slt i32 %i.0, %iter404  br i1 %cmp, label %for.body, label %for.end405 406for.body:407  br label %for.inc408 409for.inc:410  %0 = call <4 x float> @llvm.x86.fma.vfnmadd.ps(<4 x float> %a, <4 x float> %b, <4 x float> %c.addr.0)411  %inc = add nsw i32 %i.0, 1412  br label %for.cond413 414for.end:415  ret <4 x float> %c.addr.0416}417 418define <4 x float> @fnmsubps_loop_128(i32 %iter, <4 x float> %a, <4 x float> %b, <4 x float> %c) {419; CHECK-LABEL: fnmsubps_loop_128:420; CHECK:       # %bb.0: # %entry421; CHECK-NEXT:    xorl %eax, %eax422; CHECK-NEXT:    cmpl %edi, %eax423; CHECK-NEXT:    jge .LBB11_3424; CHECK-NEXT:    .p2align 4425; CHECK-NEXT:  .LBB11_2: # %for.body426; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1427; CHECK-NEXT:    vfnmsub231ps {{.*#+}} xmm2 = -(xmm0 * xmm1) - xmm2428; CHECK-NEXT:    incl %eax429; CHECK-NEXT:    cmpl %edi, %eax430; CHECK-NEXT:    jl .LBB11_2431; CHECK-NEXT:  .LBB11_3: # %for.end432; CHECK-NEXT:    vmovaps %xmm2, %xmm0433; CHECK-NEXT:    retq434entry:435  br label %for.cond436 437for.cond:438  %c.addr.0 = phi <4 x float> [ %c, %entry ], [ %0, %for.inc ]439  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]440  %cmp = icmp slt i32 %i.0, %iter441  br i1 %cmp, label %for.body, label %for.end442 443for.body:444  br label %for.inc445 446for.inc:447  %0 = call <4 x float> @llvm.x86.fma.vfnmsub.ps(<4 x float> %a, <4 x float> %b, <4 x float> %c.addr.0)448  %inc = add nsw i32 %i.0, 1449  br label %for.cond450 451for.end:452  ret <4 x float> %c.addr.0453}454 455declare <4 x float> @llvm.x86.fma.vfmaddsub.ps(<4 x float>, <4 x float>, <4 x float>)456declare <4 x float> @llvm.x86.fma.vfmsubadd.ps(<4 x float>, <4 x float>, <4 x float>)457declare <4 x float> @llvm.x86.fma.vfmadd.ps(<4 x float>, <4 x float>, <4 x float>)458declare <4 x float> @llvm.x86.fma.vfmsub.ps(<4 x float>, <4 x float>, <4 x float>)459declare <4 x float> @llvm.x86.fma.vfnmadd.ps(<4 x float>, <4 x float>, <4 x float>)460declare <4 x float> @llvm.x86.fma.vfnmsub.ps(<4 x float>, <4 x float>, <4 x float>)461 462define <4 x double> @fmaddsubpd_loop_256(i32 %iter, <4 x double> %a, <4 x double> %b, <4 x double> %c) {463; CHECK-LABEL: fmaddsubpd_loop_256:464; CHECK:       # %bb.0: # %entry465; CHECK-NEXT:    xorl %eax, %eax466; CHECK-NEXT:    cmpl %edi, %eax467; CHECK-NEXT:    jge .LBB12_3468; CHECK-NEXT:    .p2align 4469; CHECK-NEXT:  .LBB12_2: # %for.body470; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1471; CHECK-NEXT:    vfmaddsub231pd {{.*#+}} ymm2 = (ymm0 * ymm1) +/- ymm2472; CHECK-NEXT:    incl %eax473; CHECK-NEXT:    cmpl %edi, %eax474; CHECK-NEXT:    jl .LBB12_2475; CHECK-NEXT:  .LBB12_3: # %for.end476; CHECK-NEXT:    vmovapd %ymm2, %ymm0477; CHECK-NEXT:    retq478entry:479  br label %for.cond480 481for.cond:482  %c.addr.0 = phi <4 x double> [ %c, %entry ], [ %0, %for.inc ]483  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]484  %cmp = icmp slt i32 %i.0, %iter485  br i1 %cmp, label %for.body, label %for.end486 487for.body:488  br label %for.inc489 490for.inc:491  %0 = call <4 x double> @llvm.x86.fma.vfmaddsub.pd.256(<4 x double> %a, <4 x double> %b, <4 x double> %c.addr.0)492  %inc = add nsw i32 %i.0, 1493  br label %for.cond494 495for.end:496  ret <4 x double> %c.addr.0497}498 499define <4 x double> @fmsubaddpd_loop_256(i32 %iter, <4 x double> %a, <4 x double> %b, <4 x double> %c) {500; CHECK-LABEL: fmsubaddpd_loop_256:501; CHECK:       # %bb.0: # %entry502; CHECK-NEXT:    xorl %eax, %eax503; CHECK-NEXT:    cmpl %edi, %eax504; CHECK-NEXT:    jge .LBB13_3505; CHECK-NEXT:    .p2align 4506; CHECK-NEXT:  .LBB13_2: # %for.body507; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1508; CHECK-NEXT:    vfmsubadd231pd {{.*#+}} ymm2 = (ymm0 * ymm1) -/+ ymm2509; CHECK-NEXT:    incl %eax510; CHECK-NEXT:    cmpl %edi, %eax511; CHECK-NEXT:    jl .LBB13_2512; CHECK-NEXT:  .LBB13_3: # %for.end513; CHECK-NEXT:    vmovapd %ymm2, %ymm0514; CHECK-NEXT:    retq515entry:516  br label %for.cond517 518for.cond:519  %c.addr.0 = phi <4 x double> [ %c, %entry ], [ %0, %for.inc ]520  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]521  %cmp = icmp slt i32 %i.0, %iter522  br i1 %cmp, label %for.body, label %for.end523 524for.body:525  br label %for.inc526 527for.inc:528  %0 = call <4 x double> @llvm.x86.fma.vfmsubadd.pd.256(<4 x double> %a, <4 x double> %b, <4 x double> %c.addr.0)529  %inc = add nsw i32 %i.0, 1530  br label %for.cond531 532for.end:533  ret <4 x double> %c.addr.0534}535 536define <4 x double> @fmaddpd_loop_256(i32 %iter, <4 x double> %a, <4 x double> %b, <4 x double> %c) {537; CHECK-LABEL: fmaddpd_loop_256:538; CHECK:       # %bb.0: # %entry539; CHECK-NEXT:    xorl %eax, %eax540; CHECK-NEXT:    cmpl %edi, %eax541; CHECK-NEXT:    jge .LBB14_3542; CHECK-NEXT:    .p2align 4543; CHECK-NEXT:  .LBB14_2: # %for.body544; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1545; CHECK-NEXT:    vfmadd231pd {{.*#+}} ymm2 = (ymm0 * ymm1) + ymm2546; CHECK-NEXT:    incl %eax547; CHECK-NEXT:    cmpl %edi, %eax548; CHECK-NEXT:    jl .LBB14_2549; CHECK-NEXT:  .LBB14_3: # %for.end550; CHECK-NEXT:    vmovapd %ymm2, %ymm0551; CHECK-NEXT:    retq552entry:553  br label %for.cond554 555for.cond:556  %c.addr.0 = phi <4 x double> [ %c, %entry ], [ %0, %for.inc ]557  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]558  %cmp = icmp slt i32 %i.0, %iter559  br i1 %cmp, label %for.body, label %for.end560 561for.body:562  br label %for.inc563 564for.inc:565  %0 = call <4 x double> @llvm.x86.fma.vfmadd.pd.256(<4 x double> %a, <4 x double> %b, <4 x double> %c.addr.0)566  %inc = add nsw i32 %i.0, 1567  br label %for.cond568 569for.end:570  ret <4 x double> %c.addr.0571}572 573define <4 x double> @fmsubpd_loop_256(i32 %iter, <4 x double> %a, <4 x double> %b, <4 x double> %c) {574; CHECK-LABEL: fmsubpd_loop_256:575; CHECK:       # %bb.0: # %entry576; CHECK-NEXT:    xorl %eax, %eax577; CHECK-NEXT:    cmpl %edi, %eax578; CHECK-NEXT:    jge .LBB15_3579; CHECK-NEXT:    .p2align 4580; CHECK-NEXT:  .LBB15_2: # %for.body581; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1582; CHECK-NEXT:    vfmsub231pd {{.*#+}} ymm2 = (ymm0 * ymm1) - ymm2583; CHECK-NEXT:    incl %eax584; CHECK-NEXT:    cmpl %edi, %eax585; CHECK-NEXT:    jl .LBB15_2586; CHECK-NEXT:  .LBB15_3: # %for.end587; CHECK-NEXT:    vmovapd %ymm2, %ymm0588; CHECK-NEXT:    retq589entry:590  br label %for.cond591 592for.cond:593  %c.addr.0 = phi <4 x double> [ %c, %entry ], [ %0, %for.inc ]594  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]595  %cmp = icmp slt i32 %i.0, %iter596  br i1 %cmp, label %for.body, label %for.end597 598for.body:599  br label %for.inc600 601for.inc:602  %0 = call <4 x double> @llvm.x86.fma.vfmsub.pd.256(<4 x double> %a, <4 x double> %b, <4 x double> %c.addr.0)603  %inc = add nsw i32 %i.0, 1604  br label %for.cond605 606for.end:607  ret <4 x double> %c.addr.0608}609 610define <4 x double> @fnmaddpd_loop_256(i32 %iter, <4 x double> %a, <4 x double> %b, <4 x double> %c) {611; CHECK-LABEL: fnmaddpd_loop_256:612; CHECK:       # %bb.0: # %entry613; CHECK-NEXT:    xorl %eax, %eax614; CHECK-NEXT:    cmpl %edi, %eax615; CHECK-NEXT:    jge .LBB16_3616; CHECK-NEXT:    .p2align 4617; CHECK-NEXT:  .LBB16_2: # %for.body618; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1619; CHECK-NEXT:    vfnmadd231pd {{.*#+}} ymm2 = -(ymm0 * ymm1) + ymm2620; CHECK-NEXT:    incl %eax621; CHECK-NEXT:    cmpl %edi, %eax622; CHECK-NEXT:    jl .LBB16_2623; CHECK-NEXT:  .LBB16_3: # %for.end624; CHECK-NEXT:    vmovapd %ymm2, %ymm0625; CHECK-NEXT:    retq626entry:627  br label %for.cond628 629for.cond:630  %c.addr.0 = phi <4 x double> [ %c, %entry ], [ %0, %for.inc ]631  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]632  %cmp = icmp slt i32 %i.0, %iter633  br i1 %cmp, label %for.body, label %for.end634 635for.body:636  br label %for.inc637 638for.inc:639  %0 = call <4 x double> @llvm.x86.fma.vfnmadd.pd.256(<4 x double> %a, <4 x double> %b, <4 x double> %c.addr.0)640  %inc = add nsw i32 %i.0, 1641  br label %for.cond642 643for.end:644  ret <4 x double> %c.addr.0645}646 647define <4 x double> @fnmsubpd_loop_256(i32 %iter, <4 x double> %a, <4 x double> %b, <4 x double> %c) {648; CHECK-LABEL: fnmsubpd_loop_256:649; CHECK:       # %bb.0: # %entry650; CHECK-NEXT:    xorl %eax, %eax651; CHECK-NEXT:    cmpl %edi, %eax652; CHECK-NEXT:    jge .LBB17_3653; CHECK-NEXT:    .p2align 4654; CHECK-NEXT:  .LBB17_2: # %for.body655; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1656; CHECK-NEXT:    vfnmsub231pd {{.*#+}} ymm2 = -(ymm0 * ymm1) - ymm2657; CHECK-NEXT:    incl %eax658; CHECK-NEXT:    cmpl %edi, %eax659; CHECK-NEXT:    jl .LBB17_2660; CHECK-NEXT:  .LBB17_3: # %for.end661; CHECK-NEXT:    vmovapd %ymm2, %ymm0662; CHECK-NEXT:    retq663entry:664  br label %for.cond665 666for.cond:667  %c.addr.0 = phi <4 x double> [ %c, %entry ], [ %0, %for.inc ]668  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]669  %cmp = icmp slt i32 %i.0, %iter670  br i1 %cmp, label %for.body, label %for.end671 672for.body:673  br label %for.inc674 675for.inc:676  %0 = call <4 x double> @llvm.x86.fma.vfnmsub.pd.256(<4 x double> %a, <4 x double> %b, <4 x double> %c.addr.0)677  %inc = add nsw i32 %i.0, 1678  br label %for.cond679 680for.end:681  ret <4 x double> %c.addr.0682}683 684declare <4 x double> @llvm.x86.fma.vfmaddsub.pd.256(<4 x double>, <4 x double>, <4 x double>)685declare <4 x double> @llvm.x86.fma.vfmsubadd.pd.256(<4 x double>, <4 x double>, <4 x double>)686declare <4 x double> @llvm.x86.fma.vfmadd.pd.256(<4 x double>, <4 x double>, <4 x double>)687declare <4 x double> @llvm.x86.fma.vfmsub.pd.256(<4 x double>, <4 x double>, <4 x double>)688declare <4 x double> @llvm.x86.fma.vfnmadd.pd.256(<4 x double>, <4 x double>, <4 x double>)689declare <4 x double> @llvm.x86.fma.vfnmsub.pd.256(<4 x double>, <4 x double>, <4 x double>)690 691define <8 x float> @fmaddsubps_loop_256(i32 %iter, <8 x float> %a, <8 x float> %b, <8 x float> %c) {692; CHECK-LABEL: fmaddsubps_loop_256:693; CHECK:       # %bb.0: # %entry694; CHECK-NEXT:    xorl %eax, %eax695; CHECK-NEXT:    cmpl %edi, %eax696; CHECK-NEXT:    jge .LBB18_3697; CHECK-NEXT:    .p2align 4698; CHECK-NEXT:  .LBB18_2: # %for.body699; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1700; CHECK-NEXT:    vfmaddsub231ps {{.*#+}} ymm2 = (ymm0 * ymm1) +/- ymm2701; CHECK-NEXT:    incl %eax702; CHECK-NEXT:    cmpl %edi, %eax703; CHECK-NEXT:    jl .LBB18_2704; CHECK-NEXT:  .LBB18_3: # %for.end705; CHECK-NEXT:    vmovaps %ymm2, %ymm0706; CHECK-NEXT:    retq707entry:708  br label %for.cond709 710for.cond:711  %c.addr.0 = phi <8 x float> [ %c, %entry ], [ %0, %for.inc ]712  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]713  %cmp = icmp slt i32 %i.0, %iter714  br i1 %cmp, label %for.body, label %for.end715 716for.body:717  br label %for.inc718 719for.inc:720  %0 = call <8 x float> @llvm.x86.fma.vfmaddsub.ps.256(<8 x float> %a, <8 x float> %b, <8 x float> %c.addr.0)721  %inc = add nsw i32 %i.0, 1722  br label %for.cond723 724for.end:725  ret <8 x float> %c.addr.0726}727 728define <8 x float> @fmsubaddps_loop_256(i32 %iter, <8 x float> %a, <8 x float> %b, <8 x float> %c) {729; CHECK-LABEL: fmsubaddps_loop_256:730; CHECK:       # %bb.0: # %entry731; CHECK-NEXT:    xorl %eax, %eax732; CHECK-NEXT:    cmpl %edi, %eax733; CHECK-NEXT:    jge .LBB19_3734; CHECK-NEXT:    .p2align 4735; CHECK-NEXT:  .LBB19_2: # %for.body736; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1737; CHECK-NEXT:    vfmsubadd231ps {{.*#+}} ymm2 = (ymm0 * ymm1) -/+ ymm2738; CHECK-NEXT:    incl %eax739; CHECK-NEXT:    cmpl %edi, %eax740; CHECK-NEXT:    jl .LBB19_2741; CHECK-NEXT:  .LBB19_3: # %for.end742; CHECK-NEXT:    vmovaps %ymm2, %ymm0743; CHECK-NEXT:    retq744entry:745  br label %for.cond746 747for.cond:748  %c.addr.0 = phi <8 x float> [ %c, %entry ], [ %0, %for.inc ]749  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]750  %cmp = icmp slt i32 %i.0, %iter751  br i1 %cmp, label %for.body, label %for.end752 753for.body:754  br label %for.inc755 756for.inc:757  %0 = call <8 x float> @llvm.x86.fma.vfmsubadd.ps.256(<8 x float> %a, <8 x float> %b, <8 x float> %c.addr.0)758  %inc = add nsw i32 %i.0, 1759  br label %for.cond760 761for.end:762  ret <8 x float> %c.addr.0763}764 765define <8 x float> @fmaddps_loop_256(i32 %iter, <8 x float> %a, <8 x float> %b, <8 x float> %c) {766; CHECK-LABEL: fmaddps_loop_256:767; CHECK:       # %bb.0: # %entry768; CHECK-NEXT:    xorl %eax, %eax769; CHECK-NEXT:    cmpl %edi, %eax770; CHECK-NEXT:    jge .LBB20_3771; CHECK-NEXT:    .p2align 4772; CHECK-NEXT:  .LBB20_2: # %for.body773; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1774; CHECK-NEXT:    vfmadd231ps {{.*#+}} ymm2 = (ymm0 * ymm1) + ymm2775; CHECK-NEXT:    incl %eax776; CHECK-NEXT:    cmpl %edi, %eax777; CHECK-NEXT:    jl .LBB20_2778; CHECK-NEXT:  .LBB20_3: # %for.end779; CHECK-NEXT:    vmovaps %ymm2, %ymm0780; CHECK-NEXT:    retq781entry:782  br label %for.cond783 784for.cond:785  %c.addr.0 = phi <8 x float> [ %c, %entry ], [ %0, %for.inc ]786  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]787  %cmp = icmp slt i32 %i.0, %iter788  br i1 %cmp, label %for.body, label %for.end789 790for.body:791  br label %for.inc792 793for.inc:794  %0 = call <8 x float> @llvm.x86.fma.vfmadd.ps.256(<8 x float> %a, <8 x float> %b, <8 x float> %c.addr.0)795  %inc = add nsw i32 %i.0, 1796  br label %for.cond797 798for.end:799  ret <8 x float> %c.addr.0800}801 802define <8 x float> @fmsubps_loop_256(i32 %iter, <8 x float> %a, <8 x float> %b, <8 x float> %c) {803; CHECK-LABEL: fmsubps_loop_256:804; CHECK:       # %bb.0: # %entry805; CHECK-NEXT:    xorl %eax, %eax806; CHECK-NEXT:    cmpl %edi, %eax807; CHECK-NEXT:    jge .LBB21_3808; CHECK-NEXT:    .p2align 4809; CHECK-NEXT:  .LBB21_2: # %for.body810; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1811; CHECK-NEXT:    vfmsub231ps {{.*#+}} ymm2 = (ymm0 * ymm1) - ymm2812; CHECK-NEXT:    incl %eax813; CHECK-NEXT:    cmpl %edi, %eax814; CHECK-NEXT:    jl .LBB21_2815; CHECK-NEXT:  .LBB21_3: # %for.end816; CHECK-NEXT:    vmovaps %ymm2, %ymm0817; CHECK-NEXT:    retq818entry:819  br label %for.cond820 821for.cond:822  %c.addr.0 = phi <8 x float> [ %c, %entry ], [ %0, %for.inc ]823  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]824  %cmp = icmp slt i32 %i.0, %iter825  br i1 %cmp, label %for.body, label %for.end826 827for.body:828  br label %for.inc829 830for.inc:831  %0 = call <8 x float> @llvm.x86.fma.vfmsub.ps.256(<8 x float> %a, <8 x float> %b, <8 x float> %c.addr.0)832  %inc = add nsw i32 %i.0, 1833  br label %for.cond834 835for.end:836  ret <8 x float> %c.addr.0837}838 839define <8 x float> @fnmaddps_loop_256(i32 %iter, <8 x float> %a, <8 x float> %b, <8 x float> %c) {840; CHECK-LABEL: fnmaddps_loop_256:841; CHECK:       # %bb.0: # %entry842; CHECK-NEXT:    xorl %eax, %eax843; CHECK-NEXT:    cmpl %edi, %eax844; CHECK-NEXT:    jge .LBB22_3845; CHECK-NEXT:    .p2align 4846; CHECK-NEXT:  .LBB22_2: # %for.body847; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1848; CHECK-NEXT:    vfnmadd231ps {{.*#+}} ymm2 = -(ymm0 * ymm1) + ymm2849; CHECK-NEXT:    incl %eax850; CHECK-NEXT:    cmpl %edi, %eax851; CHECK-NEXT:    jl .LBB22_2852; CHECK-NEXT:  .LBB22_3: # %for.end853; CHECK-NEXT:    vmovaps %ymm2, %ymm0854; CHECK-NEXT:    retq855entry:856  br label %for.cond857 858for.cond:859  %c.addr.0 = phi <8 x float> [ %c, %entry ], [ %0, %for.inc ]860  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]861  %cmp = icmp slt i32 %i.0, %iter862  br i1 %cmp, label %for.body, label %for.end863 864for.body:865  br label %for.inc866 867for.inc:868  %0 = call <8 x float> @llvm.x86.fma.vfnmadd.ps.256(<8 x float> %a, <8 x float> %b, <8 x float> %c.addr.0)869  %inc = add nsw i32 %i.0, 1870  br label %for.cond871 872for.end:873  ret <8 x float> %c.addr.0874}875 876define <8 x float> @fnmsubps_loop_256(i32 %iter, <8 x float> %a, <8 x float> %b, <8 x float> %c) {877; CHECK-LABEL: fnmsubps_loop_256:878; CHECK:       # %bb.0: # %entry879; CHECK-NEXT:    xorl %eax, %eax880; CHECK-NEXT:    cmpl %edi, %eax881; CHECK-NEXT:    jge .LBB23_3882; CHECK-NEXT:    .p2align 4883; CHECK-NEXT:  .LBB23_2: # %for.body884; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1885; CHECK-NEXT:    vfnmsub231ps {{.*#+}} ymm2 = -(ymm0 * ymm1) - ymm2886; CHECK-NEXT:    incl %eax887; CHECK-NEXT:    cmpl %edi, %eax888; CHECK-NEXT:    jl .LBB23_2889; CHECK-NEXT:  .LBB23_3: # %for.end890; CHECK-NEXT:    vmovaps %ymm2, %ymm0891; CHECK-NEXT:    retq892entry:893  br label %for.cond894 895for.cond:896  %c.addr.0 = phi <8 x float> [ %c, %entry ], [ %0, %for.inc ]897  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]898  %cmp = icmp slt i32 %i.0, %iter899  br i1 %cmp, label %for.body, label %for.end900 901for.body:902  br label %for.inc903 904for.inc:905  %0 = call <8 x float> @llvm.x86.fma.vfnmsub.ps.256(<8 x float> %a, <8 x float> %b, <8 x float> %c.addr.0)906  %inc = add nsw i32 %i.0, 1907  br label %for.cond908 909for.end:910  ret <8 x float> %c.addr.0911}912 913declare <8 x float> @llvm.x86.fma.vfmaddsub.ps.256(<8 x float>, <8 x float>, <8 x float>)914declare <8 x float> @llvm.x86.fma.vfmsubadd.ps.256(<8 x float>, <8 x float>, <8 x float>)915declare <8 x float> @llvm.x86.fma.vfmadd.ps.256(<8 x float>, <8 x float>, <8 x float>)916declare <8 x float> @llvm.x86.fma.vfmsub.ps.256(<8 x float>, <8 x float>, <8 x float>)917declare <8 x float> @llvm.x86.fma.vfnmadd.ps.256(<8 x float>, <8 x float>, <8 x float>)918declare <8 x float> @llvm.x86.fma.vfnmsub.ps.256(<8 x float>, <8 x float>, <8 x float>)919