Skip to content

Commit b099dd6

Browse files
committed
[AArch64] Add some tests for reassociated addressing modes. NFC
1 parent c7e0f1e commit b099dd6

File tree

1 file changed

+184
-0
lines changed

1 file changed

+184
-0
lines changed
Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2+
; RUN: llc -mtriple=aarch64 -mattr=+sve %s -o - | FileCheck %s
3+
4+
define <vscale x 16 x i8> @i8_1v_4s(ptr %b) {
5+
; CHECK-LABEL: i8_1v_4s:
6+
; CHECK: // %bb.0: // %entry
7+
; CHECK-NEXT: rdvl x8, #1
8+
; CHECK-NEXT: ptrue p0.b
9+
; CHECK-NEXT: mov w9, #4 // =0x4
10+
; CHECK-NEXT: add x8, x0, x8
11+
; CHECK-NEXT: ld1b { z0.b }, p0/z, [x8, x9]
12+
; CHECK-NEXT: ret
13+
entry:
14+
%0 = tail call i64 @llvm.vscale.i64()
15+
%1 = shl nuw nsw i64 %0, 4
16+
%add.ptr = getelementptr inbounds i8, ptr %b, i64 %1
17+
%add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 4
18+
%2 = load <vscale x 16 x i8>, ptr %add.ptr1, align 16
19+
ret <vscale x 16 x i8> %2
20+
}
21+
22+
define <vscale x 16 x i8> @i8_4s_1v(ptr %b) {
23+
; CHECK-LABEL: i8_4s_1v:
24+
; CHECK: // %bb.0: // %entry
25+
; CHECK-NEXT: rdvl x8, #1
26+
; CHECK-NEXT: ptrue p0.b
27+
; CHECK-NEXT: mov w9, #4 // =0x4
28+
; CHECK-NEXT: add x8, x0, x8
29+
; CHECK-NEXT: ld1b { z0.b }, p0/z, [x8, x9]
30+
; CHECK-NEXT: ret
31+
entry:
32+
%add.ptr = getelementptr inbounds i8, ptr %b, i64 4
33+
%0 = tail call i64 @llvm.vscale.i64()
34+
%1 = shl nuw nsw i64 %0, 4
35+
%add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 %1
36+
%2 = load <vscale x 16 x i8>, ptr %add.ptr1, align 16
37+
ret <vscale x 16 x i8> %2
38+
}
39+
40+
define <vscale x 8 x i16> @i16_1v_8s(ptr %b) {
41+
; CHECK-LABEL: i16_1v_8s:
42+
; CHECK: // %bb.0: // %entry
43+
; CHECK-NEXT: rdvl x8, #1
44+
; CHECK-NEXT: ptrue p0.h
45+
; CHECK-NEXT: mov x9, #4 // =0x4
46+
; CHECK-NEXT: add x8, x0, x8
47+
; CHECK-NEXT: ld1h { z0.h }, p0/z, [x8, x9, lsl #1]
48+
; CHECK-NEXT: ret
49+
entry:
50+
%0 = tail call i64 @llvm.vscale.i64()
51+
%1 = shl nuw nsw i64 %0, 3
52+
%add.ptr = getelementptr inbounds i16, ptr %b, i64 %1
53+
%add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 8
54+
%2 = load <vscale x 8 x i16>, ptr %add.ptr1, align 16
55+
ret <vscale x 8 x i16> %2
56+
}
57+
58+
define <vscale x 8 x i16> @i16_8s_1v(ptr %b) {
59+
; CHECK-LABEL: i16_8s_1v:
60+
; CHECK: // %bb.0: // %entry
61+
; CHECK-NEXT: rdvl x8, #1
62+
; CHECK-NEXT: ptrue p0.h
63+
; CHECK-NEXT: mov x9, #4 // =0x4
64+
; CHECK-NEXT: add x8, x0, x8
65+
; CHECK-NEXT: ld1h { z0.h }, p0/z, [x8, x9, lsl #1]
66+
; CHECK-NEXT: ret
67+
entry:
68+
%add.ptr = getelementptr inbounds i8, ptr %b, i64 8
69+
%0 = tail call i64 @llvm.vscale.i64()
70+
%1 = shl nuw nsw i64 %0, 3
71+
%add.ptr1 = getelementptr inbounds i16, ptr %add.ptr, i64 %1
72+
%2 = load <vscale x 8 x i16>, ptr %add.ptr1, align 16
73+
ret <vscale x 8 x i16> %2
74+
}
75+
76+
define <vscale x 8 x i16> @i16_2v_8s(ptr %b) {
77+
; CHECK-LABEL: i16_2v_8s:
78+
; CHECK: // %bb.0: // %entry
79+
; CHECK-NEXT: rdvl x8, #2
80+
; CHECK-NEXT: ptrue p0.h
81+
; CHECK-NEXT: mov x9, #4 // =0x4
82+
; CHECK-NEXT: add x8, x0, x8
83+
; CHECK-NEXT: ld1h { z0.h }, p0/z, [x8, x9, lsl #1]
84+
; CHECK-NEXT: ret
85+
entry:
86+
%0 = tail call i64 @llvm.vscale.i64()
87+
%1 = shl nuw nsw i64 %0, 4
88+
%add.ptr = getelementptr inbounds i16, ptr %b, i64 %1
89+
%add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 8
90+
%2 = load <vscale x 8 x i16>, ptr %add.ptr1, align 16
91+
ret <vscale x 8 x i16> %2
92+
}
93+
94+
define <vscale x 8 x i16> @i16_8s_2v(ptr %b) {
95+
; CHECK-LABEL: i16_8s_2v:
96+
; CHECK: // %bb.0: // %entry
97+
; CHECK-NEXT: rdvl x8, #2
98+
; CHECK-NEXT: ptrue p0.h
99+
; CHECK-NEXT: mov x9, #4 // =0x4
100+
; CHECK-NEXT: add x8, x0, x8
101+
; CHECK-NEXT: ld1h { z0.h }, p0/z, [x8, x9, lsl #1]
102+
; CHECK-NEXT: ret
103+
entry:
104+
%add.ptr = getelementptr inbounds i8, ptr %b, i64 8
105+
%0 = tail call i64 @llvm.vscale.i64()
106+
%1 = shl nuw nsw i64 %0, 4
107+
%add.ptr1 = getelementptr inbounds i16, ptr %add.ptr, i64 %1
108+
%2 = load <vscale x 8 x i16>, ptr %add.ptr1, align 16
109+
ret <vscale x 8 x i16> %2
110+
}
111+
112+
define <vscale x 4 x i32> @i32_1v_16s(ptr %b) {
113+
; CHECK-LABEL: i32_1v_16s:
114+
; CHECK: // %bb.0: // %entry
115+
; CHECK-NEXT: rdvl x8, #1
116+
; CHECK-NEXT: ptrue p0.s
117+
; CHECK-NEXT: mov x9, #4 // =0x4
118+
; CHECK-NEXT: add x8, x0, x8
119+
; CHECK-NEXT: ld1w { z0.s }, p0/z, [x8, x9, lsl #2]
120+
; CHECK-NEXT: ret
121+
entry:
122+
%0 = tail call i64 @llvm.vscale.i64()
123+
%1 = shl nuw nsw i64 %0, 2
124+
%add.ptr = getelementptr inbounds i32, ptr %b, i64 %1
125+
%add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 16
126+
%2 = load <vscale x 4 x i32>, ptr %add.ptr1, align 16
127+
ret <vscale x 4 x i32> %2
128+
}
129+
130+
define <vscale x 4 x i32> @i32_16s_2v(ptr %b) {
131+
; CHECK-LABEL: i32_16s_2v:
132+
; CHECK: // %bb.0: // %entry
133+
; CHECK-NEXT: rdvl x8, #1
134+
; CHECK-NEXT: ptrue p0.s
135+
; CHECK-NEXT: mov x9, #4 // =0x4
136+
; CHECK-NEXT: add x8, x0, x8
137+
; CHECK-NEXT: ld1w { z0.s }, p0/z, [x8, x9, lsl #2]
138+
; CHECK-NEXT: ret
139+
entry:
140+
%add.ptr = getelementptr inbounds i8, ptr %b, i64 16
141+
%0 = tail call i64 @llvm.vscale.i64()
142+
%1 = shl nuw nsw i64 %0, 2
143+
%add.ptr1 = getelementptr inbounds i32, ptr %add.ptr, i64 %1
144+
%2 = load <vscale x 4 x i32>, ptr %add.ptr1, align 16
145+
ret <vscale x 4 x i32> %2
146+
}
147+
148+
define <vscale x 2 x i64> @i64_1v_32s(ptr %b) {
149+
; CHECK-LABEL: i64_1v_32s:
150+
; CHECK: // %bb.0: // %entry
151+
; CHECK-NEXT: rdvl x8, #1
152+
; CHECK-NEXT: ptrue p0.d
153+
; CHECK-NEXT: mov x9, #4 // =0x4
154+
; CHECK-NEXT: add x8, x0, x8
155+
; CHECK-NEXT: ld1d { z0.d }, p0/z, [x8, x9, lsl #3]
156+
; CHECK-NEXT: ret
157+
entry:
158+
%0 = tail call i64 @llvm.vscale.i64()
159+
%1 = shl nuw nsw i64 %0, 1
160+
%add.ptr = getelementptr inbounds i64, ptr %b, i64 %1
161+
%add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i64 32
162+
%2 = load <vscale x 2 x i64>, ptr %add.ptr1, align 16
163+
ret <vscale x 2 x i64> %2
164+
}
165+
166+
define <vscale x 2 x i64> @i64_32s_2v(ptr %b) {
167+
; CHECK-LABEL: i64_32s_2v:
168+
; CHECK: // %bb.0: // %entry
169+
; CHECK-NEXT: rdvl x8, #1
170+
; CHECK-NEXT: ptrue p0.d
171+
; CHECK-NEXT: mov x9, #4 // =0x4
172+
; CHECK-NEXT: add x8, x0, x8
173+
; CHECK-NEXT: ld1d { z0.d }, p0/z, [x8, x9, lsl #3]
174+
; CHECK-NEXT: ret
175+
entry:
176+
%add.ptr = getelementptr inbounds i8, ptr %b, i64 32
177+
%0 = tail call i64 @llvm.vscale.i64()
178+
%1 = shl nuw nsw i64 %0, 1
179+
%add.ptr1 = getelementptr inbounds i64, ptr %add.ptr, i64 %1
180+
%2 = load <vscale x 2 x i64>, ptr %add.ptr1, align 16
181+
ret <vscale x 2 x i64> %2
182+
}
183+
184+
declare i64 @llvm.vscale.i64()

0 commit comments

Comments
 (0)