Skip to content

Commit 82bbf70

Browse files
leecheechenwangleiat
authored andcommitted
[LoongArch] Add testcases of LASX intrinsics with immediates
The testcases mainly cover three situations: - the arguments which should be immediates are non immediates. - the immediate is out of upper limit of the argument type. - the immediate is out of lower limit of the argument type. Depends on D155830 Reviewed By: SixWeining Differential Revision: https://reviews.llvm.org/D157571
1 parent 83311b2 commit 82bbf70

File tree

94 files changed

+5003
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+5003
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
; RUN: not llc --mtriple=loongarch64 --mattr=+lasx < %s 2>&1 | FileCheck %s
2+
3+
declare <32 x i8> @llvm.loongarch.lasx.xvaddi.bu(<32 x i8>, i32)
4+
5+
define <32 x i8> @lasx_xvaddi_bu_lo(<32 x i8> %va) nounwind {
6+
; CHECK: llvm.loongarch.lasx.xvaddi.bu: argument out of range
7+
entry:
8+
%res = call <32 x i8> @llvm.loongarch.lasx.xvaddi.bu(<32 x i8> %va, i32 -1)
9+
ret <32 x i8> %res
10+
}
11+
12+
define <32 x i8> @lasx_xvaddi_bu_hi(<32 x i8> %va) nounwind {
13+
; CHECK: llvm.loongarch.lasx.xvaddi.bu: argument out of range
14+
entry:
15+
%res = call <32 x i8> @llvm.loongarch.lasx.xvaddi.bu(<32 x i8> %va, i32 32)
16+
ret <32 x i8> %res
17+
}
18+
19+
declare <16 x i16> @llvm.loongarch.lasx.xvaddi.hu(<16 x i16>, i32)
20+
21+
define <16 x i16> @lasx_xvaddi_hu_lo(<16 x i16> %va) nounwind {
22+
; CHECK: llvm.loongarch.lasx.xvaddi.hu: argument out of range
23+
entry:
24+
%res = call <16 x i16> @llvm.loongarch.lasx.xvaddi.hu(<16 x i16> %va, i32 -1)
25+
ret <16 x i16> %res
26+
}
27+
28+
define <16 x i16> @lasx_xvaddi_hu_hi(<16 x i16> %va) nounwind {
29+
; CHECK: llvm.loongarch.lasx.xvaddi.hu: argument out of range
30+
entry:
31+
%res = call <16 x i16> @llvm.loongarch.lasx.xvaddi.hu(<16 x i16> %va, i32 32)
32+
ret <16 x i16> %res
33+
}
34+
35+
declare <8 x i32> @llvm.loongarch.lasx.xvaddi.wu(<8 x i32>, i32)
36+
37+
define <8 x i32> @lasx_xvaddi_wu_lo(<8 x i32> %va) nounwind {
38+
; CHECK: llvm.loongarch.lasx.xvaddi.wu: argument out of range
39+
entry:
40+
%res = call <8 x i32> @llvm.loongarch.lasx.xvaddi.wu(<8 x i32> %va, i32 -1)
41+
ret <8 x i32> %res
42+
}
43+
44+
define <8 x i32> @lasx_xvaddi_wu_hi(<8 x i32> %va) nounwind {
45+
; CHECK: llvm.loongarch.lasx.xvaddi.wu: argument out of range
46+
entry:
47+
%res = call <8 x i32> @llvm.loongarch.lasx.xvaddi.wu(<8 x i32> %va, i32 32)
48+
ret <8 x i32> %res
49+
}
50+
51+
declare <4 x i64> @llvm.loongarch.lasx.xvaddi.du(<4 x i64>, i32)
52+
53+
define <4 x i64> @lasx_xvaddi_du_lo(<4 x i64> %va) nounwind {
54+
; CHECK: llvm.loongarch.lasx.xvaddi.du: argument out of range
55+
entry:
56+
%res = call <4 x i64> @llvm.loongarch.lasx.xvaddi.du(<4 x i64> %va, i32 -1)
57+
ret <4 x i64> %res
58+
}
59+
60+
define <4 x i64> @lasx_xvaddi_du_hi(<4 x i64> %va) nounwind {
61+
; CHECK: llvm.loongarch.lasx.xvaddi.du: argument out of range
62+
entry:
63+
%res = call <4 x i64> @llvm.loongarch.lasx.xvaddi.du(<4 x i64> %va, i32 32)
64+
ret <4 x i64> %res
65+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
; RUN: not llc --mtriple=loongarch64 --mattr=+lasx < %s 2>&1 | FileCheck %s
2+
3+
declare <32 x i8> @llvm.loongarch.lasx.xvaddi.bu(<32 x i8>, i32)
4+
5+
define <32 x i8> @lasx_xvaddi_bu(<32 x i8> %va, i32 %b) nounwind {
6+
; CHECK: immarg operand has non-immediate parameter
7+
entry:
8+
%res = call <32 x i8> @llvm.loongarch.lasx.xvaddi.bu(<32 x i8> %va, i32 %b)
9+
ret <32 x i8> %res
10+
}
11+
12+
declare <16 x i16> @llvm.loongarch.lasx.xvaddi.hu(<16 x i16>, i32)
13+
14+
define <16 x i16> @lasx_xvaddi_hu(<16 x i16> %va, i32 %b) nounwind {
15+
; CHECK: immarg operand has non-immediate parameter
16+
entry:
17+
%res = call <16 x i16> @llvm.loongarch.lasx.xvaddi.hu(<16 x i16> %va, i32 %b)
18+
ret <16 x i16> %res
19+
}
20+
21+
declare <8 x i32> @llvm.loongarch.lasx.xvaddi.wu(<8 x i32>, i32)
22+
23+
define <8 x i32> @lasx_xvaddi_wu(<8 x i32> %va, i32 %b) nounwind {
24+
; CHECK: immarg operand has non-immediate parameter
25+
entry:
26+
%res = call <8 x i32> @llvm.loongarch.lasx.xvaddi.wu(<8 x i32> %va, i32 %b)
27+
ret <8 x i32> %res
28+
}
29+
30+
declare <4 x i64> @llvm.loongarch.lasx.xvaddi.du(<4 x i64>, i32)
31+
32+
define <4 x i64> @lasx_xvaddi_du(<4 x i64> %va, i32 %b) nounwind {
33+
; CHECK: immarg operand has non-immediate parameter
34+
entry:
35+
%res = call <4 x i64> @llvm.loongarch.lasx.xvaddi.du(<4 x i64> %va, i32 %b)
36+
ret <4 x i64> %res
37+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
; RUN: not llc --mtriple=loongarch64 --mattr=+lasx < %s 2>&1 | FileCheck %s
2+
3+
declare <32 x i8> @llvm.loongarch.lasx.xvandi.b(<32 x i8>, i32)
4+
5+
define <32 x i8> @lasx_xvandi_b_lo(<32 x i8> %va) nounwind {
6+
; CHECK: llvm.loongarch.lasx.xvandi.b: argument out of range
7+
entry:
8+
%res = call <32 x i8> @llvm.loongarch.lasx.xvandi.b(<32 x i8> %va, i32 -1)
9+
ret <32 x i8> %res
10+
}
11+
12+
define <32 x i8> @lasx_xvandi_b_hi(<32 x i8> %va) nounwind {
13+
; CHECK: llvm.loongarch.lasx.xvandi.b: argument out of range
14+
entry:
15+
%res = call <32 x i8> @llvm.loongarch.lasx.xvandi.b(<32 x i8> %va, i32 256)
16+
ret <32 x i8> %res
17+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
; RUN: not llc --mtriple=loongarch64 --mattr=+lasx < %s 2>&1 | FileCheck %s
2+
3+
declare <32 x i8> @llvm.loongarch.lasx.xvandi.b(<32 x i8>, i32)
4+
5+
define <32 x i8> @lasx_xvandi_b(<32 x i8> %va, i32 %b) nounwind {
6+
; CHECK: immarg operand has non-immediate parameter
7+
entry:
8+
%res = call <32 x i8> @llvm.loongarch.lasx.xvandi.b(<32 x i8> %va, i32 %b)
9+
ret <32 x i8> %res
10+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
; RUN: not llc --mtriple=loongarch64 --mattr=+lasx < %s 2>&1 | FileCheck %s
2+
3+
declare <32 x i8> @llvm.loongarch.lasx.xvbitclri.b(<32 x i8>, i32)
4+
5+
define <32 x i8> @lasx_xvbitclri_b_lo(<32 x i8> %va) nounwind {
6+
; CHECK: llvm.loongarch.lasx.xvbitclri.b: argument out of range
7+
entry:
8+
%res = call <32 x i8> @llvm.loongarch.lasx.xvbitclri.b(<32 x i8> %va, i32 -1)
9+
ret <32 x i8> %res
10+
}
11+
12+
define <32 x i8> @lasx_xvbitclri_b_hi(<32 x i8> %va) nounwind {
13+
; CHECK: llvm.loongarch.lasx.xvbitclri.b: argument out of range
14+
entry:
15+
%res = call <32 x i8> @llvm.loongarch.lasx.xvbitclri.b(<32 x i8> %va, i32 8)
16+
ret <32 x i8> %res
17+
}
18+
19+
declare <16 x i16> @llvm.loongarch.lasx.xvbitclri.h(<16 x i16>, i32)
20+
21+
define <16 x i16> @lasx_xvbitclri_h_lo(<16 x i16> %va) nounwind {
22+
; CHECK: llvm.loongarch.lasx.xvbitclri.h: argument out of range
23+
entry:
24+
%res = call <16 x i16> @llvm.loongarch.lasx.xvbitclri.h(<16 x i16> %va, i32 -1)
25+
ret <16 x i16> %res
26+
}
27+
28+
define <16 x i16> @lasx_xvbitclri_h_hi(<16 x i16> %va) nounwind {
29+
; CHECK: llvm.loongarch.lasx.xvbitclri.h: argument out of range
30+
entry:
31+
%res = call <16 x i16> @llvm.loongarch.lasx.xvbitclri.h(<16 x i16> %va, i32 16)
32+
ret <16 x i16> %res
33+
}
34+
35+
declare <8 x i32> @llvm.loongarch.lasx.xvbitclri.w(<8 x i32>, i32)
36+
37+
define <8 x i32> @lasx_xvbitclri_w_lo(<8 x i32> %va) nounwind {
38+
; CHECK: llvm.loongarch.lasx.xvbitclri.w: argument out of range
39+
entry:
40+
%res = call <8 x i32> @llvm.loongarch.lasx.xvbitclri.w(<8 x i32> %va, i32 -1)
41+
ret <8 x i32> %res
42+
}
43+
44+
define <8 x i32> @lasx_xvbitclri_w_hi(<8 x i32> %va) nounwind {
45+
; CHECK: llvm.loongarch.lasx.xvbitclri.w: argument out of range
46+
entry:
47+
%res = call <8 x i32> @llvm.loongarch.lasx.xvbitclri.w(<8 x i32> %va, i32 32)
48+
ret <8 x i32> %res
49+
}
50+
51+
declare <4 x i64> @llvm.loongarch.lasx.xvbitclri.d(<4 x i64>, i32)
52+
53+
define <4 x i64> @lasx_xvbitclri_d_lo(<4 x i64> %va) nounwind {
54+
; CHECK: llvm.loongarch.lasx.xvbitclri.d: argument out of range
55+
entry:
56+
%res = call <4 x i64> @llvm.loongarch.lasx.xvbitclri.d(<4 x i64> %va, i32 -1)
57+
ret <4 x i64> %res
58+
}
59+
60+
define <4 x i64> @lasx_xvbitclri_d_hi(<4 x i64> %va) nounwind {
61+
; CHECK: llvm.loongarch.lasx.xvbitclri.d: argument out of range
62+
entry:
63+
%res = call <4 x i64> @llvm.loongarch.lasx.xvbitclri.d(<4 x i64> %va, i32 64)
64+
ret <4 x i64> %res
65+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
; RUN: not llc --mtriple=loongarch64 --mattr=+lasx < %s 2>&1 | FileCheck %s
2+
3+
declare <32 x i8> @llvm.loongarch.lasx.xvbitclri.b(<32 x i8>, i32)
4+
5+
define <32 x i8> @lasx_xvbitclri_b(<32 x i8> %va, i32 %b) nounwind {
6+
; CHECK: immarg operand has non-immediate parameter
7+
entry:
8+
%res = call <32 x i8> @llvm.loongarch.lasx.xvbitclri.b(<32 x i8> %va, i32 %b)
9+
ret <32 x i8> %res
10+
}
11+
12+
declare <16 x i16> @llvm.loongarch.lasx.xvbitclri.h(<16 x i16>, i32)
13+
14+
define <16 x i16> @lasx_xvbitclri_h(<16 x i16> %va, i32 %b) nounwind {
15+
; CHECK: immarg operand has non-immediate parameter
16+
entry:
17+
%res = call <16 x i16> @llvm.loongarch.lasx.xvbitclri.h(<16 x i16> %va, i32 %b)
18+
ret <16 x i16> %res
19+
}
20+
21+
declare <8 x i32> @llvm.loongarch.lasx.xvbitclri.w(<8 x i32>, i32)
22+
23+
define <8 x i32> @lasx_xvbitclri_w(<8 x i32> %va, i32 %b) nounwind {
24+
; CHECK: immarg operand has non-immediate parameter
25+
entry:
26+
%res = call <8 x i32> @llvm.loongarch.lasx.xvbitclri.w(<8 x i32> %va, i32 %b)
27+
ret <8 x i32> %res
28+
}
29+
30+
declare <4 x i64> @llvm.loongarch.lasx.xvbitclri.d(<4 x i64>, i32)
31+
32+
define <4 x i64> @lasx_xvbitclri_d(<4 x i64> %va, i32 %b) nounwind {
33+
; CHECK: immarg operand has non-immediate parameter
34+
entry:
35+
%res = call <4 x i64> @llvm.loongarch.lasx.xvbitclri.d(<4 x i64> %va, i32 %b)
36+
ret <4 x i64> %res
37+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
; RUN: not llc --mtriple=loongarch64 --mattr=+lasx < %s 2>&1 | FileCheck %s
2+
3+
declare <32 x i8> @llvm.loongarch.lasx.xvbitrevi.b(<32 x i8>, i32)
4+
5+
define <32 x i8> @lasx_xvbitrevi_b_lo(<32 x i8> %va) nounwind {
6+
; CHECK: llvm.loongarch.lasx.xvbitrevi.b: argument out of range
7+
entry:
8+
%res = call <32 x i8> @llvm.loongarch.lasx.xvbitrevi.b(<32 x i8> %va, i32 -1)
9+
ret <32 x i8> %res
10+
}
11+
12+
define <32 x i8> @lasx_xvbitrevi_b_hi(<32 x i8> %va) nounwind {
13+
; CHECK: llvm.loongarch.lasx.xvbitrevi.b: argument out of range
14+
entry:
15+
%res = call <32 x i8> @llvm.loongarch.lasx.xvbitrevi.b(<32 x i8> %va, i32 8)
16+
ret <32 x i8> %res
17+
}
18+
19+
declare <16 x i16> @llvm.loongarch.lasx.xvbitrevi.h(<16 x i16>, i32)
20+
21+
define <16 x i16> @lasx_xvbitrevi_lo(<16 x i16> %va) nounwind {
22+
; CHECK: llvm.loongarch.lasx.xvbitrevi.h: argument out of range
23+
entry:
24+
%res = call <16 x i16> @llvm.loongarch.lasx.xvbitrevi.h(<16 x i16> %va, i32 -1)
25+
ret <16 x i16> %res
26+
}
27+
28+
define <16 x i16> @lasx_xvbitrevi_h_hi(<16 x i16> %va) nounwind {
29+
; CHECK: llvm.loongarch.lasx.xvbitrevi.h: argument out of range
30+
entry:
31+
%res = call <16 x i16> @llvm.loongarch.lasx.xvbitrevi.h(<16 x i16> %va, i32 16)
32+
ret <16 x i16> %res
33+
}
34+
35+
declare <8 x i32> @llvm.loongarch.lasx.xvbitrevi.w(<8 x i32>, i32)
36+
37+
define <8 x i32> @lasx_xvbitrevi_w_lo(<8 x i32> %va) nounwind {
38+
; CHECK: llvm.loongarch.lasx.xvbitrevi.w: argument out of range
39+
entry:
40+
%res = call <8 x i32> @llvm.loongarch.lasx.xvbitrevi.w(<8 x i32> %va, i32 -1)
41+
ret <8 x i32> %res
42+
}
43+
44+
define <8 x i32> @lasx_xvbitrevi_w_hi(<8 x i32> %va) nounwind {
45+
; CHECK: llvm.loongarch.lasx.xvbitrevi.w: argument out of range
46+
entry:
47+
%res = call <8 x i32> @llvm.loongarch.lasx.xvbitrevi.w(<8 x i32> %va, i32 32)
48+
ret <8 x i32> %res
49+
}
50+
51+
declare <4 x i64> @llvm.loongarch.lasx.xvbitrevi.d(<4 x i64>, i32)
52+
53+
define <4 x i64> @lasx_xvbitrevi_d_lo(<4 x i64> %va) nounwind {
54+
; CHECK: llvm.loongarch.lasx.xvbitrevi.d: argument out of range
55+
entry:
56+
%res = call <4 x i64> @llvm.loongarch.lasx.xvbitrevi.d(<4 x i64> %va, i32 -1)
57+
ret <4 x i64> %res
58+
}
59+
60+
define <4 x i64> @lasx_xvbitrevi_d_hi(<4 x i64> %va) nounwind {
61+
; CHECK: llvm.loongarch.lasx.xvbitrevi.d: argument out of range
62+
entry:
63+
%res = call <4 x i64> @llvm.loongarch.lasx.xvbitrevi.d(<4 x i64> %va, i32 64)
64+
ret <4 x i64> %res
65+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
; RUN: not llc --mtriple=loongarch64 --mattr=+lasx < %s 2>&1 | FileCheck %s
2+
3+
declare <32 x i8> @llvm.loongarch.lasx.xvbitrevi.b(<32 x i8>, i32)
4+
5+
define <32 x i8> @lasx_xvbitrevi_b(<32 x i8> %va, i32 %b) nounwind {
6+
; CHECK: immarg operand has non-immediate parameter
7+
entry:
8+
%res = call <32 x i8> @llvm.loongarch.lasx.xvbitrevi.b(<32 x i8> %va, i32 %b)
9+
ret <32 x i8> %res
10+
}
11+
12+
declare <16 x i16> @llvm.loongarch.lasx.xvbitrevi.h(<16 x i16>, i32)
13+
14+
define <16 x i16> @lasx_xvbitrevi_h(<16 x i16> %va, i32 %b) nounwind {
15+
; CHECK: immarg operand has non-immediate parameter
16+
entry:
17+
%res = call <16 x i16> @llvm.loongarch.lasx.xvbitrevi.h(<16 x i16> %va, i32 %b)
18+
ret <16 x i16> %res
19+
}
20+
21+
declare <8 x i32> @llvm.loongarch.lasx.xvbitrevi.w(<8 x i32>, i32)
22+
23+
define <8 x i32> @lasx_xvbitrevi_w(<8 x i32> %va, i32 %b) nounwind {
24+
; CHECK: immarg operand has non-immediate parameter
25+
entry:
26+
%res = call <8 x i32> @llvm.loongarch.lasx.xvbitrevi.w(<8 x i32> %va, i32 %b)
27+
ret <8 x i32> %res
28+
}
29+
30+
declare <4 x i64> @llvm.loongarch.lasx.xvbitrevi.d(<4 x i64>, i32)
31+
32+
define <4 x i64> @lasx_xvbitrevi_d(<4 x i64> %va, i32 %b) nounwind {
33+
; CHECK: immarg operand has non-immediate parameter
34+
entry:
35+
%res = call <4 x i64> @llvm.loongarch.lasx.xvbitrevi.d(<4 x i64> %va, i32 %b)
36+
ret <4 x i64> %res
37+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
; RUN: not llc --mtriple=loongarch64 --mattr=+lasx < %s 2>&1 | FileCheck %s
2+
3+
declare <32 x i8> @llvm.loongarch.lasx.xvbitseli.b(<32 x i8>, <32 x i8>, i32)
4+
5+
define <32 x i8> @lasx_xvbitseli_b_lo(<32 x i8> %va, <32 x i8> %vb) nounwind {
6+
; CHECK: llvm.loongarch.lasx.xvbitseli.b: argument out of range
7+
entry:
8+
%res = call <32 x i8> @llvm.loongarch.lasx.xvbitseli.b(<32 x i8> %va, <32 x i8> %vb, i32 -1)
9+
ret <32 x i8> %res
10+
}
11+
12+
define <32 x i8> @lasx_xvbitseli_b_hi(<32 x i8> %va, <32 x i8> %vb) nounwind {
13+
; CHECK: llvm.loongarch.lasx.xvbitseli.b: argument out of range
14+
entry:
15+
%res = call <32 x i8> @llvm.loongarch.lasx.xvbitseli.b(<32 x i8> %va, <32 x i8> %vb, i32 256)
16+
ret <32 x i8> %res
17+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
; RUN: not llc --mtriple=loongarch64 --mattr=+lasx < %s 2>&1 | FileCheck %s
2+
3+
declare <32 x i8> @llvm.loongarch.lasx.xvbitseli.b(<32 x i8>, <32 x i8>, i32)
4+
5+
define <32 x i8> @lasx_xvbitseli_b(<32 x i8> %va, <32 x i8> %vb, i32 %c) nounwind {
6+
; CHECK: immarg operand has non-immediate parameter
7+
entry:
8+
%res = call <32 x i8> @llvm.loongarch.lasx.xvbitseli.b(<32 x i8> %va, <32 x i8> %vb, i32 %c)
9+
ret <32 x i8> %res
10+
}

0 commit comments

Comments
 (0)