brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · f91a1b3 Raw
120 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx %s -o - | FileCheck %s --check-prefixes=CHECK,LA323; RUN: llc --mtriple=loongarch64 --mattr=+lasx %s -o - | FileCheck %s --check-prefixes=CHECK,LA644 5define void @vec_reduce_umin_v32i8(ptr %src, ptr %dst) nounwind {6; CHECK-LABEL: vec_reduce_umin_v32i8:7; CHECK:       # %bb.0:8; CHECK-NEXT:    xvld $xr0, $a0, 09; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 110; CHECK-NEXT:    vmin.bu $vr0, $vr0, $vr111; CHECK-NEXT:    vbsrl.v $vr1, $vr0, 812; CHECK-NEXT:    vmin.bu $vr0, $vr1, $vr013; CHECK-NEXT:    vbsrl.v $vr1, $vr0, 414; CHECK-NEXT:    vmin.bu $vr0, $vr1, $vr015; CHECK-NEXT:    vbsrl.v $vr1, $vr0, 216; CHECK-NEXT:    vmin.bu $vr0, $vr1, $vr017; CHECK-NEXT:    vbsrl.v $vr1, $vr0, 118; CHECK-NEXT:    vmin.bu $vr0, $vr1, $vr019; CHECK-NEXT:    vstelm.b $vr0, $a1, 0, 020; CHECK-NEXT:    ret21  %v = load <32 x i8>, ptr %src22  %res = call i8 @llvm.vector.reduce.umin.v32i8(<32 x i8> %v)23  store i8 %res, ptr %dst24  ret void25}26 27define void @vec_reduce_umin_v16i16(ptr %src, ptr %dst) nounwind {28; CHECK-LABEL: vec_reduce_umin_v16i16:29; CHECK:       # %bb.0:30; CHECK-NEXT:    xvld $xr0, $a0, 031; CHECK-NEXT:    xvpermi.q $xr1, $xr0, 132; CHECK-NEXT:    vmin.hu $vr0, $vr0, $vr133; CHECK-NEXT:    vbsrl.v $vr1, $vr0, 834; CHECK-NEXT:    vmin.hu $vr0, $vr1, $vr035; CHECK-NEXT:    vbsrl.v $vr1, $vr0, 436; CHECK-NEXT:    vmin.hu $vr0, $vr1, $vr037; CHECK-NEXT:    vbsrl.v $vr1, $vr0, 238; CHECK-NEXT:    vmin.hu $vr0, $vr1, $vr039; CHECK-NEXT:    vstelm.h $vr0, $a1, 0, 040; CHECK-NEXT:    ret41  %v = load <16 x i16>, ptr %src42  %res = call i16 @llvm.vector.reduce.umin.v16i16(<16 x i16> %v)43  store i16 %res, ptr %dst44  ret void45}46 47define void @vec_reduce_umin_v8i32(ptr %src, ptr %dst) nounwind {48; LA32-LABEL: vec_reduce_umin_v8i32:49; LA32:       # %bb.0:50; LA32-NEXT:    xvld $xr0, $a0, 051; LA32-NEXT:    xvpermi.q $xr1, $xr0, 152; LA32-NEXT:    vmin.wu $vr0, $vr0, $vr153; LA32-NEXT:    vbsrl.v $vr1, $vr0, 854; LA32-NEXT:    vmin.wu $vr0, $vr1, $vr055; LA32-NEXT:    vbsrl.v $vr1, $vr0, 456; LA32-NEXT:    vmin.wu $vr0, $vr1, $vr057; LA32-NEXT:    vpickve2gr.w $a0, $vr0, 058; LA32-NEXT:    st.w $a0, $a1, 059; LA32-NEXT:    ret60;61; LA64-LABEL: vec_reduce_umin_v8i32:62; LA64:       # %bb.0:63; LA64-NEXT:    xvld $xr0, $a0, 064; LA64-NEXT:    xvpermi.q $xr1, $xr0, 165; LA64-NEXT:    vmin.wu $vr0, $vr0, $vr166; LA64-NEXT:    vbsrl.v $vr1, $vr0, 867; LA64-NEXT:    vmin.wu $vr0, $vr1, $vr068; LA64-NEXT:    vbsrl.v $vr1, $vr0, 469; LA64-NEXT:    vmin.wu $vr0, $vr1, $vr070; LA64-NEXT:    vstelm.w $vr0, $a1, 0, 071; LA64-NEXT:    ret72  %v = load <8 x i32>, ptr %src73  %res = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> %v)74  store i32 %res, ptr %dst75  ret void76}77 78define void @vec_reduce_umin_v4i64(ptr %src, ptr %dst) nounwind {79; LA32-LABEL: vec_reduce_umin_v4i64:80; LA32:       # %bb.0:81; LA32-NEXT:    xvld $xr0, $a0, 082; LA32-NEXT:    xvpermi.q $xr1, $xr0, 183; LA32-NEXT:    vmin.du $vr0, $vr0, $vr184; LA32-NEXT:    vpickve2gr.w $a0, $vr0, 385; LA32-NEXT:    vpickve2gr.w $a2, $vr0, 186; LA32-NEXT:    sltu $a3, $a2, $a087; LA32-NEXT:    xor $a4, $a2, $a088; LA32-NEXT:    sltui $a4, $a4, 189; LA32-NEXT:    masknez $a3, $a3, $a490; LA32-NEXT:    vpickve2gr.w $a5, $vr0, 291; LA32-NEXT:    vpickve2gr.w $a6, $vr0, 092; LA32-NEXT:    sltu $a7, $a6, $a593; LA32-NEXT:    maskeqz $a4, $a7, $a494; LA32-NEXT:    or $a3, $a4, $a395; LA32-NEXT:    masknez $a4, $a5, $a396; LA32-NEXT:    maskeqz $a5, $a6, $a397; LA32-NEXT:    or $a4, $a5, $a498; LA32-NEXT:    masknez $a0, $a0, $a399; LA32-NEXT:    maskeqz $a2, $a2, $a3100; LA32-NEXT:    or $a0, $a2, $a0101; LA32-NEXT:    st.w $a0, $a1, 4102; LA32-NEXT:    st.w $a4, $a1, 0103; LA32-NEXT:    ret104;105; LA64-LABEL: vec_reduce_umin_v4i64:106; LA64:       # %bb.0:107; LA64-NEXT:    xvld $xr0, $a0, 0108; LA64-NEXT:    xvpermi.q $xr1, $xr0, 1109; LA64-NEXT:    vmin.du $vr0, $vr0, $vr1110; LA64-NEXT:    vbsrl.v $vr1, $vr0, 8111; LA64-NEXT:    vmin.du $vr0, $vr1, $vr0112; LA64-NEXT:    vstelm.d $vr0, $a1, 0, 0113; LA64-NEXT:    ret114  %v = load <4 x i64>, ptr %src115  %res = call i64 @llvm.vector.reduce.umin.v4i64(<4 x i64> %v)116  store i64 %res, ptr %dst117  ret void118}119 120