Skip to content

Commit a80656b

Browse files
committed
[AArch64] Add new tests for INDEX fold
1 parent 4614b80 commit a80656b

File tree

1 file changed

+130
-0
lines changed

1 file changed

+130
-0
lines changed
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s
3+
4+
; 128-bit vectors
5+
6+
define <16 x i8> @v16i8() #0 {
7+
; CHECK-LABEL: v16i8:
8+
; CHECK: // %bb.0:
9+
; CHECK-NEXT: adrp x8, .LCPI0_0
10+
; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI0_0]
11+
; CHECK-NEXT: ret
12+
ret <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>
13+
}
14+
15+
define <8 x i16> @v8i16() #0 {
16+
; CHECK-LABEL: v8i16:
17+
; CHECK: // %bb.0:
18+
; CHECK-NEXT: adrp x8, .LCPI1_0
19+
; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI1_0]
20+
; CHECK-NEXT: ret
21+
ret <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>
22+
}
23+
24+
define <4 x i32> @v4i32() #0 {
25+
; CHECK-LABEL: v4i32:
26+
; CHECK: // %bb.0:
27+
; CHECK-NEXT: adrp x8, .LCPI2_0
28+
; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI2_0]
29+
; CHECK-NEXT: ret
30+
ret <4 x i32> <i32 0, i32 1, i32 2, i32 3>
31+
}
32+
33+
define <2 x i64> @v2i64() #0 {
34+
; CHECK-LABEL: v2i64:
35+
; CHECK: // %bb.0:
36+
; CHECK-NEXT: adrp x8, .LCPI3_0
37+
; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI3_0]
38+
; CHECK-NEXT: ret
39+
ret <2 x i64> <i64 0, i64 1>
40+
}
41+
42+
; 64-bit vectors
43+
44+
define <8 x i8> @v8i8() #0 {
45+
; CHECK-LABEL: v8i8:
46+
; CHECK: // %bb.0:
47+
; CHECK-NEXT: adrp x8, .LCPI4_0
48+
; CHECK-NEXT: ldr d0, [x8, :lo12:.LCPI4_0]
49+
; CHECK-NEXT: ret
50+
ret <8 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7>
51+
}
52+
53+
define <4 x i16> @v4i16() #0 {
54+
; CHECK-LABEL: v4i16:
55+
; CHECK: // %bb.0:
56+
; CHECK-NEXT: adrp x8, .LCPI5_0
57+
; CHECK-NEXT: ldr d0, [x8, :lo12:.LCPI5_0]
58+
; CHECK-NEXT: ret
59+
ret <4 x i16> <i16 0, i16 1, i16 2, i16 3>
60+
}
61+
62+
define <2 x i32> @v2i32() #0 {
63+
; CHECK-LABEL: v2i32:
64+
; CHECK: // %bb.0:
65+
; CHECK-NEXT: adrp x8, .LCPI6_0
66+
; CHECK-NEXT: ldr d0, [x8, :lo12:.LCPI6_0]
67+
; CHECK-NEXT: ret
68+
ret <2 x i32> <i32 0, i32 1>
69+
}
70+
71+
; Positive test, non-zero start and non-unitary step.
72+
; Note: This should be INDEX z0.s, #1, #2 (without the ORR).
73+
define <4 x i32> @v4i32_non_zero_non_one() #0 {
74+
; CHECK-LABEL: v4i32_non_zero_non_one:
75+
; CHECK: // %bb.0:
76+
; CHECK-NEXT: adrp x8, .LCPI7_0
77+
; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI7_0]
78+
; CHECK-NEXT: ret
79+
ret <4 x i32> <i32 1, i32 3, i32 5, i32 7>
80+
}
81+
82+
; Positive test, same as above but negative immediates.
83+
define <4 x i32> @v4i32_neg_immediates() #0 {
84+
; CHECK-LABEL: v4i32_neg_immediates:
85+
; CHECK: // %bb.0:
86+
; CHECK-NEXT: adrp x8, .LCPI8_0
87+
; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI8_0]
88+
; CHECK-NEXT: ret
89+
ret <4 x i32> <i32 -1, i32 -3, i32 -5, i32 -7>
90+
}
91+
92+
; Positive test, out of imm range start.
93+
define <4 x i32> @v4i32_out_range_start() #0 {
94+
; CHECK-LABEL: v4i32_out_range_start:
95+
; CHECK: // %bb.0:
96+
; CHECK-NEXT: adrp x8, .LCPI9_0
97+
; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI9_0]
98+
; CHECK-NEXT: ret
99+
ret <4 x i32> <i32 16, i32 17, i32 18, i32 19>
100+
}
101+
102+
; Positive test, out of imm range step.
103+
define <4 x i32> @v4i32_out_range_step() #0 {
104+
; CHECK-LABEL: v4i32_out_range_step:
105+
; CHECK: // %bb.0:
106+
; CHECK-NEXT: adrp x8, .LCPI10_0
107+
; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI10_0]
108+
; CHECK-NEXT: ret
109+
ret <4 x i32> <i32 0, i32 16, i32 32, i32 48>
110+
}
111+
112+
; Positive test, out of imm range start and step.
113+
define <4 x i32> @v4i32_out_range_start_step() #0 {
114+
; CHECK-LABEL: v4i32_out_range_start_step:
115+
; CHECK: // %bb.0:
116+
; CHECK-NEXT: adrp x8, .LCPI11_0
117+
; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI11_0]
118+
; CHECK-NEXT: ret
119+
ret <4 x i32> <i32 16, i32 32, i32 48, i32 64>
120+
}
121+
122+
; Negative test, non sequential.
123+
define <4 x i32> @v4i32_non_sequential() #0 {
124+
; CHECK-LABEL: v4i32_non_sequential:
125+
; CHECK: // %bb.0:
126+
; CHECK-NEXT: adrp x8, .LCPI12_0
127+
; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI12_0]
128+
; CHECK-NEXT: ret
129+
ret <4 x i32> <i32 0, i32 2, i32 2, i32 3>
130+
}

0 commit comments

Comments
 (0)