1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2
2
; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s
3
3
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
+
4
60
define <8 x float > @insert_extract_v8f32 (<8 x float > %a ) nounwind {
5
61
; CHECK-LABEL: insert_extract_v8f32:
6
62
; CHECK: # %bb.0: # %entry
@@ -15,6 +71,18 @@ entry:
15
71
ret <8 x float > %c
16
72
}
17
73
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
+
18
86
define <4 x double > @insert_extract_v4f64 (<4 x double > %a ) nounwind {
19
87
; CHECK-LABEL: insert_extract_v4f64:
20
88
; CHECK: # %bb.0: # %entry
0 commit comments