brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · 7363c30 Raw
152 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mattr=+sve < %s | FileCheck %s3; RUN: llc -mattr=+dotprod,+sve < %s | FileCheck %s -check-prefix=DOT4; RUN: llc -mattr=+dotprod,+sve -force-streaming-compatible < %s | FileCheck %s --check-prefix=STREAMING-SVE5; RUN: llc -mattr=+dotprod,+sme -force-streaming < %s | FileCheck %s --check-prefix=STREAMING-SVE6 7target triple = "aarch64-unknown-linux-gnu"8 9define i32 @reduce_uaddv_v16i8(<32 x i8> %a) {10; CHECK-LABEL: reduce_uaddv_v16i8:11; CHECK:       // %bb.0:12; CHECK-NEXT:    ushll2 v2.8h, v1.16b, #013; CHECK-NEXT:    ushll2 v3.8h, v0.16b, #014; CHECK-NEXT:    ushll v1.8h, v1.8b, #015; CHECK-NEXT:    ushll v0.8h, v0.8b, #016; CHECK-NEXT:    uaddl2 v4.4s, v3.8h, v2.8h17; CHECK-NEXT:    uaddl v2.4s, v3.4h, v2.4h18; CHECK-NEXT:    uaddl2 v5.4s, v0.8h, v1.8h19; CHECK-NEXT:    uaddl v0.4s, v0.4h, v1.4h20; CHECK-NEXT:    add v1.4s, v5.4s, v4.4s21; CHECK-NEXT:    add v0.4s, v0.4s, v2.4s22; CHECK-NEXT:    add v0.4s, v0.4s, v1.4s23; CHECK-NEXT:    addv s0, v0.4s24; CHECK-NEXT:    fmov w0, s025; CHECK-NEXT:    ret26;27; DOT-LABEL: reduce_uaddv_v16i8:28; DOT:       // %bb.0:29; DOT-NEXT:    movi v2.16b, #130; DOT-NEXT:    movi v3.2d, #000000000000000031; DOT-NEXT:    udot v3.4s, v1.16b, v2.16b32; DOT-NEXT:    udot v3.4s, v0.16b, v2.16b33; DOT-NEXT:    addv s0, v3.4s34; DOT-NEXT:    fmov w0, s035; DOT-NEXT:    ret36;37; STREAMING-SVE-LABEL: reduce_uaddv_v16i8:38; STREAMING-SVE:       // %bb.0:39; STREAMING-SVE-NEXT:    // kill: def $q1 killed $q1 def $z140; STREAMING-SVE-NEXT:    // kill: def $q0 killed $q0 def $z041; STREAMING-SVE-NEXT:    movprfx z2, z142; STREAMING-SVE-NEXT:    ext z2.b, z2.b, z1.b, #843; STREAMING-SVE-NEXT:    movprfx z3, z044; STREAMING-SVE-NEXT:    ext z3.b, z3.b, z0.b, #845; STREAMING-SVE-NEXT:    ptrue p0.s, vl446; STREAMING-SVE-NEXT:    uunpklo z1.h, z1.b47; STREAMING-SVE-NEXT:    uunpklo z0.h, z0.b48; STREAMING-SVE-NEXT:    uunpklo z2.h, z2.b49; STREAMING-SVE-NEXT:    uunpklo z3.h, z3.b50; STREAMING-SVE-NEXT:    movprfx z4, z151; STREAMING-SVE-NEXT:    ext z4.b, z4.b, z1.b, #852; STREAMING-SVE-NEXT:    movprfx z7, z053; STREAMING-SVE-NEXT:    ext z7.b, z7.b, z0.b, #854; STREAMING-SVE-NEXT:    uunpklo z1.s, z1.h55; STREAMING-SVE-NEXT:    uunpklo z0.s, z0.h56; STREAMING-SVE-NEXT:    movprfx z5, z257; STREAMING-SVE-NEXT:    ext z5.b, z5.b, z2.b, #858; STREAMING-SVE-NEXT:    movprfx z6, z359; STREAMING-SVE-NEXT:    ext z6.b, z6.b, z3.b, #860; STREAMING-SVE-NEXT:    uunpklo z2.s, z2.h61; STREAMING-SVE-NEXT:    uunpklo z4.s, z4.h62; STREAMING-SVE-NEXT:    uunpklo z7.s, z7.h63; STREAMING-SVE-NEXT:    uunpklo z3.s, z3.h64; STREAMING-SVE-NEXT:    uunpklo z5.s, z5.h65; STREAMING-SVE-NEXT:    uunpklo z6.s, z6.h66; STREAMING-SVE-NEXT:    add z0.s, z0.s, z1.s67; STREAMING-SVE-NEXT:    add z1.s, z3.s, z2.s68; STREAMING-SVE-NEXT:    add z2.s, z7.s, z4.s69; STREAMING-SVE-NEXT:    add z3.s, z6.s, z5.s70; STREAMING-SVE-NEXT:    add z0.s, z0.s, z1.s71; STREAMING-SVE-NEXT:    add z1.s, z2.s, z3.s72; STREAMING-SVE-NEXT:    add z0.s, z0.s, z1.s73; STREAMING-SVE-NEXT:    uaddv d0, p0, z0.s74; STREAMING-SVE-NEXT:    fmov w0, s075; STREAMING-SVE-NEXT:    ret76  %1 = zext <32 x i8> %a to <32 x i32>77  %2 = call i32 @llvm.vector.reduce.add.v32i32(<32 x i32> %1)78  ret i32 %279}80 81define i32 @reduce_saddv_v16i8(<32 x i8> %a) {82; CHECK-LABEL: reduce_saddv_v16i8:83; CHECK:       // %bb.0:84; CHECK-NEXT:    sshll2 v2.8h, v1.16b, #085; CHECK-NEXT:    sshll2 v3.8h, v0.16b, #086; CHECK-NEXT:    sshll v1.8h, v1.8b, #087; CHECK-NEXT:    sshll v0.8h, v0.8b, #088; CHECK-NEXT:    saddl2 v4.4s, v3.8h, v2.8h89; CHECK-NEXT:    saddl v2.4s, v3.4h, v2.4h90; CHECK-NEXT:    saddl2 v5.4s, v0.8h, v1.8h91; CHECK-NEXT:    saddl v0.4s, v0.4h, v1.4h92; CHECK-NEXT:    add v1.4s, v5.4s, v4.4s93; CHECK-NEXT:    add v0.4s, v0.4s, v2.4s94; CHECK-NEXT:    add v0.4s, v0.4s, v1.4s95; CHECK-NEXT:    addv s0, v0.4s96; CHECK-NEXT:    fmov w0, s097; CHECK-NEXT:    ret98;99; DOT-LABEL: reduce_saddv_v16i8:100; DOT:       // %bb.0:101; DOT-NEXT:    movi v2.16b, #1102; DOT-NEXT:    movi v3.2d, #0000000000000000103; DOT-NEXT:    sdot v3.4s, v1.16b, v2.16b104; DOT-NEXT:    sdot v3.4s, v0.16b, v2.16b105; DOT-NEXT:    addv s0, v3.4s106; DOT-NEXT:    fmov w0, s0107; DOT-NEXT:    ret108;109; STREAMING-SVE-LABEL: reduce_saddv_v16i8:110; STREAMING-SVE:       // %bb.0:111; STREAMING-SVE-NEXT:    // kill: def $q1 killed $q1 def $z1112; STREAMING-SVE-NEXT:    // kill: def $q0 killed $q0 def $z0113; STREAMING-SVE-NEXT:    movprfx z2, z1114; STREAMING-SVE-NEXT:    ext z2.b, z2.b, z1.b, #8115; STREAMING-SVE-NEXT:    movprfx z3, z0116; STREAMING-SVE-NEXT:    ext z3.b, z3.b, z0.b, #8117; STREAMING-SVE-NEXT:    ptrue p0.s, vl4118; STREAMING-SVE-NEXT:    sunpklo z1.h, z1.b119; STREAMING-SVE-NEXT:    sunpklo z0.h, z0.b120; STREAMING-SVE-NEXT:    sunpklo z2.h, z2.b121; STREAMING-SVE-NEXT:    sunpklo z3.h, z3.b122; STREAMING-SVE-NEXT:    movprfx z4, z1123; STREAMING-SVE-NEXT:    ext z4.b, z4.b, z1.b, #8124; STREAMING-SVE-NEXT:    movprfx z7, z0125; STREAMING-SVE-NEXT:    ext z7.b, z7.b, z0.b, #8126; STREAMING-SVE-NEXT:    sunpklo z1.s, z1.h127; STREAMING-SVE-NEXT:    sunpklo z0.s, z0.h128; STREAMING-SVE-NEXT:    movprfx z5, z2129; STREAMING-SVE-NEXT:    ext z5.b, z5.b, z2.b, #8130; STREAMING-SVE-NEXT:    movprfx z6, z3131; STREAMING-SVE-NEXT:    ext z6.b, z6.b, z3.b, #8132; STREAMING-SVE-NEXT:    sunpklo z2.s, z2.h133; STREAMING-SVE-NEXT:    sunpklo z4.s, z4.h134; STREAMING-SVE-NEXT:    sunpklo z7.s, z7.h135; STREAMING-SVE-NEXT:    sunpklo z3.s, z3.h136; STREAMING-SVE-NEXT:    sunpklo z5.s, z5.h137; STREAMING-SVE-NEXT:    sunpklo z6.s, z6.h138; STREAMING-SVE-NEXT:    add z0.s, z0.s, z1.s139; STREAMING-SVE-NEXT:    add z1.s, z3.s, z2.s140; STREAMING-SVE-NEXT:    add z2.s, z7.s, z4.s141; STREAMING-SVE-NEXT:    add z3.s, z6.s, z5.s142; STREAMING-SVE-NEXT:    add z0.s, z0.s, z1.s143; STREAMING-SVE-NEXT:    add z1.s, z2.s, z3.s144; STREAMING-SVE-NEXT:    add z0.s, z0.s, z1.s145; STREAMING-SVE-NEXT:    uaddv d0, p0, z0.s146; STREAMING-SVE-NEXT:    fmov w0, s0147; STREAMING-SVE-NEXT:    ret148  %1 = sext <32 x i8> %a to <32 x i32>149  %2 = call i32 @llvm.vector.reduce.add.v32i32(<32 x i32> %1)150  ret i32 %2151}152