11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
22; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s
33
4+ define <32 x i8 > @insert_extract_v32i8 (<32 x i8 > %a ) nounwind {
5+ ; CHECK-LABEL: insert_extract_v32i8:
6+ ; CHECK: # %bb.0: # %entry
7+ ; CHECK-NEXT: addi.d $sp, $sp, -64
8+ ; CHECK-NEXT: st.d $ra, $sp, 56 # 8-byte Folded Spill
9+ ; CHECK-NEXT: st.d $fp, $sp, 48 # 8-byte Folded Spill
10+ ; CHECK-NEXT: addi.d $fp, $sp, 64
11+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
12+ ; CHECK-NEXT: xvst $xr0, $sp, 0
13+ ; CHECK-NEXT: ld.b $a0, $sp, 31
14+ ; CHECK-NEXT: vinsgr2vr.b $vr0, $a0, 1
15+ ; CHECK-NEXT: addi.d $sp, $fp, -64
16+ ; CHECK-NEXT: ld.d $fp, $sp, 48 # 8-byte Folded Reload
17+ ; CHECK-NEXT: ld.d $ra, $sp, 56 # 8-byte Folded Reload
18+ ; CHECK-NEXT: addi.d $sp, $sp, 64
19+ ; CHECK-NEXT: ret
20+ entry:
21+ %b = extractelement <32 x i8 > %a , i32 31
22+ %c = insertelement <32 x i8 > %a , i8 %b , i32 1
23+ ret <32 x i8 > %c
24+ }
25+
26+ define <16 x i16 > @insert_extract_v16i16 (<16 x i16 > %a ) nounwind {
27+ ; CHECK-LABEL: insert_extract_v16i16:
28+ ; CHECK: # %bb.0: # %entry
29+ ; CHECK-NEXT: addi.d $sp, $sp, -64
30+ ; CHECK-NEXT: st.d $ra, $sp, 56 # 8-byte Folded Spill
31+ ; CHECK-NEXT: st.d $fp, $sp, 48 # 8-byte Folded Spill
32+ ; CHECK-NEXT: addi.d $fp, $sp, 64
33+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
34+ ; CHECK-NEXT: xvst $xr0, $sp, 0
35+ ; CHECK-NEXT: ld.h $a0, $sp, 30
36+ ; CHECK-NEXT: vinsgr2vr.h $vr0, $a0, 1
37+ ; CHECK-NEXT: addi.d $sp, $fp, -64
38+ ; CHECK-NEXT: ld.d $fp, $sp, 48 # 8-byte Folded Reload
39+ ; CHECK-NEXT: ld.d $ra, $sp, 56 # 8-byte Folded Reload
40+ ; CHECK-NEXT: addi.d $sp, $sp, 64
41+ ; CHECK-NEXT: ret
42+ entry:
43+ %b = extractelement <16 x i16 > %a , i32 15
44+ %c = insertelement <16 x i16 > %a , i16 %b , i32 1
45+ ret <16 x i16 > %c
46+ }
47+
48+ define <8 x i32 > @insert_extract_v8i32 (<8 x i32 > %a ) nounwind {
49+ ; CHECK-LABEL: insert_extract_v8i32:
50+ ; CHECK: # %bb.0: # %entry
51+ ; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 7
52+ ; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 1
53+ ; CHECK-NEXT: ret
54+ entry:
55+ %b = extractelement <8 x i32 > %a , i32 7
56+ %c = insertelement <8 x i32 > %a , i32 %b , i32 1
57+ ret <8 x i32 > %c
58+ }
59+
460define <8 x float > @insert_extract_v8f32 (<8 x float > %a ) nounwind {
561; CHECK-LABEL: insert_extract_v8f32:
662; CHECK: # %bb.0: # %entry
@@ -15,6 +71,18 @@ entry:
1571 ret <8 x float > %c
1672}
1773
74+ define <4 x i64 > @insert_extract_v4i64 (<4 x i64 > %a ) nounwind {
75+ ; CHECK-LABEL: insert_extract_v4i64:
76+ ; CHECK: # %bb.0: # %entry
77+ ; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 3
78+ ; CHECK-NEXT: xvinsgr2vr.d $xr0, $a0, 1
79+ ; CHECK-NEXT: ret
80+ entry:
81+ %b = extractelement <4 x i64 > %a , i32 3
82+ %c = insertelement <4 x i64 > %a , i64 %b , i32 1
83+ ret <4 x i64 > %c
84+ }
85+
1886define <4 x double > @insert_extract_v4f64 (<4 x double > %a ) nounwind {
1987; CHECK-LABEL: insert_extract_v4f64:
2088; CHECK: # %bb.0: # %entry
0 commit comments