brintos

brintos / llvm-project-archived public Read only

0
0
Text · 27.5 KiB · fdf1be6 Raw
654 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z15 -verify-machineinstrs -O3 \3; RUN:   | FileCheck %s4 5; Test reassociation of fp add, subtract and multiply.6 7define double @fun0_fadd(ptr %x) {8; CHECK-LABEL: fun0_fadd:9; CHECK:       # %bb.0: # %entry10; CHECK-NEXT:    ld %f0, 0(%r2)11; CHECK-NEXT:    adb %f0, 8(%r2)12; CHECK-NEXT:    ld %f1, 24(%r2)13; CHECK-NEXT:    adb %f1, 16(%r2)14; CHECK-NEXT:    adbr %f0, %f115; CHECK-NEXT:    ld %f1, 40(%r2)16; CHECK-NEXT:    adb %f1, 32(%r2)17; CHECK-NEXT:    adb %f1, 48(%r2)18; CHECK-NEXT:    adbr %f0, %f119; CHECK-NEXT:    adb %f0, 56(%r2)20; CHECK-NEXT:    br %r1421entry:22  %0 = load double, ptr %x, align 823  %arrayidx1 = getelementptr inbounds double, ptr %x, i64 124  %1 = load double, ptr %arrayidx1, align 825  %add = fadd reassoc nsz arcp contract afn double %1, %026  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 227  %2 = load double, ptr %arrayidx2, align 828  %add3 = fadd reassoc nsz arcp contract afn double %add, %229  %arrayidx4 = getelementptr inbounds double, ptr %x, i64 330  %3 = load double, ptr %arrayidx4, align 831  %add5 = fadd reassoc nsz arcp contract afn double %add3, %332  %arrayidx6 = getelementptr inbounds double, ptr %x, i64 433  %4 = load double, ptr %arrayidx6, align 834  %add7 = fadd reassoc nsz arcp contract afn double %add5, %435  %arrayidx8 = getelementptr inbounds double, ptr %x, i64 536  %5 = load double, ptr %arrayidx8, align 837  %add9 = fadd reassoc nsz arcp contract afn double %add7, %538  %arrayidx10 = getelementptr inbounds double, ptr %x, i64 639  %6 = load double, ptr %arrayidx10, align 840  %add11 = fadd reassoc nsz arcp contract afn double %add9, %641  %arrayidx12 = getelementptr inbounds double, ptr %x, i64 742  %7 = load double, ptr %arrayidx12, align 843  %add13 = fadd reassoc nsz arcp contract afn double %add11, %744  ret double %add1345}46 47define float @fun1_fadd(ptr %x) {48; CHECK-LABEL: fun1_fadd:49; CHECK:       # %bb.0: # %entry50; CHECK-NEXT:    lde %f0, 0(%r2)51; CHECK-NEXT:    aeb %f0, 4(%r2)52; CHECK-NEXT:    lde %f1, 12(%r2)53; CHECK-NEXT:    aeb %f1, 8(%r2)54; CHECK-NEXT:    aebr %f0, %f155; CHECK-NEXT:    lde %f1, 20(%r2)56; CHECK-NEXT:    aeb %f1, 16(%r2)57; CHECK-NEXT:    aeb %f1, 24(%r2)58; CHECK-NEXT:    aebr %f0, %f159; CHECK-NEXT:    aeb %f0, 28(%r2)60; CHECK-NEXT:    br %r1461entry:62  %0 = load float, ptr %x, align 863  %arrayidx1 = getelementptr inbounds float, ptr %x, i64 164  %1 = load float, ptr %arrayidx1, align 865  %add = fadd reassoc nsz arcp contract afn float %1, %066  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 267  %2 = load float, ptr %arrayidx2, align 868  %add3 = fadd reassoc nsz arcp contract afn float %add, %269  %arrayidx4 = getelementptr inbounds float, ptr %x, i64 370  %3 = load float, ptr %arrayidx4, align 871  %add5 = fadd reassoc nsz arcp contract afn float %add3, %372  %arrayidx6 = getelementptr inbounds float, ptr %x, i64 473  %4 = load float, ptr %arrayidx6, align 874  %add7 = fadd reassoc nsz arcp contract afn float %add5, %475  %arrayidx8 = getelementptr inbounds float, ptr %x, i64 576  %5 = load float, ptr %arrayidx8, align 877  %add9 = fadd reassoc nsz arcp contract afn float %add7, %578  %arrayidx10 = getelementptr inbounds float, ptr %x, i64 679  %6 = load float, ptr %arrayidx10, align 880  %add11 = fadd reassoc nsz arcp contract afn float %add9, %681  %arrayidx12 = getelementptr inbounds float, ptr %x, i64 782  %7 = load float, ptr %arrayidx12, align 883  %add13 = fadd reassoc nsz arcp contract afn float %add11, %784  ret float %add1385}86 87define fp128 @fun2_fadd(ptr %x) {88; CHECK-LABEL: fun2_fadd:89; CHECK:       # %bb.0: # %entry90; CHECK-NEXT:    vl %v0, 0(%r3), 391; CHECK-NEXT:    vl %v1, 16(%r3), 392; CHECK-NEXT:    wfaxb %v0, %v1, %v093; CHECK-NEXT:    vl %v1, 32(%r3), 394; CHECK-NEXT:    vl %v2, 48(%r3), 395; CHECK-NEXT:    wfaxb %v1, %v1, %v296; CHECK-NEXT:    wfaxb %v0, %v0, %v197; CHECK-NEXT:    vl %v1, 64(%r3), 398; CHECK-NEXT:    vl %v2, 80(%r3), 399; CHECK-NEXT:    wfaxb %v1, %v1, %v2100; CHECK-NEXT:    vl %v2, 96(%r3), 3101; CHECK-NEXT:    wfaxb %v1, %v1, %v2102; CHECK-NEXT:    wfaxb %v0, %v0, %v1103; CHECK-NEXT:    vl %v1, 112(%r3), 3104; CHECK-NEXT:    wfaxb %v0, %v0, %v1105; CHECK-NEXT:    vst %v0, 0(%r2), 3106; CHECK-NEXT:    br %r14107entry:108  %0 = load fp128, ptr %x, align 8109  %arrayidx1 = getelementptr inbounds fp128, ptr %x, i64 1110  %1 = load fp128, ptr %arrayidx1, align 8111  %add = fadd reassoc nsz arcp contract afn fp128 %1, %0112  %arrayidx2 = getelementptr inbounds fp128, ptr %x, i64 2113  %2 = load fp128, ptr %arrayidx2, align 8114  %add3 = fadd reassoc nsz arcp contract afn fp128 %add, %2115  %arrayidx4 = getelementptr inbounds fp128, ptr %x, i64 3116  %3 = load fp128, ptr %arrayidx4, align 8117  %add5 = fadd reassoc nsz arcp contract afn fp128 %add3, %3118  %arrayidx6 = getelementptr inbounds fp128, ptr %x, i64 4119  %4 = load fp128, ptr %arrayidx6, align 8120  %add7 = fadd reassoc nsz arcp contract afn fp128 %add5, %4121  %arrayidx8 = getelementptr inbounds fp128, ptr %x, i64 5122  %5 = load fp128, ptr %arrayidx8, align 8123  %add9 = fadd reassoc nsz arcp contract afn fp128 %add7, %5124  %arrayidx10 = getelementptr inbounds fp128, ptr %x, i64 6125  %6 = load fp128, ptr %arrayidx10, align 8126  %add11 = fadd reassoc nsz arcp contract afn fp128 %add9, %6127  %arrayidx12 = getelementptr inbounds fp128, ptr %x, i64 7128  %7 = load fp128, ptr %arrayidx12, align 8129  %add13 = fadd reassoc nsz arcp contract afn fp128 %add11, %7130  ret fp128 %add13131}132 133define <2 x double> @fun3_fadd(ptr %x) {134; CHECK-LABEL: fun3_fadd:135; CHECK:       # %bb.0: # %entry136; CHECK-NEXT:    vl %v0, 0(%r2), 3137; CHECK-NEXT:    vl %v1, 16(%r2), 3138; CHECK-NEXT:    vfadb %v0, %v1, %v0139; CHECK-NEXT:    vl %v1, 32(%r2), 3140; CHECK-NEXT:    vl %v2, 48(%r2), 3141; CHECK-NEXT:    vfadb %v1, %v1, %v2142; CHECK-NEXT:    vfadb %v0, %v0, %v1143; CHECK-NEXT:    vl %v1, 64(%r2), 3144; CHECK-NEXT:    vl %v2, 80(%r2), 3145; CHECK-NEXT:    vfadb %v1, %v1, %v2146; CHECK-NEXT:    vl %v2, 96(%r2), 3147; CHECK-NEXT:    vfadb %v1, %v1, %v2148; CHECK-NEXT:    vfadb %v0, %v0, %v1149; CHECK-NEXT:    vl %v1, 112(%r2), 3150; CHECK-NEXT:    vfadb %v24, %v0, %v1151; CHECK-NEXT:    br %r14152entry:153  %0 = load <2 x double>, ptr %x, align 8154  %arrayidx1 = getelementptr inbounds <2 x double>, ptr %x, i64 1155  %1 = load <2 x double>, ptr %arrayidx1, align 8156  %add = fadd reassoc nsz arcp contract afn <2 x double> %1, %0157  %arrayidx2 = getelementptr inbounds <2 x double>, ptr %x, i64 2158  %2 = load <2 x double>, ptr %arrayidx2, align 8159  %add3 = fadd reassoc nsz arcp contract afn <2 x double> %add, %2160  %arrayidx4 = getelementptr inbounds <2 x double>, ptr %x, i64 3161  %3 = load <2 x double>, ptr %arrayidx4, align 8162  %add5 = fadd reassoc nsz arcp contract afn <2 x double> %add3, %3163  %arrayidx6 = getelementptr inbounds <2 x double>, ptr %x, i64 4164  %4 = load <2 x double>, ptr %arrayidx6, align 8165  %add7 = fadd reassoc nsz arcp contract afn <2 x double> %add5, %4166  %arrayidx8 = getelementptr inbounds <2 x double>, ptr %x, i64 5167  %5 = load <2 x double>, ptr %arrayidx8, align 8168  %add9 = fadd reassoc nsz arcp contract afn <2 x double> %add7, %5169  %arrayidx10 = getelementptr inbounds <2 x double>, ptr %x, i64 6170  %6 = load <2 x double>, ptr %arrayidx10, align 8171  %add11 = fadd reassoc nsz arcp contract afn <2 x double> %add9, %6172  %arrayidx12 = getelementptr inbounds <2 x double>, ptr %x, i64 7173  %7 = load <2 x double>, ptr %arrayidx12, align 8174  %add13 = fadd reassoc nsz arcp contract afn <2 x double> %add11, %7175  ret <2 x double> %add13176}177 178define <4 x float> @fun4_fadd(ptr %x) {179; CHECK-LABEL: fun4_fadd:180; CHECK:       # %bb.0: # %entry181; CHECK-NEXT:    vl %v0, 0(%r2), 3182; CHECK-NEXT:    vl %v1, 16(%r2), 3183; CHECK-NEXT:    vfasb %v0, %v1, %v0184; CHECK-NEXT:    vl %v1, 32(%r2), 3185; CHECK-NEXT:    vl %v2, 48(%r2), 3186; CHECK-NEXT:    vfasb %v1, %v1, %v2187; CHECK-NEXT:    vfasb %v0, %v0, %v1188; CHECK-NEXT:    vl %v1, 64(%r2), 3189; CHECK-NEXT:    vl %v2, 80(%r2), 3190; CHECK-NEXT:    vfasb %v1, %v1, %v2191; CHECK-NEXT:    vl %v2, 96(%r2), 3192; CHECK-NEXT:    vfasb %v1, %v1, %v2193; CHECK-NEXT:    vfasb %v0, %v0, %v1194; CHECK-NEXT:    vl %v1, 112(%r2), 3195; CHECK-NEXT:    vfasb %v24, %v0, %v1196; CHECK-NEXT:    br %r14197entry:198  %0 = load <4 x float>, ptr %x, align 8199  %arrayidx1 = getelementptr inbounds <4 x float>, ptr %x, i64 1200  %1 = load <4 x float>, ptr %arrayidx1, align 8201  %add = fadd reassoc nsz arcp contract afn <4 x float> %1, %0202  %arrayidx2 = getelementptr inbounds <4 x float>, ptr %x, i64 2203  %2 = load <4 x float>, ptr %arrayidx2, align 8204  %add3 = fadd reassoc nsz arcp contract afn <4 x float> %add, %2205  %arrayidx4 = getelementptr inbounds <4 x float>, ptr %x, i64 3206  %3 = load <4 x float>, ptr %arrayidx4, align 8207  %add5 = fadd reassoc nsz arcp contract afn <4 x float> %add3, %3208  %arrayidx6 = getelementptr inbounds <4 x float>, ptr %x, i64 4209  %4 = load <4 x float>, ptr %arrayidx6, align 8210  %add7 = fadd reassoc nsz arcp contract afn <4 x float> %add5, %4211  %arrayidx8 = getelementptr inbounds <4 x float>, ptr %x, i64 5212  %5 = load <4 x float>, ptr %arrayidx8, align 8213  %add9 = fadd reassoc nsz arcp contract afn <4 x float> %add7, %5214  %arrayidx10 = getelementptr inbounds <4 x float>, ptr %x, i64 6215  %6 = load <4 x float>, ptr %arrayidx10, align 8216  %add11 = fadd reassoc nsz arcp contract afn <4 x float> %add9, %6217  %arrayidx12 = getelementptr inbounds <4 x float>, ptr %x, i64 7218  %7 = load <4 x float>, ptr %arrayidx12, align 8219  %add13 = fadd reassoc nsz arcp contract afn <4 x float> %add11, %7220  ret <4 x float> %add13221}222 223define double @fun5_fsub(ptr %x) {224; CHECK-LABEL: fun5_fsub:225; CHECK:       # %bb.0: # %entry226; CHECK-NEXT:    ld %f0, 0(%r2)227; CHECK-NEXT:    sdb %f0, 8(%r2)228; CHECK-NEXT:    ld %f1, 24(%r2)229; CHECK-NEXT:    adb %f1, 16(%r2)230; CHECK-NEXT:    sdbr %f0, %f1231; CHECK-NEXT:    ld %f1, 40(%r2)232; CHECK-NEXT:    adb %f1, 32(%r2)233; CHECK-NEXT:    adb %f1, 48(%r2)234; CHECK-NEXT:    sdbr %f0, %f1235; CHECK-NEXT:    sdb %f0, 56(%r2)236; CHECK-NEXT:    br %r14237entry:238  %0 = load double, ptr %x, align 8239  %arrayidx1 = getelementptr inbounds double, ptr %x, i64 1240  %1 = load double, ptr %arrayidx1, align 8241  %sub = fsub reassoc nsz arcp contract afn double %0, %1242  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 2243  %2 = load double, ptr %arrayidx2, align 8244  %sub3 = fsub reassoc nsz arcp contract afn double %sub, %2245  %arrayidx4 = getelementptr inbounds double, ptr %x, i64 3246  %3 = load double, ptr %arrayidx4, align 8247  %sub5 = fsub reassoc nsz arcp contract afn double %sub3, %3248  %arrayidx6 = getelementptr inbounds double, ptr %x, i64 4249  %4 = load double, ptr %arrayidx6, align 8250  %sub7 = fsub reassoc nsz arcp contract afn double %sub5, %4251  %arrayidx8 = getelementptr inbounds double, ptr %x, i64 5252  %5 = load double, ptr %arrayidx8, align 8253  %sub9 = fsub reassoc nsz arcp contract afn double %sub7, %5254  %arrayidx10 = getelementptr inbounds double, ptr %x, i64 6255  %6 = load double, ptr %arrayidx10, align 8256  %sub11 = fsub reassoc nsz arcp contract afn double %sub9, %6257  %arrayidx12 = getelementptr inbounds double, ptr %x, i64 7258  %7 = load double, ptr %arrayidx12, align 8259  %sub13 = fsub reassoc nsz arcp contract afn double %sub11, %7260  ret double %sub13261}262 263define float @fun6_fsub(ptr %x) {264; CHECK-LABEL: fun6_fsub:265; CHECK:       # %bb.0: # %entry266; CHECK-NEXT:    lde %f0, 0(%r2)267; CHECK-NEXT:    seb %f0, 4(%r2)268; CHECK-NEXT:    lde %f1, 12(%r2)269; CHECK-NEXT:    aeb %f1, 8(%r2)270; CHECK-NEXT:    sebr %f0, %f1271; CHECK-NEXT:    lde %f1, 20(%r2)272; CHECK-NEXT:    aeb %f1, 16(%r2)273; CHECK-NEXT:    aeb %f1, 24(%r2)274; CHECK-NEXT:    sebr %f0, %f1275; CHECK-NEXT:    seb %f0, 28(%r2)276; CHECK-NEXT:    br %r14277entry:278  %0 = load float, ptr %x, align 8279  %arrayidx1 = getelementptr inbounds float, ptr %x, i64 1280  %1 = load float, ptr %arrayidx1, align 8281  %sub = fsub reassoc nsz arcp contract afn float %0, %1282  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 2283  %2 = load float, ptr %arrayidx2, align 8284  %sub3 = fsub reassoc nsz arcp contract afn float %sub, %2285  %arrayidx4 = getelementptr inbounds float, ptr %x, i64 3286  %3 = load float, ptr %arrayidx4, align 8287  %sub5 = fsub reassoc nsz arcp contract afn float %sub3, %3288  %arrayidx6 = getelementptr inbounds float, ptr %x, i64 4289  %4 = load float, ptr %arrayidx6, align 8290  %sub7 = fsub reassoc nsz arcp contract afn float %sub5, %4291  %arrayidx8 = getelementptr inbounds float, ptr %x, i64 5292  %5 = load float, ptr %arrayidx8, align 8293  %sub9 = fsub reassoc nsz arcp contract afn float %sub7, %5294  %arrayidx10 = getelementptr inbounds float, ptr %x, i64 6295  %6 = load float, ptr %arrayidx10, align 8296  %sub11 = fsub reassoc nsz arcp contract afn float %sub9, %6297  %arrayidx12 = getelementptr inbounds float, ptr %x, i64 7298  %7 = load float, ptr %arrayidx12, align 8299  %sub13 = fsub reassoc nsz arcp contract afn float %sub11, %7300  ret float %sub13301}302 303define fp128 @fun7_fsub(ptr %x) {304; CHECK-LABEL: fun7_fsub:305; CHECK:       # %bb.0: # %entry306; CHECK-NEXT:    vl %v0, 0(%r3), 3307; CHECK-NEXT:    vl %v1, 16(%r3), 3308; CHECK-NEXT:    wfsxb %v0, %v0, %v1309; CHECK-NEXT:    vl %v1, 32(%r3), 3310; CHECK-NEXT:    vl %v2, 48(%r3), 3311; CHECK-NEXT:    wfaxb %v1, %v1, %v2312; CHECK-NEXT:    wfsxb %v0, %v0, %v1313; CHECK-NEXT:    vl %v1, 64(%r3), 3314; CHECK-NEXT:    vl %v2, 80(%r3), 3315; CHECK-NEXT:    wfaxb %v1, %v1, %v2316; CHECK-NEXT:    vl %v2, 96(%r3), 3317; CHECK-NEXT:    wfaxb %v1, %v1, %v2318; CHECK-NEXT:    wfsxb %v0, %v0, %v1319; CHECK-NEXT:    vl %v1, 112(%r3), 3320; CHECK-NEXT:    wfsxb %v0, %v0, %v1321; CHECK-NEXT:    vst %v0, 0(%r2), 3322; CHECK-NEXT:    br %r14323entry:324  %0 = load fp128, ptr %x, align 8325  %arrayidx1 = getelementptr inbounds fp128, ptr %x, i64 1326  %1 = load fp128, ptr %arrayidx1, align 8327  %sub = fsub reassoc nsz arcp contract afn fp128 %0, %1328  %arrayidx2 = getelementptr inbounds fp128, ptr %x, i64 2329  %2 = load fp128, ptr %arrayidx2, align 8330  %sub3 = fsub reassoc nsz arcp contract afn fp128 %sub, %2331  %arrayidx4 = getelementptr inbounds fp128, ptr %x, i64 3332  %3 = load fp128, ptr %arrayidx4, align 8333  %sub5 = fsub reassoc nsz arcp contract afn fp128 %sub3, %3334  %arrayidx6 = getelementptr inbounds fp128, ptr %x, i64 4335  %4 = load fp128, ptr %arrayidx6, align 8336  %sub7 = fsub reassoc nsz arcp contract afn fp128 %sub5, %4337  %arrayidx8 = getelementptr inbounds fp128, ptr %x, i64 5338  %5 = load fp128, ptr %arrayidx8, align 8339  %sub9 = fsub reassoc nsz arcp contract afn fp128 %sub7, %5340  %arrayidx10 = getelementptr inbounds fp128, ptr %x, i64 6341  %6 = load fp128, ptr %arrayidx10, align 8342  %sub11 = fsub reassoc nsz arcp contract afn fp128 %sub9, %6343  %arrayidx12 = getelementptr inbounds fp128, ptr %x, i64 7344  %7 = load fp128, ptr %arrayidx12, align 8345  %sub13 = fsub reassoc nsz arcp contract afn fp128 %sub11, %7346  ret fp128 %sub13347}348 349define <2 x double> @fun8_fsub(ptr %x) {350; CHECK-LABEL: fun8_fsub:351; CHECK:       # %bb.0: # %entry352; CHECK-NEXT:    vl %v0, 0(%r2), 3353; CHECK-NEXT:    vl %v1, 16(%r2), 3354; CHECK-NEXT:    vfsdb %v0, %v0, %v1355; CHECK-NEXT:    vl %v1, 32(%r2), 3356; CHECK-NEXT:    vl %v2, 48(%r2), 3357; CHECK-NEXT:    vfadb %v1, %v1, %v2358; CHECK-NEXT:    vfsdb %v0, %v0, %v1359; CHECK-NEXT:    vl %v1, 64(%r2), 3360; CHECK-NEXT:    vl %v2, 80(%r2), 3361; CHECK-NEXT:    vfadb %v1, %v1, %v2362; CHECK-NEXT:    vl %v2, 96(%r2), 3363; CHECK-NEXT:    vfadb %v1, %v1, %v2364; CHECK-NEXT:    vfsdb %v0, %v0, %v1365; CHECK-NEXT:    vl %v1, 112(%r2), 3366; CHECK-NEXT:    vfsdb %v24, %v0, %v1367; CHECK-NEXT:    br %r14368entry:369  %0 = load <2 x double>, ptr %x, align 8370  %arrayidx1 = getelementptr inbounds <2 x double>, ptr %x, i64 1371  %1 = load <2 x double>, ptr %arrayidx1, align 8372  %sub = fsub reassoc nsz arcp contract afn <2 x double> %0, %1373  %arrayidx2 = getelementptr inbounds <2 x double>, ptr %x, i64 2374  %2 = load <2 x double>, ptr %arrayidx2, align 8375  %sub3 = fsub reassoc nsz arcp contract afn <2 x double> %sub, %2376  %arrayidx4 = getelementptr inbounds <2 x double>, ptr %x, i64 3377  %3 = load <2 x double>, ptr %arrayidx4, align 8378  %sub5 = fsub reassoc nsz arcp contract afn <2 x double> %sub3, %3379  %arrayidx6 = getelementptr inbounds <2 x double>, ptr %x, i64 4380  %4 = load <2 x double>, ptr %arrayidx6, align 8381  %sub7 = fsub reassoc nsz arcp contract afn <2 x double> %sub5, %4382  %arrayidx8 = getelementptr inbounds <2 x double>, ptr %x, i64 5383  %5 = load <2 x double>, ptr %arrayidx8, align 8384  %sub9 = fsub reassoc nsz arcp contract afn <2 x double> %sub7, %5385  %arrayidx10 = getelementptr inbounds <2 x double>, ptr %x, i64 6386  %6 = load <2 x double>, ptr %arrayidx10, align 8387  %sub11 = fsub reassoc nsz arcp contract afn <2 x double> %sub9, %6388  %arrayidx12 = getelementptr inbounds <2 x double>, ptr %x, i64 7389  %7 = load <2 x double>, ptr %arrayidx12, align 8390  %sub13 = fsub reassoc nsz arcp contract afn <2 x double> %sub11, %7391  ret <2 x double> %sub13392}393 394define <4 x float> @fun9_fsub(ptr %x) {395; CHECK-LABEL: fun9_fsub:396; CHECK:       # %bb.0: # %entry397; CHECK-NEXT:    vl %v0, 0(%r2), 3398; CHECK-NEXT:    vl %v1, 16(%r2), 3399; CHECK-NEXT:    vfssb %v0, %v0, %v1400; CHECK-NEXT:    vl %v1, 32(%r2), 3401; CHECK-NEXT:    vl %v2, 48(%r2), 3402; CHECK-NEXT:    vfasb %v1, %v1, %v2403; CHECK-NEXT:    vfssb %v0, %v0, %v1404; CHECK-NEXT:    vl %v1, 64(%r2), 3405; CHECK-NEXT:    vl %v2, 80(%r2), 3406; CHECK-NEXT:    vfasb %v1, %v1, %v2407; CHECK-NEXT:    vl %v2, 96(%r2), 3408; CHECK-NEXT:    vfasb %v1, %v1, %v2409; CHECK-NEXT:    vfssb %v0, %v0, %v1410; CHECK-NEXT:    vl %v1, 112(%r2), 3411; CHECK-NEXT:    vfssb %v24, %v0, %v1412; CHECK-NEXT:    br %r14413entry:414  %0 = load <4 x float>, ptr %x, align 8415  %arrayidx1 = getelementptr inbounds <4 x float>, ptr %x, i64 1416  %1 = load <4 x float>, ptr %arrayidx1, align 8417  %sub = fsub reassoc nsz arcp contract afn <4 x float> %0, %1418  %arrayidx2 = getelementptr inbounds <4 x float>, ptr %x, i64 2419  %2 = load <4 x float>, ptr %arrayidx2, align 8420  %sub3 = fsub reassoc nsz arcp contract afn <4 x float> %sub, %2421  %arrayidx4 = getelementptr inbounds <4 x float>, ptr %x, i64 3422  %3 = load <4 x float>, ptr %arrayidx4, align 8423  %sub5 = fsub reassoc nsz arcp contract afn <4 x float> %sub3, %3424  %arrayidx6 = getelementptr inbounds <4 x float>, ptr %x, i64 4425  %4 = load <4 x float>, ptr %arrayidx6, align 8426  %sub7 = fsub reassoc nsz arcp contract afn <4 x float> %sub5, %4427  %arrayidx8 = getelementptr inbounds <4 x float>, ptr %x, i64 5428  %5 = load <4 x float>, ptr %arrayidx8, align 8429  %sub9 = fsub reassoc nsz arcp contract afn <4 x float> %sub7, %5430  %arrayidx10 = getelementptr inbounds <4 x float>, ptr %x, i64 6431  %6 = load <4 x float>, ptr %arrayidx10, align 8432  %sub11 = fsub reassoc nsz arcp contract afn <4 x float> %sub9, %6433  %arrayidx12 = getelementptr inbounds <4 x float>, ptr %x, i64 7434  %7 = load <4 x float>, ptr %arrayidx12, align 8435  %sub13 = fsub reassoc nsz arcp contract afn <4 x float> %sub11, %7436  ret <4 x float> %sub13437}438 439define double @fun10_fmul(ptr %x) {440; CHECK-LABEL: fun10_fmul:441; CHECK:       # %bb.0: # %entry442; CHECK-NEXT:    ld %f0, 8(%r2)443; CHECK-NEXT:    mdb %f0, 0(%r2)444; CHECK-NEXT:    ld %f1, 24(%r2)445; CHECK-NEXT:    mdb %f1, 16(%r2)446; CHECK-NEXT:    mdbr %f0, %f1447; CHECK-NEXT:    ld %f1, 40(%r2)448; CHECK-NEXT:    mdb %f1, 32(%r2)449; CHECK-NEXT:    mdb %f1, 48(%r2)450; CHECK-NEXT:    mdbr %f0, %f1451; CHECK-NEXT:    mdb %f0, 56(%r2)452; CHECK-NEXT:    br %r14453entry:454  %0 = load double, ptr %x, align 8455  %arrayidx1 = getelementptr inbounds double, ptr %x, i64 1456  %1 = load double, ptr %arrayidx1, align 8457  %mul = fmul reassoc nsz arcp contract afn double %0, %1458  %arrayidx2 = getelementptr inbounds double, ptr %x, i64 2459  %2 = load double, ptr %arrayidx2, align 8460  %mul3 = fmul reassoc nsz arcp contract afn double %mul, %2461  %arrayidx4 = getelementptr inbounds double, ptr %x, i64 3462  %3 = load double, ptr %arrayidx4, align 8463  %mul5 = fmul reassoc nsz arcp contract afn double %mul3, %3464  %arrayidx6 = getelementptr inbounds double, ptr %x, i64 4465  %4 = load double, ptr %arrayidx6, align 8466  %mul7 = fmul reassoc nsz arcp contract afn double %mul5, %4467  %arrayidx8 = getelementptr inbounds double, ptr %x, i64 5468  %5 = load double, ptr %arrayidx8, align 8469  %mul9 = fmul reassoc nsz arcp contract afn double %mul7, %5470  %arrayidx10 = getelementptr inbounds double, ptr %x, i64 6471  %6 = load double, ptr %arrayidx10, align 8472  %mul11 = fmul reassoc nsz arcp contract afn double %mul9, %6473  %arrayidx12 = getelementptr inbounds double, ptr %x, i64 7474  %7 = load double, ptr %arrayidx12, align 8475  %mul13 = fmul reassoc nsz arcp contract afn double %mul11, %7476  ret double %mul13477}478 479define float @fun11_fmul(ptr %x) {480; CHECK-LABEL: fun11_fmul:481; CHECK:       # %bb.0: # %entry482; CHECK-NEXT:    lde %f0, 4(%r2)483; CHECK-NEXT:    meeb %f0, 0(%r2)484; CHECK-NEXT:    lde %f1, 12(%r2)485; CHECK-NEXT:    meeb %f1, 8(%r2)486; CHECK-NEXT:    meebr %f0, %f1487; CHECK-NEXT:    lde %f1, 20(%r2)488; CHECK-NEXT:    meeb %f1, 16(%r2)489; CHECK-NEXT:    meeb %f1, 24(%r2)490; CHECK-NEXT:    meebr %f0, %f1491; CHECK-NEXT:    meeb %f0, 28(%r2)492; CHECK-NEXT:    br %r14493entry:494  %0 = load float, ptr %x, align 8495  %arrayidx1 = getelementptr inbounds float, ptr %x, i64 1496  %1 = load float, ptr %arrayidx1, align 8497  %mul = fmul reassoc nsz arcp contract afn float %0, %1498  %arrayidx2 = getelementptr inbounds float, ptr %x, i64 2499  %2 = load float, ptr %arrayidx2, align 8500  %mul3 = fmul reassoc nsz arcp contract afn float %mul, %2501  %arrayidx4 = getelementptr inbounds float, ptr %x, i64 3502  %3 = load float, ptr %arrayidx4, align 8503  %mul5 = fmul reassoc nsz arcp contract afn float %mul3, %3504  %arrayidx6 = getelementptr inbounds float, ptr %x, i64 4505  %4 = load float, ptr %arrayidx6, align 8506  %mul7 = fmul reassoc nsz arcp contract afn float %mul5, %4507  %arrayidx8 = getelementptr inbounds float, ptr %x, i64 5508  %5 = load float, ptr %arrayidx8, align 8509  %mul9 = fmul reassoc nsz arcp contract afn float %mul7, %5510  %arrayidx10 = getelementptr inbounds float, ptr %x, i64 6511  %6 = load float, ptr %arrayidx10, align 8512  %mul11 = fmul reassoc nsz arcp contract afn float %mul9, %6513  %arrayidx12 = getelementptr inbounds float, ptr %x, i64 7514  %7 = load float, ptr %arrayidx12, align 8515  %mul13 = fmul reassoc nsz arcp contract afn float %mul11, %7516  ret float %mul13517}518 519define fp128 @fun12_fmul(ptr %x) {520; CHECK-LABEL: fun12_fmul:521; CHECK:       # %bb.0: # %entry522; CHECK-NEXT:    vl %v0, 0(%r3), 3523; CHECK-NEXT:    vl %v1, 16(%r3), 3524; CHECK-NEXT:    wfmxb %v0, %v0, %v1525; CHECK-NEXT:    vl %v1, 32(%r3), 3526; CHECK-NEXT:    vl %v2, 48(%r3), 3527; CHECK-NEXT:    wfmxb %v1, %v1, %v2528; CHECK-NEXT:    wfmxb %v0, %v0, %v1529; CHECK-NEXT:    vl %v1, 64(%r3), 3530; CHECK-NEXT:    vl %v2, 80(%r3), 3531; CHECK-NEXT:    wfmxb %v1, %v1, %v2532; CHECK-NEXT:    vl %v2, 96(%r3), 3533; CHECK-NEXT:    wfmxb %v1, %v1, %v2534; CHECK-NEXT:    wfmxb %v0, %v0, %v1535; CHECK-NEXT:    vl %v1, 112(%r3), 3536; CHECK-NEXT:    wfmxb %v0, %v0, %v1537; CHECK-NEXT:    vst %v0, 0(%r2), 3538; CHECK-NEXT:    br %r14539entry:540  %0 = load fp128, ptr %x, align 8541  %arrayidx1 = getelementptr inbounds fp128, ptr %x, i64 1542  %1 = load fp128, ptr %arrayidx1, align 8543  %mul = fmul reassoc nsz arcp contract afn fp128 %0, %1544  %arrayidx2 = getelementptr inbounds fp128, ptr %x, i64 2545  %2 = load fp128, ptr %arrayidx2, align 8546  %mul3 = fmul reassoc nsz arcp contract afn fp128 %mul, %2547  %arrayidx4 = getelementptr inbounds fp128, ptr %x, i64 3548  %3 = load fp128, ptr %arrayidx4, align 8549  %mul5 = fmul reassoc nsz arcp contract afn fp128 %mul3, %3550  %arrayidx6 = getelementptr inbounds fp128, ptr %x, i64 4551  %4 = load fp128, ptr %arrayidx6, align 8552  %mul7 = fmul reassoc nsz arcp contract afn fp128 %mul5, %4553  %arrayidx8 = getelementptr inbounds fp128, ptr %x, i64 5554  %5 = load fp128, ptr %arrayidx8, align 8555  %mul9 = fmul reassoc nsz arcp contract afn fp128 %mul7, %5556  %arrayidx10 = getelementptr inbounds fp128, ptr %x, i64 6557  %6 = load fp128, ptr %arrayidx10, align 8558  %mul11 = fmul reassoc nsz arcp contract afn fp128 %mul9, %6559  %arrayidx12 = getelementptr inbounds fp128, ptr %x, i64 7560  %7 = load fp128, ptr %arrayidx12, align 8561  %mul13 = fmul reassoc nsz arcp contract afn fp128 %mul11, %7562  ret fp128 %mul13563}564 565define <2 x double> @fun13_fmul(ptr %x) {566; CHECK-LABEL: fun13_fmul:567; CHECK:       # %bb.0: # %entry568; CHECK-NEXT:    vl %v0, 0(%r2), 3569; CHECK-NEXT:    vl %v1, 16(%r2), 3570; CHECK-NEXT:    vfmdb %v0, %v0, %v1571; CHECK-NEXT:    vl %v1, 32(%r2), 3572; CHECK-NEXT:    vl %v2, 48(%r2), 3573; CHECK-NEXT:    vfmdb %v1, %v1, %v2574; CHECK-NEXT:    vfmdb %v0, %v0, %v1575; CHECK-NEXT:    vl %v1, 64(%r2), 3576; CHECK-NEXT:    vl %v2, 80(%r2), 3577; CHECK-NEXT:    vfmdb %v1, %v1, %v2578; CHECK-NEXT:    vl %v2, 96(%r2), 3579; CHECK-NEXT:    vfmdb %v1, %v1, %v2580; CHECK-NEXT:    vfmdb %v0, %v0, %v1581; CHECK-NEXT:    vl %v1, 112(%r2), 3582; CHECK-NEXT:    vfmdb %v24, %v0, %v1583; CHECK-NEXT:    br %r14584entry:585  %0 = load <2 x double>, ptr %x, align 8586  %arrayidx1 = getelementptr inbounds <2 x double>, ptr %x, i64 1587  %1 = load <2 x double>, ptr %arrayidx1, align 8588  %mul = fmul reassoc nsz arcp contract afn <2 x double> %0, %1589  %arrayidx2 = getelementptr inbounds <2 x double>, ptr %x, i64 2590  %2 = load <2 x double>, ptr %arrayidx2, align 8591  %mul3 = fmul reassoc nsz arcp contract afn <2 x double> %mul, %2592  %arrayidx4 = getelementptr inbounds <2 x double>, ptr %x, i64 3593  %3 = load <2 x double>, ptr %arrayidx4, align 8594  %mul5 = fmul reassoc nsz arcp contract afn <2 x double> %mul3, %3595  %arrayidx6 = getelementptr inbounds <2 x double>, ptr %x, i64 4596  %4 = load <2 x double>, ptr %arrayidx6, align 8597  %mul7 = fmul reassoc nsz arcp contract afn <2 x double> %mul5, %4598  %arrayidx8 = getelementptr inbounds <2 x double>, ptr %x, i64 5599  %5 = load <2 x double>, ptr %arrayidx8, align 8600  %mul9 = fmul reassoc nsz arcp contract afn <2 x double> %mul7, %5601  %arrayidx10 = getelementptr inbounds <2 x double>, ptr %x, i64 6602  %6 = load <2 x double>, ptr %arrayidx10, align 8603  %mul11 = fmul reassoc nsz arcp contract afn <2 x double> %mul9, %6604  %arrayidx12 = getelementptr inbounds <2 x double>, ptr %x, i64 7605  %7 = load <2 x double>, ptr %arrayidx12, align 8606  %mul13 = fmul reassoc nsz arcp contract afn <2 x double> %mul11, %7607  ret <2 x double> %mul13608}609 610define <4 x float> @fun14_fmul(ptr %x) {611; CHECK-LABEL: fun14_fmul:612; CHECK:       # %bb.0: # %entry613; CHECK-NEXT:    vl %v0, 0(%r2), 3614; CHECK-NEXT:    vl %v1, 16(%r2), 3615; CHECK-NEXT:    vfmsb %v0, %v0, %v1616; CHECK-NEXT:    vl %v1, 32(%r2), 3617; CHECK-NEXT:    vl %v2, 48(%r2), 3618; CHECK-NEXT:    vfmsb %v1, %v1, %v2619; CHECK-NEXT:    vfmsb %v0, %v0, %v1620; CHECK-NEXT:    vl %v1, 64(%r2), 3621; CHECK-NEXT:    vl %v2, 80(%r2), 3622; CHECK-NEXT:    vfmsb %v1, %v1, %v2623; CHECK-NEXT:    vl %v2, 96(%r2), 3624; CHECK-NEXT:    vfmsb %v1, %v1, %v2625; CHECK-NEXT:    vfmsb %v0, %v0, %v1626; CHECK-NEXT:    vl %v1, 112(%r2), 3627; CHECK-NEXT:    vfmsb %v24, %v0, %v1628; CHECK-NEXT:    br %r14629entry:630  %0 = load <4 x float>, ptr %x, align 8631  %arrayidx1 = getelementptr inbounds <4 x float>, ptr %x, i64 1632  %1 = load <4 x float>, ptr %arrayidx1, align 8633  %mul = fmul reassoc nsz arcp contract afn <4 x float> %0, %1634  %arrayidx2 = getelementptr inbounds <4 x float>, ptr %x, i64 2635  %2 = load <4 x float>, ptr %arrayidx2, align 8636  %mul3 = fmul reassoc nsz arcp contract afn <4 x float> %mul, %2637  %arrayidx4 = getelementptr inbounds <4 x float>, ptr %x, i64 3638  %3 = load <4 x float>, ptr %arrayidx4, align 8639  %mul5 = fmul reassoc nsz arcp contract afn <4 x float> %mul3, %3640  %arrayidx6 = getelementptr inbounds <4 x float>, ptr %x, i64 4641  %4 = load <4 x float>, ptr %arrayidx6, align 8642  %mul7 = fmul reassoc nsz arcp contract afn <4 x float> %mul5, %4643  %arrayidx8 = getelementptr inbounds <4 x float>, ptr %x, i64 5644  %5 = load <4 x float>, ptr %arrayidx8, align 8645  %mul9 = fmul reassoc nsz arcp contract afn <4 x float> %mul7, %5646  %arrayidx10 = getelementptr inbounds <4 x float>, ptr %x, i64 6647  %6 = load <4 x float>, ptr %arrayidx10, align 8648  %mul11 = fmul reassoc nsz arcp contract afn <4 x float> %mul9, %6649  %arrayidx12 = getelementptr inbounds <4 x float>, ptr %x, i64 7650  %7 = load <4 x float>, ptr %arrayidx12, align 8651  %mul13 = fmul reassoc nsz arcp contract afn <4 x float> %mul11, %7652  ret <4 x float> %mul13653}654