brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.3 KiB · 24cdd0a Raw
160 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; RUN: llc < %s | FileCheck %s3 4target triple = "aarch64"5 6define <4 x i32> @predicate_dot_fixed_length(<4 x i32> %acc, <16 x i1> %p, <16 x i8> %a, <16 x i8> %b) #0 {7; CHECK-LABEL: predicate_dot_fixed_length:8; CHECK:       // %bb.0:9; CHECK-NEXT:    shl v1.16b, v1.16b, #710; CHECK-NEXT:    cmlt v1.16b, v1.16b, #011; CHECK-NEXT:    and v1.16b, v1.16b, v3.16b12; CHECK-NEXT:    sdot v0.4s, v2.16b, v1.16b13; CHECK-NEXT:    ret14 %ext.1 = sext <16 x i8> %a to <16 x i32>15 %ext.2 = sext <16 x i8> %b to <16 x i32>16 %mul = mul nsw <16 x i32> %ext.1, %ext.217 %sel = select <16 x i1> %p, <16 x i32> %mul, <16 x i32> zeroinitializer18 %red = call <4 x i32> @llvm.vector.partial.reduce.add(<4 x i32> %acc, <16 x i32> %sel)19 ret <4 x i32> %red20}21 22define <4 x i32> @predicate_dot_by_C_fixed_length(<4 x i32> %acc, <16 x i1> %p, <16 x i8> %a) #0 {23; CHECK-LABEL: predicate_dot_by_C_fixed_length:24; CHECK:       // %bb.0:25; CHECK-NEXT:    shl v1.16b, v1.16b, #726; CHECK-NEXT:    movi v3.16b, #12727; CHECK-NEXT:    cmlt v1.16b, v1.16b, #028; CHECK-NEXT:    and v1.16b, v1.16b, v3.16b29; CHECK-NEXT:    sdot v0.4s, v2.16b, v1.16b30; CHECK-NEXT:    ret31 %ext.1 = sext <16 x i8> %a to <16 x i32>32 %mul = mul nsw <16 x i32> %ext.1, splat(i32 127)33 %sel = select <16 x i1> %p, <16 x i32> %mul, <16 x i32> zeroinitializer34 %red = call <4 x i32> @llvm.vector.partial.reduce.add(<4 x i32> %acc, <16 x i32> %sel)35 ret <4 x i32> %red36}37 38define <vscale x 4 x i32> @predicate_dot_scalable(<vscale x 4 x i32> %acc, <vscale x 16 x i1> %p, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) #0 {39; CHECK-LABEL: predicate_dot_scalable:40; CHECK:       // %bb.0:41; CHECK-NEXT:    movi v3.2d, #000000000000000042; CHECK-NEXT:    sel z2.b, p0, z2.b, z3.b43; CHECK-NEXT:    sdot z0.s, z1.b, z2.b44; CHECK-NEXT:    ret45 %ext.1 = sext <vscale x 16 x i8> %a to <vscale x 16 x i32>46 %ext.2 = sext <vscale x 16 x i8> %b to <vscale x 16 x i32>47 %mul = mul nsw <vscale x 16 x i32> %ext.1, %ext.248 %sel = select <vscale x 16 x i1> %p, <vscale x 16 x i32> %mul, <vscale x 16 x i32> zeroinitializer49 %red = call <vscale x 4 x i32> @llvm.vector.partial.reduce.add(<vscale x 4 x i32> %acc, <vscale x 16 x i32> %sel)50 ret <vscale x 4 x i32> %red51}52 53define <vscale x 4 x i32> @predicate_dot_by_C_scalable(<vscale x 4 x i32> %acc, <vscale x 16 x i1> %p, <vscale x 16 x i8> %a) #0 {54; CHECK-LABEL: predicate_dot_by_C_scalable:55; CHECK:       // %bb.0:56; CHECK-NEXT:    mov z2.b, p0/z, #127 // =0x7f57; CHECK-NEXT:    sdot z0.s, z1.b, z2.b58; CHECK-NEXT:    ret59 %ext.1 = sext <vscale x 16 x i8> %a to <vscale x 16 x i32>60 %mul = mul nsw <vscale x 16 x i32> %ext.1, splat(i32 127)61 %sel = select <vscale x 16 x i1> %p, <vscale x 16 x i32> %mul, <vscale x 16 x i32> zeroinitializer62 %red = call <vscale x 4 x i32> @llvm.vector.partial.reduce.add(<vscale x 4 x i32> %acc, <vscale x 16 x i32> %sel)63 ret <vscale x 4 x i32> %red64}65 66define <4 x i32> @predicate_ext_mul_fixed_length(<4 x i32> %acc, <16 x i1> %p, <16 x i8> %a) #0 {67; CHECK-LABEL: predicate_ext_mul_fixed_length:68; CHECK:       // %bb.0:69; CHECK-NEXT:    movi v3.16b, #170; CHECK-NEXT:    and v1.16b, v1.16b, v3.16b71; CHECK-NEXT:    sdot v0.4s, v2.16b, v1.16b72; CHECK-NEXT:    ret73 %ext = sext <16 x i8> %a to <16 x i32>74 %sel = select <16 x i1> %p, <16 x i32> %ext, <16 x i32> zeroinitializer75 %red = call <4 x i32> @llvm.vector.partial.reduce.add(<4 x i32> %acc, <16 x i32> %sel)76 ret <4 x i32> %red77}78 79define <vscale x 4 x i32> @predicate_ext_mul_scalable(<vscale x 4 x i32> %acc, <vscale x 16 x i1> %p, <vscale x 16 x i8> %a) #0 {80; CHECK-LABEL: predicate_ext_mul_scalable:81; CHECK:       // %bb.0:82; CHECK-NEXT:    mov z2.b, p0/z, #1 // =0x183; CHECK-NEXT:    sdot z0.s, z1.b, z2.b84; CHECK-NEXT:    ret85 %ext = sext <vscale x 16 x i8> %a to <vscale x 16 x i32>86 %sel = select <vscale x 16 x i1> %p, <vscale x 16 x i32> %ext, <vscale x 16 x i32> zeroinitializer87 %red = call <vscale x 4 x i32> @llvm.vector.partial.reduce.add(<vscale x 4 x i32> %acc, <vscale x 16 x i32> %sel)88 ret <vscale x 4 x i32> %red89}90 91define <4 x float> @predicated_fdot_fixed_length(<4 x float> %acc, <8 x i1> %p, <8 x half> %a, <8 x half> %b) #1 {92; CHECK-LABEL: predicated_fdot_fixed_length:93; CHECK:       // %bb.0:94; CHECK-NEXT:    ushll v1.8h, v1.8b, #095; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z096; CHECK-NEXT:    // kill: def $q2 killed $q2 def $z297; CHECK-NEXT:    shl v1.8h, v1.8h, #1598; CHECK-NEXT:    cmlt v1.8h, v1.8h, #099; CHECK-NEXT:    and v1.16b, v1.16b, v3.16b100; CHECK-NEXT:    fdot z0.s, z2.h, z1.h101; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0102; CHECK-NEXT:    ret103 %ext.1 = fpext <8 x half> %a to <8 x float>104 %ext.2 = fpext <8 x half> %b to <8 x float>105 %mul = fmul <8 x float> %ext.1, %ext.2106 %sel = select <8 x i1> %p, <8 x float> %mul, <8 x float> zeroinitializer107 %red = call <4 x float> @llvm.vector.partial.reduce.fadd(<4 x float> %acc, <8 x float> %sel)108 ret <4 x float> %red109}110 111define <vscale x 4 x float> @predicated_fdot_scalable(<vscale x 4 x float> %acc, <vscale x 8 x i1> %p, <vscale x 8 x half> %a, <vscale x 8 x half> %b) #1 {112; CHECK-LABEL: predicated_fdot_scalable:113; CHECK:       // %bb.0:114; CHECK-NEXT:    movi v3.2d, #0000000000000000115; CHECK-NEXT:    sel z2.h, p0, z2.h, z3.h116; CHECK-NEXT:    fdot z0.s, z1.h, z2.h117; CHECK-NEXT:    ret118 %ext.1 = fpext <vscale x 8 x half> %a to <vscale x 8 x float>119 %ext.2 = fpext <vscale x 8 x half> %b to <vscale x 8 x float>120 %mul = fmul <vscale x 8 x float> %ext.1, %ext.2121 %sel = select <vscale x 8 x i1> %p, <vscale x 8 x float> %mul, <vscale x 8 x float> zeroinitializer122 %red = call <vscale x 4 x float> @llvm.vector.partial.reduce.fadd(<vscale x 4 x float> %acc, <vscale x 8 x float> %sel)123 ret <vscale x 4 x float> %red124}125 126define <4 x float> @predicated_fpext_fmul_fixed_length(<4 x float> %acc, <8 x i1> %p, <8 x half> %a) #1 {127; CHECK-LABEL: predicated_fpext_fmul_fixed_length:128; CHECK:       // %bb.0:129; CHECK-NEXT:    ushll v1.8h, v1.8b, #0130; CHECK-NEXT:    movi v3.8h, #60, lsl #8131; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0132; CHECK-NEXT:    // kill: def $q2 killed $q2 def $z2133; CHECK-NEXT:    shl v1.8h, v1.8h, #15134; CHECK-NEXT:    cmlt v1.8h, v1.8h, #0135; CHECK-NEXT:    and v1.16b, v1.16b, v3.16b136; CHECK-NEXT:    fdot z0.s, z2.h, z1.h137; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0138; CHECK-NEXT:    ret139 %ext = fpext <8 x half> %a to <8 x float>140 %sel = select <8 x i1> %p, <8 x float> %ext, <8 x float> zeroinitializer141 %red = call <4 x float> @llvm.vector.partial.reduce.fadd(<4 x float> %acc, <8 x float> %sel)142 ret <4 x float> %red143}144 145define <vscale x 4 x float> @predicated_fpext_fmul_scalable(<vscale x 4 x float> %acc, <vscale x 8 x i1> %p, <vscale x 8 x half> %a) #1 {146; CHECK-LABEL: predicated_fpext_fmul_scalable:147; CHECK:       // %bb.0:148; CHECK-NEXT:    movi v2.2d, #0000000000000000149; CHECK-NEXT:    fmov z2.h, p0/m, #1.00000000150; CHECK-NEXT:    fdot z0.s, z1.h, z2.h151; CHECK-NEXT:    ret152 %ext = fpext <vscale x 8 x half> %a to <vscale x 8 x float>153 %sel = select <vscale x 8 x i1> %p, <vscale x 8 x float> %ext, <vscale x 8 x float> zeroinitializer154 %red = call <vscale x 4 x float> @llvm.vector.partial.reduce.fadd(<vscale x 4 x float> %acc, <vscale x 8 x float> %sel)155 ret <vscale x 4 x float> %red156}157 158attributes #0 = { nounwind "target-features"="+sve,+dotprod" }159attributes #1 = { nounwind "target-features"="+sve2p1,+dotprod" }160