Skip to content

Commit 66cc167

Browse files
committed
[LoongArch] Add tests for inserting extracted integer elements. NFC
1 parent 8cf3b98 commit 66cc167

File tree

2 files changed

+116
-0
lines changed

2 files changed

+116
-0
lines changed

llvm/test/CodeGen/LoongArch/lasx/ir-instruction/insert-extract-element.ll

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,62 @@
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+
460
define <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+
1886
define <4 x double> @insert_extract_v4f64(<4 x double> %a) nounwind {
1987
; CHECK-LABEL: insert_extract_v4f64:
2088
; CHECK: # %bb.0: # %entry

llvm/test/CodeGen/LoongArch/lsx/ir-instruction/insert-extract-element.ll

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,42 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
22
; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s
33

4+
define <16 x i8> @insert_extract_v16i8(<16 x i8> %a) nounwind {
5+
; CHECK-LABEL: insert_extract_v16i8:
6+
; CHECK: # %bb.0: # %entry
7+
; CHECK-NEXT: vpickve2gr.b $a0, $vr0, 15
8+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a0, 1
9+
; CHECK-NEXT: ret
10+
entry:
11+
%b = extractelement <16 x i8> %a, i32 15
12+
%c = insertelement <16 x i8> %a, i8 %b, i32 1
13+
ret <16 x i8> %c
14+
}
15+
16+
define <8 x i16> @insert_extract_v8i16(<8 x i16> %a) nounwind {
17+
; CHECK-LABEL: insert_extract_v8i16:
18+
; CHECK: # %bb.0: # %entry
19+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 7
20+
; CHECK-NEXT: vinsgr2vr.h $vr0, $a0, 1
21+
; CHECK-NEXT: ret
22+
entry:
23+
%b = extractelement <8 x i16> %a, i32 7
24+
%c = insertelement <8 x i16> %a, i16 %b, i32 1
25+
ret <8 x i16> %c
26+
}
27+
28+
define <4 x i32> @insert_extract_v4i32(<4 x i32> %a) nounwind {
29+
; CHECK-LABEL: insert_extract_v4i32:
30+
; CHECK: # %bb.0: # %entry
31+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 3
32+
; CHECK-NEXT: vinsgr2vr.w $vr0, $a0, 1
33+
; CHECK-NEXT: ret
34+
entry:
35+
%b = extractelement <4 x i32> %a, i32 3
36+
%c = insertelement <4 x i32> %a, i32 %b, i32 1
37+
ret <4 x i32> %c
38+
}
39+
440
define <4 x float> @insert_extract_v4f32(<4 x float> %a) nounwind {
541
; CHECK-LABEL: insert_extract_v4f32:
642
; CHECK: # %bb.0: # %entry
@@ -14,6 +50,18 @@ entry:
1450
ret <4 x float> %c
1551
}
1652

53+
define <2 x i64> @insert_extract_v2i64(<2 x i64> %a) nounwind {
54+
; CHECK-LABEL: insert_extract_v2i64:
55+
; CHECK: # %bb.0: # %entry
56+
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1
57+
; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 0
58+
; CHECK-NEXT: ret
59+
entry:
60+
%b = extractelement <2 x i64> %a, i32 1
61+
%c = insertelement <2 x i64> %a, i64 %b, i32 0
62+
ret <2 x i64> %c
63+
}
64+
1765
define <2 x double> @insert_extract_v2f64(<2 x double> %a) nounwind {
1866
; CHECK-LABEL: insert_extract_v2f64:
1967
; CHECK: # %bb.0: # %entry

0 commit comments

Comments
 (0)