brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.6 KiB · 0ed29b4 Raw
662 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu | FileCheck %s3 4define i8 @scalarize_v16i8(ptr %p) {5; CHECK-LABEL: scalarize_v16i8:6; CHECK:       // %bb.0:7; CHECK-NEXT:    ldrb w8, [x0, #3]8; CHECK-NEXT:    ldrb w9, [x0, #2]9; CHECK-NEXT:    ldrb w10, [x0, #1]10; CHECK-NEXT:    ldrb w11, [x0]11; CHECK-NEXT:    ldrb w13, [x0, #5]12; CHECK-NEXT:    ldrb w14, [x0, #4]13; CHECK-NEXT:    add w8, w9, w814; CHECK-NEXT:    ldrb w12, [x0, #15]15; CHECK-NEXT:    ldrb w15, [x0, #11]16; CHECK-NEXT:    add w10, w11, w1017; CHECK-NEXT:    add w9, w14, w1318; CHECK-NEXT:    ldrb w11, [x0, #10]19; CHECK-NEXT:    ldrb w13, [x0, #9]20; CHECK-NEXT:    add w8, w10, w821; CHECK-NEXT:    ldrb w14, [x0, #8]22; CHECK-NEXT:    ldrb w16, [x0, #7]23; CHECK-NEXT:    add w11, w11, w1524; CHECK-NEXT:    ldrb w17, [x0, #6]25; CHECK-NEXT:    ldrb w18, [x0, #14]26; CHECK-NEXT:    add w13, w14, w1327; CHECK-NEXT:    ldrb w1, [x0, #13]28; CHECK-NEXT:    ldrb w0, [x0, #12]29; CHECK-NEXT:    add w16, w17, w1630; CHECK-NEXT:    add w10, w13, w1131; CHECK-NEXT:    add w12, w18, w1232; CHECK-NEXT:    add w9, w9, w1633; CHECK-NEXT:    add w14, w0, w134; CHECK-NEXT:    add w8, w8, w935; CHECK-NEXT:    add w11, w14, w1236; CHECK-NEXT:    add w9, w10, w1137; CHECK-NEXT:    add w0, w8, w938; CHECK-NEXT:    ret39  %wide.load = load <16 x i8>, ptr %p, align 440  %l0 = extractelement <16 x i8> %wide.load, i32 041  %l1 = extractelement <16 x i8> %wide.load, i32 142  %l2 = extractelement <16 x i8> %wide.load, i32 243  %l3 = extractelement <16 x i8> %wide.load, i32 344  %l4 = extractelement <16 x i8> %wide.load, i32 445  %l5 = extractelement <16 x i8> %wide.load, i32 546  %l6 = extractelement <16 x i8> %wide.load, i32 647  %l7 = extractelement <16 x i8> %wide.load, i32 748  %l8 = extractelement <16 x i8> %wide.load, i32 849  %l9 = extractelement <16 x i8> %wide.load, i32 950  %l10 = extractelement <16 x i8> %wide.load, i32 1051  %l11 = extractelement <16 x i8> %wide.load, i32 1152  %l12 = extractelement <16 x i8> %wide.load, i32 1253  %l13 = extractelement <16 x i8> %wide.load, i32 1354  %l14 = extractelement <16 x i8> %wide.load, i32 1455  %l15 = extractelement <16 x i8> %wide.load, i32 1556  %a0 = add i8 %l0, %l157  %a1 = add i8 %l2, %l358  %a2 = add i8 %l4, %l559  %a3 = add i8 %l6, %l760  %a4 = add i8 %l8, %l961  %a5 = add i8 %l10, %l1162  %a6 = add i8 %l12, %l1363  %a7 = add i8 %l14, %l1564  %b0 = add i8 %a0, %a165  %b1 = add i8 %a2, %a366  %b2 = add i8 %a4, %a567  %b3 = add i8 %a6, %a768  %c0 = add i8 %b0, %b169  %c1 = add i8 %b2, %b370  %r = add i8 %c0, %c171  ret i8 %r72}73 74define i8 @scalarize_v8i8(ptr %p) {75; CHECK-LABEL: scalarize_v8i8:76; CHECK:       // %bb.0:77; CHECK-NEXT:    ldrb w8, [x0, #7]78; CHECK-NEXT:    ldrb w9, [x0, #6]79; CHECK-NEXT:    ldrb w10, [x0, #5]80; CHECK-NEXT:    ldrb w11, [x0, #1]81; CHECK-NEXT:    ldrb w12, [x0]82; CHECK-NEXT:    ldrb w13, [x0, #4]83; CHECK-NEXT:    add w8, w9, w884; CHECK-NEXT:    ldrb w14, [x0, #3]85; CHECK-NEXT:    ldrb w15, [x0, #2]86; CHECK-NEXT:    add w11, w12, w1187; CHECK-NEXT:    add w10, w13, w1088; CHECK-NEXT:    add w12, w15, w1489; CHECK-NEXT:    add w8, w10, w890; CHECK-NEXT:    add w9, w11, w1291; CHECK-NEXT:    add w0, w9, w892; CHECK-NEXT:    ret93  %wide.load = load <8 x i8>, ptr %p, align 494  %l0 = extractelement <8 x i8> %wide.load, i32 095  %l1 = extractelement <8 x i8> %wide.load, i32 196  %l2 = extractelement <8 x i8> %wide.load, i32 297  %l3 = extractelement <8 x i8> %wide.load, i32 398  %l4 = extractelement <8 x i8> %wide.load, i32 499  %l5 = extractelement <8 x i8> %wide.load, i32 5100  %l6 = extractelement <8 x i8> %wide.load, i32 6101  %l7 = extractelement <8 x i8> %wide.load, i32 7102  %a0 = add i8 %l0, %l1103  %a1 = add i8 %l2, %l3104  %a2 = add i8 %l4, %l5105  %a3 = add i8 %l6, %l7106  %b0 = add i8 %a0, %a1107  %b1 = add i8 %a2, %a3108  %r = add i8 %b0, %b1109  ret i8 %r110}111 112define i16 @scalarize_v8i16(ptr %p) {113; CHECK-LABEL: scalarize_v8i16:114; CHECK:       // %bb.0:115; CHECK-NEXT:    ldrh w8, [x0, #14]116; CHECK-NEXT:    ldrh w9, [x0, #12]117; CHECK-NEXT:    ldrh w10, [x0, #10]118; CHECK-NEXT:    ldrh w11, [x0, #2]119; CHECK-NEXT:    ldrh w12, [x0]120; CHECK-NEXT:    ldrh w13, [x0, #8]121; CHECK-NEXT:    add w8, w9, w8122; CHECK-NEXT:    ldrh w14, [x0, #6]123; CHECK-NEXT:    ldrh w15, [x0, #4]124; CHECK-NEXT:    add w11, w12, w11125; CHECK-NEXT:    add w10, w13, w10126; CHECK-NEXT:    add w12, w15, w14127; CHECK-NEXT:    add w8, w10, w8128; CHECK-NEXT:    add w9, w11, w12129; CHECK-NEXT:    add w0, w9, w8130; CHECK-NEXT:    ret131  %wide.load = load <8 x i16>, ptr %p, align 4132  %l0 = extractelement <8 x i16> %wide.load, i32 0133  %l1 = extractelement <8 x i16> %wide.load, i32 1134  %l2 = extractelement <8 x i16> %wide.load, i32 2135  %l3 = extractelement <8 x i16> %wide.load, i32 3136  %l4 = extractelement <8 x i16> %wide.load, i32 4137  %l5 = extractelement <8 x i16> %wide.load, i32 5138  %l6 = extractelement <8 x i16> %wide.load, i32 6139  %l7 = extractelement <8 x i16> %wide.load, i32 7140  %a0 = add i16 %l0, %l1141  %a1 = add i16 %l2, %l3142  %a2 = add i16 %l4, %l5143  %a3 = add i16 %l6, %l7144  %b0 = add i16 %a0, %a1145  %b1 = add i16 %a2, %a3146  %r = add i16 %b0, %b1147  ret i16 %r148}149 150define i16 @scalarize_v4i16(ptr %p) {151; CHECK-LABEL: scalarize_v4i16:152; CHECK:       // %bb.0:153; CHECK-NEXT:    ldrh w8, [x0, #6]154; CHECK-NEXT:    ldrh w9, [x0, #4]155; CHECK-NEXT:    ldrh w10, [x0, #2]156; CHECK-NEXT:    ldrh w11, [x0]157; CHECK-NEXT:    add w8, w9, w8158; CHECK-NEXT:    add w10, w11, w10159; CHECK-NEXT:    add w0, w10, w8160; CHECK-NEXT:    ret161  %wide.load = load <4 x i16>, ptr %p, align 4162  %l0 = extractelement <4 x i16> %wide.load, i32 0163  %l1 = extractelement <4 x i16> %wide.load, i32 1164  %l2 = extractelement <4 x i16> %wide.load, i32 2165  %l3 = extractelement <4 x i16> %wide.load, i32 3166  %a0 = add i16 %l0, %l1167  %a1 = add i16 %l2, %l3168  %r = add i16 %a0, %a1169  ret i16 %r170}171 172define i32 @scalarize_v4i32(ptr %p) {173; CHECK-LABEL: scalarize_v4i32:174; CHECK:       // %bb.0:175; CHECK-NEXT:    ldp w9, w8, [x0]176; CHECK-NEXT:    ldp w10, w11, [x0, #8]177; CHECK-NEXT:    add w8, w9, w8178; CHECK-NEXT:    add w9, w10, w11179; CHECK-NEXT:    add w0, w8, w9180; CHECK-NEXT:    ret181  %wide.load = load <4 x i32>, ptr %p, align 4182  %l0 = extractelement <4 x i32> %wide.load, i32 0183  %l1 = extractelement <4 x i32> %wide.load, i32 1184  %l2 = extractelement <4 x i32> %wide.load, i32 2185  %l3 = extractelement <4 x i32> %wide.load, i32 3186  %a0 = add i32 %l0, %l1187  %a1 = add i32 %l2, %l3188  %r = add i32 %a0, %a1189  ret i32 %r190}191 192define i64 @scalarize_v4i64(ptr %p) {193; CHECK-LABEL: scalarize_v4i64:194; CHECK:       // %bb.0:195; CHECK-NEXT:    ldp x8, x9, [x0]196; CHECK-NEXT:    ldp x10, x11, [x0, #16]197; CHECK-NEXT:    add x8, x8, x9198; CHECK-NEXT:    add x9, x10, x11199; CHECK-NEXT:    add x0, x8, x9200; CHECK-NEXT:    ret201  %wide.load = load <4 x i64>, ptr %p, align 4202  %l0 = extractelement <4 x i64> %wide.load, i32 0203  %l1 = extractelement <4 x i64> %wide.load, i32 1204  %l2 = extractelement <4 x i64> %wide.load, i32 2205  %l3 = extractelement <4 x i64> %wide.load, i32 3206  %a0 = add i64 %l0, %l1207  %a1 = add i64 %l2, %l3208  %r = add i64 %a0, %a1209  ret i64 %r210}211 212define i64 @scalarize_v4i32_sext(ptr %p) {213; CHECK-LABEL: scalarize_v4i32_sext:214; CHECK:       // %bb.0:215; CHECK-NEXT:    ldpsw x9, x8, [x0, #8]216; CHECK-NEXT:    ldpsw x11, x10, [x0]217; CHECK-NEXT:    add x8, x9, x8218; CHECK-NEXT:    add x10, x11, x10219; CHECK-NEXT:    add x0, x10, x8220; CHECK-NEXT:    ret221  %wide.load = load <4 x i32>, ptr %p, align 4222  %ext = sext <4 x i32> %wide.load to <4 x i64>223  %l0 = extractelement <4 x i64> %ext, i32 0224  %l1 = extractelement <4 x i64> %ext, i32 1225  %l2 = extractelement <4 x i64> %ext, i32 2226  %l3 = extractelement <4 x i64> %ext, i32 3227  %a0 = add i64 %l0, %l1228  %a1 = add i64 %l2, %l3229  %r = add i64 %a0, %a1230  ret i64 %r231}232 233define i64 @scalarize_v4i32_zext(ptr %p) {234; CHECK-LABEL: scalarize_v4i32_zext:235; CHECK:       // %bb.0:236; CHECK-NEXT:    ldp w9, w8, [x0, #8]237; CHECK-NEXT:    ldp w11, w10, [x0]238; CHECK-NEXT:    add x8, x9, x8239; CHECK-NEXT:    add x10, x11, x10240; CHECK-NEXT:    add x0, x10, x8241; CHECK-NEXT:    ret242  %wide.load = load <4 x i32>, ptr %p, align 4243  %ext = zext <4 x i32> %wide.load to <4 x i64>244  %l0 = extractelement <4 x i64> %ext, i32 0245  %l1 = extractelement <4 x i64> %ext, i32 1246  %l2 = extractelement <4 x i64> %ext, i32 2247  %l3 = extractelement <4 x i64> %ext, i32 3248  %a0 = add i64 %l0, %l1249  %a1 = add i64 %l2, %l3250  %r = add i64 %a0, %a1251  ret i64 %r252}253 254define half @scalarize_v4f16(ptr %p) {255; CHECK-LABEL: scalarize_v4f16:256; CHECK:       // %bb.0:257; CHECK-NEXT:    ldr d0, [x0]258; CHECK-NEXT:    mov h1, v0.h[1]259; CHECK-NEXT:    mov h2, v0.h[2]260; CHECK-NEXT:    mov h3, v0.h[3]261; CHECK-NEXT:    fcvt s0, h0262; CHECK-NEXT:    fcvt s1, h1263; CHECK-NEXT:    fcvt s3, h3264; CHECK-NEXT:    fcvt s2, h2265; CHECK-NEXT:    fadd s0, s0, s1266; CHECK-NEXT:    fadd s1, s2, s3267; CHECK-NEXT:    fcvt h0, s0268; CHECK-NEXT:    fcvt h1, s1269; CHECK-NEXT:    fcvt s1, h1270; CHECK-NEXT:    fcvt s0, h0271; CHECK-NEXT:    fadd s0, s0, s1272; CHECK-NEXT:    fcvt h0, s0273; CHECK-NEXT:    ret274  %wide.load = load <4 x half>, ptr %p, align 4275  %l0 = extractelement <4 x half> %wide.load, i32 0276  %l1 = extractelement <4 x half> %wide.load, i32 1277  %l2 = extractelement <4 x half> %wide.load, i32 2278  %l3 = extractelement <4 x half> %wide.load, i32 3279  %a0 = fadd half %l0, %l1280  %a1 = fadd half %l2, %l3281  %r = fadd half %a0, %a1282  ret half %r283}284 285define float @scalarize_v4f32(ptr %p) {286; CHECK-LABEL: scalarize_v4f32:287; CHECK:       // %bb.0:288; CHECK-NEXT:    ldr q0, [x0]289; CHECK-NEXT:    mov s1, v0.s[2]290; CHECK-NEXT:    mov s2, v0.s[3]291; CHECK-NEXT:    faddp s0, v0.2s292; CHECK-NEXT:    fadd s1, s1, s2293; CHECK-NEXT:    fadd s0, s0, s1294; CHECK-NEXT:    ret295  %wide.load = load <4 x float>, ptr %p, align 4296  %l0 = extractelement <4 x float> %wide.load, i32 0297  %l1 = extractelement <4 x float> %wide.load, i32 1298  %l2 = extractelement <4 x float> %wide.load, i32 2299  %l3 = extractelement <4 x float> %wide.load, i32 3300  %a0 = fadd float %l0, %l1301  %a1 = fadd float %l2, %l3302  %r = fadd float %a0, %a1303  ret float %r304}305 306define double @scalarize_v4f64(ptr %p) {307; CHECK-LABEL: scalarize_v4f64:308; CHECK:       // %bb.0:309; CHECK-NEXT:    ldp q1, q0, [x0]310; CHECK-NEXT:    faddp d1, v1.2d311; CHECK-NEXT:    faddp d0, v0.2d312; CHECK-NEXT:    fadd d0, d1, d0313; CHECK-NEXT:    ret314  %wide.load = load <4 x double>, ptr %p, align 4315  %l0 = extractelement <4 x double> %wide.load, i32 0316  %l1 = extractelement <4 x double> %wide.load, i32 1317  %l2 = extractelement <4 x double> %wide.load, i32 2318  %l3 = extractelement <4 x double> %wide.load, i32 3319  %a0 = fadd double %l0, %l1320  %a1 = fadd double %l2, %l3321  %r = fadd double %a0, %a1322  ret double %r323}324 325 326define float @scalarize_into_load(i64 %22, ptr %23, ptr %rawA, ptr %rawB) {327; CHECK-LABEL: scalarize_into_load:328; CHECK:       // %bb.0: // %entry329; CHECK-NEXT:    ldp x8, x9, [x1]330; CHECK-NEXT:    ldp x10, x11, [x1, #16]331; CHECK-NEXT:    ldp x12, x13, [x1, #64]332; CHECK-NEXT:    ldr s0, [x2, x8, lsl #2]333; CHECK-NEXT:    ldr s1, [x2, x9, lsl #2]334; CHECK-NEXT:    ldp x8, x9, [x1, #32]335; CHECK-NEXT:    ldr s2, [x2, x10, lsl #2]336; CHECK-NEXT:    ldr s3, [x2, x11, lsl #2]337; CHECK-NEXT:    fadd s0, s0, s1338; CHECK-NEXT:    ldr s6, [x2, x12, lsl #2]339; CHECK-NEXT:    ldp x10, x11, [x1, #48]340; CHECK-NEXT:    ldr s7, [x2, x13, lsl #2]341; CHECK-NEXT:    fadd s1, s2, s3342; CHECK-NEXT:    ldr s2, [x2, x8, lsl #2]343; CHECK-NEXT:    ldr s3, [x2, x9, lsl #2]344; CHECK-NEXT:    ldp x14, x15, [x1, #80]345; CHECK-NEXT:    fadd s2, s2, s3346; CHECK-NEXT:    ldr s4, [x2, x10, lsl #2]347; CHECK-NEXT:    ldr s5, [x2, x11, lsl #2]348; CHECK-NEXT:    ldp x16, x17, [x1, #96]349; CHECK-NEXT:    fadd s3, s4, s5350; CHECK-NEXT:    fadd s4, s6, s7351; CHECK-NEXT:    fadd s0, s0, s1352; CHECK-NEXT:    ldp x18, x0, [x1, #112]353; CHECK-NEXT:    ldr s16, [x2, x14, lsl #2]354; CHECK-NEXT:    ldr s17, [x2, x15, lsl #2]355; CHECK-NEXT:    ldr s18, [x2, x16, lsl #2]356; CHECK-NEXT:    ldr s19, [x2, x17, lsl #2]357; CHECK-NEXT:    ldr s20, [x2, x18, lsl #2]358; CHECK-NEXT:    ldr s21, [x2, x0, lsl #2]359; CHECK-NEXT:    fadd s5, s16, s17360; CHECK-NEXT:    fadd s6, s18, s19361; CHECK-NEXT:    fadd s1, s2, s3362; CHECK-NEXT:    fadd s7, s20, s21363; CHECK-NEXT:    fadd s2, s4, s5364; CHECK-NEXT:    fadd s0, s0, s1365; CHECK-NEXT:    fadd s3, s6, s7366; CHECK-NEXT:    fadd s1, s2, s3367; CHECK-NEXT:    fadd s0, s0, s1368; CHECK-NEXT:    ret369entry:370  %wide.load = load <16 x i64>, ptr %23, align 4371  %25 = extractelement <16 x i64> %wide.load, i32 0372  %26 = getelementptr inbounds float, ptr %rawA, i64 %25373  %27 = extractelement <16 x i64> %wide.load, i32 1374  %28 = getelementptr inbounds float, ptr %rawA, i64 %27375  %29 = extractelement <16 x i64> %wide.load, i32 2376  %30 = getelementptr inbounds float, ptr %rawA, i64 %29377  %31 = extractelement <16 x i64> %wide.load, i32 3378  %32 = getelementptr inbounds float, ptr %rawA, i64 %31379  %33 = extractelement <16 x i64> %wide.load, i32 4380  %34 = getelementptr inbounds float, ptr %rawA, i64 %33381  %35 = extractelement <16 x i64> %wide.load, i32 5382  %36 = getelementptr inbounds float, ptr %rawA, i64 %35383  %37 = extractelement <16 x i64> %wide.load, i32 6384  %38 = getelementptr inbounds float, ptr %rawA, i64 %37385  %39 = extractelement <16 x i64> %wide.load, i32 7386  %40 = getelementptr inbounds float, ptr %rawA, i64 %39387  %41 = extractelement <16 x i64> %wide.load, i32 8388  %42 = getelementptr inbounds float, ptr %rawA, i64 %41389  %43 = extractelement <16 x i64> %wide.load, i32 9390  %44 = getelementptr inbounds float, ptr %rawA, i64 %43391  %45 = extractelement <16 x i64> %wide.load, i32 10392  %46 = getelementptr inbounds float, ptr %rawA, i64 %45393  %47 = extractelement <16 x i64> %wide.load, i32 11394  %48 = getelementptr inbounds float, ptr %rawA, i64 %47395  %49 = extractelement <16 x i64> %wide.load, i32 12396  %50 = getelementptr inbounds float, ptr %rawA, i64 %49397  %51 = extractelement <16 x i64> %wide.load, i32 13398  %52 = getelementptr inbounds float, ptr %rawA, i64 %51399  %53 = extractelement <16 x i64> %wide.load, i32 14400  %54 = getelementptr inbounds float, ptr %rawA, i64 %53401  %55 = extractelement <16 x i64> %wide.load, i32 15402  %56 = getelementptr inbounds float, ptr %rawA, i64 %55403  %59 = load float, ptr %26, align 4404  %60 = load float, ptr %28, align 4405  %61 = load float, ptr %30, align 4406  %62 = load float, ptr %32, align 4407  %63 = load float, ptr %34, align 4408  %64 = load float, ptr %36, align 4409  %65 = load float, ptr %38, align 4410  %66 = load float, ptr %40, align 4411  %67 = load float, ptr %42, align 4412  %68 = load float, ptr %44, align 4413  %69 = load float, ptr %46, align 4414  %70 = load float, ptr %48, align 4415  %71 = load float, ptr %50, align 4416  %72 = load float, ptr %52, align 4417  %73 = load float, ptr %54, align 4418  %74 = load float, ptr %56, align 4419  %a1 = fadd float %59, %60420  %a2 = fadd float %61, %62421  %a3 = fadd float %63, %64422  %a4 = fadd float %65, %66423  %a5 = fadd float %67, %68424  %a6 = fadd float %69, %70425  %a7 = fadd float %71, %72426  %a8 = fadd float %73, %74427  %a9 = fadd float %a1, %a2428  %a10 = fadd float %a3, %a4429  %a11 = fadd float %a5, %a6430  %a12 = fadd float %a7, %a8431  %a13 = fadd float %a9, %a10432  %a14 = fadd float %a11, %a12433  %a15 = fadd float %a13, %a14434  ret float %a15435}436 437define float @scalarize_into_load_sext(i64 %22, ptr %23, ptr %rawA, ptr %rawB) {438; CHECK-LABEL: scalarize_into_load_sext:439; CHECK:       // %bb.0: // %entry440; CHECK-NEXT:    ldpsw x9, x8, [x1]441; CHECK-NEXT:    ldpsw x11, x10, [x1, #8]442; CHECK-NEXT:    ldpsw x13, x12, [x1, #24]443; CHECK-NEXT:    ldr s0, [x2, x9, lsl #2]444; CHECK-NEXT:    ldr s1, [x2, x8, lsl #2]445; CHECK-NEXT:    ldpsw x9, x8, [x1, #56]446; CHECK-NEXT:    ldr s2, [x2, x11, lsl #2]447; CHECK-NEXT:    ldr s3, [x2, x10, lsl #2]448; CHECK-NEXT:    fadd s0, s0, s1449; CHECK-NEXT:    ldpsw x11, x10, [x1, #48]450; CHECK-NEXT:    ldpsw x15, x14, [x1, #16]451; CHECK-NEXT:    ldpsw x17, x16, [x1, #40]452; CHECK-NEXT:    ldpsw x0, x18, [x1, #32]453; CHECK-NEXT:    fadd s1, s2, s3454; CHECK-NEXT:    ldr s2, [x2, x15, lsl #2]455; CHECK-NEXT:    ldr s3, [x2, x14, lsl #2]456; CHECK-NEXT:    ldr s4, [x2, x13, lsl #2]457; CHECK-NEXT:    ldr s5, [x2, x12, lsl #2]458; CHECK-NEXT:    ldr s16, [x2, x17, lsl #2]459; CHECK-NEXT:    ldr s6, [x2, x0, lsl #2]460; CHECK-NEXT:    fadd s2, s2, s3461; CHECK-NEXT:    ldr s7, [x2, x18, lsl #2]462; CHECK-NEXT:    ldr s17, [x2, x16, lsl #2]463; CHECK-NEXT:    fadd s3, s4, s5464; CHECK-NEXT:    ldr s18, [x2, x11, lsl #2]465; CHECK-NEXT:    ldr s19, [x2, x10, lsl #2]466; CHECK-NEXT:    fadd s4, s6, s7467; CHECK-NEXT:    fadd s0, s0, s1468; CHECK-NEXT:    ldr s20, [x2, x9, lsl #2]469; CHECK-NEXT:    ldr s21, [x2, x8, lsl #2]470; CHECK-NEXT:    fadd s5, s16, s17471; CHECK-NEXT:    fadd s6, s18, s19472; CHECK-NEXT:    fadd s7, s20, s21473; CHECK-NEXT:    fadd s1, s2, s3474; CHECK-NEXT:    fadd s2, s4, s5475; CHECK-NEXT:    fadd s3, s6, s7476; CHECK-NEXT:    fadd s0, s0, s1477; CHECK-NEXT:    fadd s1, s2, s3478; CHECK-NEXT:    fadd s0, s0, s1479; CHECK-NEXT:    ret480entry:481  %wide.load = load <16 x i32>, ptr %23, align 4482  %24 = sext <16 x i32> %wide.load to <16 x i64>483  %25 = extractelement <16 x i64> %24, i32 0484  %26 = getelementptr inbounds float, ptr %rawA, i64 %25485  %27 = extractelement <16 x i64> %24, i32 1486  %28 = getelementptr inbounds float, ptr %rawA, i64 %27487  %29 = extractelement <16 x i64> %24, i32 2488  %30 = getelementptr inbounds float, ptr %rawA, i64 %29489  %31 = extractelement <16 x i64> %24, i32 3490  %32 = getelementptr inbounds float, ptr %rawA, i64 %31491  %33 = extractelement <16 x i64> %24, i32 4492  %34 = getelementptr inbounds float, ptr %rawA, i64 %33493  %35 = extractelement <16 x i64> %24, i32 5494  %36 = getelementptr inbounds float, ptr %rawA, i64 %35495  %37 = extractelement <16 x i64> %24, i32 6496  %38 = getelementptr inbounds float, ptr %rawA, i64 %37497  %39 = extractelement <16 x i64> %24, i32 7498  %40 = getelementptr inbounds float, ptr %rawA, i64 %39499  %41 = extractelement <16 x i64> %24, i32 8500  %42 = getelementptr inbounds float, ptr %rawA, i64 %41501  %43 = extractelement <16 x i64> %24, i32 9502  %44 = getelementptr inbounds float, ptr %rawA, i64 %43503  %45 = extractelement <16 x i64> %24, i32 10504  %46 = getelementptr inbounds float, ptr %rawA, i64 %45505  %47 = extractelement <16 x i64> %24, i32 11506  %48 = getelementptr inbounds float, ptr %rawA, i64 %47507  %49 = extractelement <16 x i64> %24, i32 12508  %50 = getelementptr inbounds float, ptr %rawA, i64 %49509  %51 = extractelement <16 x i64> %24, i32 13510  %52 = getelementptr inbounds float, ptr %rawA, i64 %51511  %53 = extractelement <16 x i64> %24, i32 14512  %54 = getelementptr inbounds float, ptr %rawA, i64 %53513  %55 = extractelement <16 x i64> %24, i32 15514  %56 = getelementptr inbounds float, ptr %rawA, i64 %55515  %59 = load float, ptr %26, align 4516  %60 = load float, ptr %28, align 4517  %61 = load float, ptr %30, align 4518  %62 = load float, ptr %32, align 4519  %63 = load float, ptr %34, align 4520  %64 = load float, ptr %36, align 4521  %65 = load float, ptr %38, align 4522  %66 = load float, ptr %40, align 4523  %67 = load float, ptr %42, align 4524  %68 = load float, ptr %44, align 4525  %69 = load float, ptr %46, align 4526  %70 = load float, ptr %48, align 4527  %71 = load float, ptr %50, align 4528  %72 = load float, ptr %52, align 4529  %73 = load float, ptr %54, align 4530  %74 = load float, ptr %56, align 4531  %a1 = fadd float %59, %60532  %a2 = fadd float %61, %62533  %a3 = fadd float %63, %64534  %a4 = fadd float %65, %66535  %a5 = fadd float %67, %68536  %a6 = fadd float %69, %70537  %a7 = fadd float %71, %72538  %a8 = fadd float %73, %74539  %a9 = fadd float %a1, %a2540  %a10 = fadd float %a3, %a4541  %a11 = fadd float %a5, %a6542  %a12 = fadd float %a7, %a8543  %a13 = fadd float %a9, %a10544  %a14 = fadd float %a11, %a12545  %a15 = fadd float %a13, %a14546  ret float %a15547}548 549define float @scalarize_into_load_zext(i64 %22, ptr %23, ptr %rawA, ptr %rawB) {550; CHECK-LABEL: scalarize_into_load_zext:551; CHECK:       // %bb.0: // %entry552; CHECK-NEXT:    ldp w9, w8, [x1]553; CHECK-NEXT:    ldp w11, w10, [x1, #8]554; CHECK-NEXT:    ldp w13, w12, [x1, #24]555; CHECK-NEXT:    ldr s0, [x2, x9, lsl #2]556; CHECK-NEXT:    ldr s1, [x2, x8, lsl #2]557; CHECK-NEXT:    ldp w9, w8, [x1, #56]558; CHECK-NEXT:    ldr s2, [x2, x11, lsl #2]559; CHECK-NEXT:    ldr s3, [x2, x10, lsl #2]560; CHECK-NEXT:    fadd s0, s0, s1561; CHECK-NEXT:    ldp w11, w10, [x1, #48]562; CHECK-NEXT:    ldp w15, w14, [x1, #16]563; CHECK-NEXT:    ldp w17, w16, [x1, #40]564; CHECK-NEXT:    ldp w0, w18, [x1, #32]565; CHECK-NEXT:    fadd s1, s2, s3566; CHECK-NEXT:    ldr s2, [x2, x15, lsl #2]567; CHECK-NEXT:    ldr s3, [x2, x14, lsl #2]568; CHECK-NEXT:    ldr s4, [x2, x13, lsl #2]569; CHECK-NEXT:    ldr s5, [x2, x12, lsl #2]570; CHECK-NEXT:    ldr s16, [x2, x17, lsl #2]571; CHECK-NEXT:    ldr s6, [x2, x0, lsl #2]572; CHECK-NEXT:    fadd s2, s2, s3573; CHECK-NEXT:    ldr s7, [x2, x18, lsl #2]574; CHECK-NEXT:    ldr s17, [x2, x16, lsl #2]575; CHECK-NEXT:    fadd s3, s4, s5576; CHECK-NEXT:    ldr s18, [x2, x11, lsl #2]577; CHECK-NEXT:    ldr s19, [x2, x10, lsl #2]578; CHECK-NEXT:    fadd s4, s6, s7579; CHECK-NEXT:    fadd s0, s0, s1580; CHECK-NEXT:    ldr s20, [x2, x9, lsl #2]581; CHECK-NEXT:    ldr s21, [x2, x8, lsl #2]582; CHECK-NEXT:    fadd s5, s16, s17583; CHECK-NEXT:    fadd s6, s18, s19584; CHECK-NEXT:    fadd s7, s20, s21585; CHECK-NEXT:    fadd s1, s2, s3586; CHECK-NEXT:    fadd s2, s4, s5587; CHECK-NEXT:    fadd s3, s6, s7588; CHECK-NEXT:    fadd s0, s0, s1589; CHECK-NEXT:    fadd s1, s2, s3590; CHECK-NEXT:    fadd s0, s0, s1591; CHECK-NEXT:    ret592entry:593  %wide.load = load <16 x i32>, ptr %23, align 4594  %24 = zext <16 x i32> %wide.load to <16 x i64>595  %25 = extractelement <16 x i64> %24, i32 0596  %26 = getelementptr inbounds float, ptr %rawA, i64 %25597  %27 = extractelement <16 x i64> %24, i32 1598  %28 = getelementptr inbounds float, ptr %rawA, i64 %27599  %29 = extractelement <16 x i64> %24, i32 2600  %30 = getelementptr inbounds float, ptr %rawA, i64 %29601  %31 = extractelement <16 x i64> %24, i32 3602  %32 = getelementptr inbounds float, ptr %rawA, i64 %31603  %33 = extractelement <16 x i64> %24, i32 4604  %34 = getelementptr inbounds float, ptr %rawA, i64 %33605  %35 = extractelement <16 x i64> %24, i32 5606  %36 = getelementptr inbounds float, ptr %rawA, i64 %35607  %37 = extractelement <16 x i64> %24, i32 6608  %38 = getelementptr inbounds float, ptr %rawA, i64 %37609  %39 = extractelement <16 x i64> %24, i32 7610  %40 = getelementptr inbounds float, ptr %rawA, i64 %39611  %41 = extractelement <16 x i64> %24, i32 8612  %42 = getelementptr inbounds float, ptr %rawA, i64 %41613  %43 = extractelement <16 x i64> %24, i32 9614  %44 = getelementptr inbounds float, ptr %rawA, i64 %43615  %45 = extractelement <16 x i64> %24, i32 10616  %46 = getelementptr inbounds float, ptr %rawA, i64 %45617  %47 = extractelement <16 x i64> %24, i32 11618  %48 = getelementptr inbounds float, ptr %rawA, i64 %47619  %49 = extractelement <16 x i64> %24, i32 12620  %50 = getelementptr inbounds float, ptr %rawA, i64 %49621  %51 = extractelement <16 x i64> %24, i32 13622  %52 = getelementptr inbounds float, ptr %rawA, i64 %51623  %53 = extractelement <16 x i64> %24, i32 14624  %54 = getelementptr inbounds float, ptr %rawA, i64 %53625  %55 = extractelement <16 x i64> %24, i32 15626  %56 = getelementptr inbounds float, ptr %rawA, i64 %55627  %59 = load float, ptr %26, align 4628  %60 = load float, ptr %28, align 4629  %61 = load float, ptr %30, align 4630  %62 = load float, ptr %32, align 4631  %63 = load float, ptr %34, align 4632  %64 = load float, ptr %36, align 4633  %65 = load float, ptr %38, align 4634  %66 = load float, ptr %40, align 4635  %67 = load float, ptr %42, align 4636  %68 = load float, ptr %44, align 4637  %69 = load float, ptr %46, align 4638  %70 = load float, ptr %48, align 4639  %71 = load float, ptr %50, align 4640  %72 = load float, ptr %52, align 4641  %73 = load float, ptr %54, align 4642  %74 = load float, ptr %56, align 4643  %a1 = fadd float %59, %60644  %a2 = fadd float %61, %62645  %a3 = fadd float %63, %64646  %a4 = fadd float %65, %66647  %a5 = fadd float %67, %68648  %a6 = fadd float %69, %70649  %a7 = fadd float %71, %72650  %a8 = fadd float %73, %74651  %a9 = fadd float %a1, %a2652  %a10 = fadd float %a3, %a4653  %a11 = fadd float %a5, %a6654  %a12 = fadd float %a7, %a8655  %a13 = fadd float %a9, %a10656  %a14 = fadd float %a11, %a12657  %a15 = fadd float %a13, %a14658  ret float %a15659}660 661 662