101 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx < %s | FileCheck %s --check-prefixes=CHECK,LA323; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s --check-prefixes=CHECK,LA644 5define i8 @extractelt_add_v16i8(ptr %p) {6; CHECK-LABEL: extractelt_add_v16i8:7; CHECK: # %bb.0: # %entry8; CHECK-NEXT: vld $vr0, $a0, 09; CHECK-NEXT: vaddi.bu $vr0, $vr0, 1310; CHECK-NEXT: vpickve2gr.b $a0, $vr0, 211; CHECK-NEXT: ret12entry:13 %x = load <16 x i8>, ptr %p14 %add = add <16 x i8> %x, <i8 11, i8 12, i8 13, i8 14, i8 11, i8 12, i8 13, i8 14, i8 11, i8 12, i8 13, i8 14, i8 11, i8 12, i8 13, i8 14>15 %ext = extractelement <16 x i8> %add, i32 216 ret i8 %ext17}18 19define i16 @extractelt_add_v8i16(ptr %p) {20; CHECK-LABEL: extractelt_add_v8i16:21; CHECK: # %bb.0: # %entry22; CHECK-NEXT: vld $vr0, $a0, 023; CHECK-NEXT: vaddi.hu $vr0, $vr0, 1324; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 225; CHECK-NEXT: ret26entry:27 %x = load <8 x i16>, ptr %p28 %add = add <8 x i16> %x, <i16 11, i16 12, i16 13, i16 14, i16 11, i16 12, i16 13, i16 14>29 %ext = extractelement <8 x i16> %add, i32 230 ret i16 %ext31}32 33define i32 @extractelt_add_v4i32(ptr %p) {34; LA32-LABEL: extractelt_add_v4i32:35; LA32: # %bb.0: # %entry36; LA32-NEXT: ld.w $a0, $a0, 837; LA32-NEXT: addi.w $a0, $a0, 1338; LA32-NEXT: ret39;40; LA64-LABEL: extractelt_add_v4i32:41; LA64: # %bb.0: # %entry42; LA64-NEXT: vld $vr0, $a0, 043; LA64-NEXT: vaddi.wu $vr0, $vr0, 1344; LA64-NEXT: vpickve2gr.w $a0, $vr0, 245; LA64-NEXT: ret46entry:47 %x = load <4 x i32>, ptr %p48 %add = add <4 x i32> %x, <i32 11, i32 12, i32 13, i32 14>49 %ext = extractelement <4 x i32> %add, i32 250 ret i32 %ext51}52 53define i64 @extractelt_add_v2i64(ptr %p) {54; LA32-LABEL: extractelt_add_v2i64:55; LA32: # %bb.0: # %entry56; LA32-NEXT: vld $vr0, $a0, 057; LA32-NEXT: vaddi.du $vr0, $vr0, 1258; LA32-NEXT: vpickve2gr.w $a0, $vr0, 259; LA32-NEXT: vpickve2gr.w $a1, $vr0, 360; LA32-NEXT: ret61;62; LA64-LABEL: extractelt_add_v2i64:63; LA64: # %bb.0: # %entry64; LA64-NEXT: ld.d $a0, $a0, 865; LA64-NEXT: addi.d $a0, $a0, 1266; LA64-NEXT: ret67entry:68 %x = load <2 x i64>, ptr %p69 %add = add <2 x i64> %x, <i64 11, i64 12>70 %ext = extractelement <2 x i64> %add, i32 171 ret i64 %ext72}73 74define float @extractelt_fadd_v4f32(ptr %p) {75; CHECK-LABEL: extractelt_fadd_v4f32:76; CHECK: # %bb.0: # %entry77; CHECK-NEXT: fld.s $fa0, $a0, 878; CHECK-NEXT: vldi $vr1, -123879; CHECK-NEXT: fadd.s $fa0, $fa0, $fa180; CHECK-NEXT: ret81entry:82 %x = load <4 x float>, ptr %p83 %add = fadd <4 x float> %x, <float 11.0, float 12.0, float 13.0, float 14.0>84 %ext = extractelement <4 x float> %add, i32 285 ret float %ext86}87 88define double @extractelt_fadd_v2f64(ptr %p) {89; CHECK-LABEL: extractelt_fadd_v2f64:90; CHECK: # %bb.0: # %entry91; CHECK-NEXT: fld.d $fa0, $a0, 892; CHECK-NEXT: vldi $vr1, -98493; CHECK-NEXT: fadd.d $fa0, $fa0, $fa194; CHECK-NEXT: ret95entry:96 %x = load <2 x double>, ptr %p97 %add = fadd <2 x double> %x, <double 11.0, double 12.0>98 %ext = extractelement <2 x double> %add, i32 199 ret double %ext100}101