@@ -74,8 +74,8 @@ define <vscale x 2 x i8*> @scalable_of_fixed_2(<vscale x 2 x i8*> %base) {
74
74
ret <vscale x 2 x i8* > %d
75
75
}
76
76
77
- define <vscale x 2 x i8* > @scalable_of_fixed_3 (i8* %base , <vscale x 2 x i64 > %idx ) {
78
- ; CHECK-LABEL: scalable_of_fixed_3 :
77
+ define <vscale x 2 x i8* > @scalable_of_fixed_3_i8 (i8* %base , <vscale x 2 x i64 > %idx ) {
78
+ ; CHECK-LABEL: scalable_of_fixed_3_i8 :
79
79
; CHECK: // %bb.0:
80
80
; CHECK-NEXT: mov z1.d, x0
81
81
; CHECK-NEXT: add z0.d, z1.d, z0.d
@@ -84,8 +84,41 @@ define <vscale x 2 x i8*> @scalable_of_fixed_3(i8* %base, <vscale x 2 x i64> %id
84
84
ret <vscale x 2 x i8* > %d
85
85
}
86
86
87
- define <vscale x 2 x i8* > @scalable_of_fixed_4 (i8* %base , <vscale x 2 x i32 > %idx ) {
88
- ; CHECK-LABEL: scalable_of_fixed_4:
87
+ define <vscale x 2 x i16* > @scalable_of_fixed_3_i16 (i16* %base , <vscale x 2 x i64 > %idx ) {
88
+ ; CHECK-LABEL: scalable_of_fixed_3_i16:
89
+ ; CHECK: // %bb.0:
90
+ ; CHECK-NEXT: lsl z0.d, z0.d, #1
91
+ ; CHECK-NEXT: mov z1.d, x0
92
+ ; CHECK-NEXT: add z0.d, z1.d, z0.d
93
+ ; CHECK-NEXT: ret
94
+ %d = getelementptr i16 , i16* %base , <vscale x 2 x i64 > %idx
95
+ ret <vscale x 2 x i16* > %d
96
+ }
97
+
98
+ define <vscale x 2 x i32* > @scalable_of_fixed_3_i32 (i32* %base , <vscale x 2 x i64 > %idx ) {
99
+ ; CHECK-LABEL: scalable_of_fixed_3_i32:
100
+ ; CHECK: // %bb.0:
101
+ ; CHECK-NEXT: lsl z0.d, z0.d, #2
102
+ ; CHECK-NEXT: mov z1.d, x0
103
+ ; CHECK-NEXT: add z0.d, z1.d, z0.d
104
+ ; CHECK-NEXT: ret
105
+ %d = getelementptr i32 , i32* %base , <vscale x 2 x i64 > %idx
106
+ ret <vscale x 2 x i32* > %d
107
+ }
108
+
109
+ define <vscale x 2 x i64* > @scalable_of_fixed_3_i64 (i64* %base , <vscale x 2 x i64 > %idx ) {
110
+ ; CHECK-LABEL: scalable_of_fixed_3_i64:
111
+ ; CHECK: // %bb.0:
112
+ ; CHECK-NEXT: lsl z0.d, z0.d, #3
113
+ ; CHECK-NEXT: mov z1.d, x0
114
+ ; CHECK-NEXT: add z0.d, z1.d, z0.d
115
+ ; CHECK-NEXT: ret
116
+ %d = getelementptr i64 , i64* %base , <vscale x 2 x i64 > %idx
117
+ ret <vscale x 2 x i64* > %d
118
+ }
119
+
120
+ define <vscale x 2 x i8* > @scalable_of_fixed_4_i8 (i8* %base , <vscale x 2 x i32 > %idx ) {
121
+ ; CHECK-LABEL: scalable_of_fixed_4_i8:
89
122
; CHECK: // %bb.0:
90
123
; CHECK-NEXT: ptrue p0.d
91
124
; CHECK-NEXT: sxtw z0.d, p0/m, z0.d
@@ -96,6 +129,97 @@ define <vscale x 2 x i8*> @scalable_of_fixed_4(i8* %base, <vscale x 2 x i32> %id
96
129
ret <vscale x 2 x i8* > %d
97
130
}
98
131
132
+ define <vscale x 2 x i16* > @scalable_of_fixed_4_i16 (i16* %base , <vscale x 2 x i32 > %idx ) {
133
+ ; CHECK-LABEL: scalable_of_fixed_4_i16:
134
+ ; CHECK: // %bb.0:
135
+ ; CHECK-NEXT: ptrue p0.d
136
+ ; CHECK-NEXT: sxtw z0.d, p0/m, z0.d
137
+ ; CHECK-NEXT: lsl z0.d, z0.d, #1
138
+ ; CHECK-NEXT: mov z1.d, x0
139
+ ; CHECK-NEXT: add z0.d, z1.d, z0.d
140
+ ; CHECK-NEXT: ret
141
+ %d = getelementptr i16 , i16* %base , <vscale x 2 x i32 > %idx
142
+ ret <vscale x 2 x i16* > %d
143
+ }
144
+
145
+ define <vscale x 2 x i32* > @scalable_of_fixed_4_i32 (i32* %base , <vscale x 2 x i32 > %idx ) {
146
+ ; CHECK-LABEL: scalable_of_fixed_4_i32:
147
+ ; CHECK: // %bb.0:
148
+ ; CHECK-NEXT: ptrue p0.d
149
+ ; CHECK-NEXT: sxtw z0.d, p0/m, z0.d
150
+ ; CHECK-NEXT: lsl z0.d, z0.d, #2
151
+ ; CHECK-NEXT: mov z1.d, x0
152
+ ; CHECK-NEXT: add z0.d, z1.d, z0.d
153
+ ; CHECK-NEXT: ret
154
+ %d = getelementptr i32 , i32* %base , <vscale x 2 x i32 > %idx
155
+ ret <vscale x 2 x i32* > %d
156
+ }
157
+
158
+ define <vscale x 2 x i64* > @scalable_of_fixed_4_i64 (i64* %base , <vscale x 2 x i32 > %idx ) {
159
+ ; CHECK-LABEL: scalable_of_fixed_4_i64:
160
+ ; CHECK: // %bb.0:
161
+ ; CHECK-NEXT: ptrue p0.d
162
+ ; CHECK-NEXT: sxtw z0.d, p0/m, z0.d
163
+ ; CHECK-NEXT: lsl z0.d, z0.d, #3
164
+ ; CHECK-NEXT: mov z1.d, x0
165
+ ; CHECK-NEXT: add z0.d, z1.d, z0.d
166
+ ; CHECK-NEXT: ret
167
+ %d = getelementptr i64 , i64* %base , <vscale x 2 x i32 > %idx
168
+ ret <vscale x 2 x i64* > %d
169
+ }
170
+
171
+ define <vscale x 2 x i8* > @scalable_of_fixed_5 (i8* %base , <vscale x 2 x i32 > %idx ) {
172
+ ; CHECK-LABEL: scalable_of_fixed_5:
173
+ ; CHECK: // %bb.0:
174
+ ; CHECK-NEXT: mov z1.d, x0
175
+ ; CHECK-NEXT: and z0.d, z0.d, #0xffffffff
176
+ ; CHECK-NEXT: add z0.d, z1.d, z0.d
177
+ ; CHECK-NEXT: ret
178
+ %idxZext = zext <vscale x 2 x i32 > %idx to <vscale x 2 x i64 >
179
+ %d = getelementptr i8 , i8* %base , <vscale x 2 x i64 > %idxZext
180
+ ret <vscale x 2 x i8* > %d
181
+ }
182
+
183
+ define <vscale x 2 x i16* > @scalable_of_fixed_5_i16 (i16* %base , <vscale x 2 x i32 > %idx ) {
184
+ ; CHECK-LABEL: scalable_of_fixed_5_i16:
185
+ ; CHECK: // %bb.0:
186
+ ; CHECK-NEXT: and z0.d, z0.d, #0xffffffff
187
+ ; CHECK-NEXT: mov z1.d, x0
188
+ ; CHECK-NEXT: lsl z0.d, z0.d, #1
189
+ ; CHECK-NEXT: add z0.d, z1.d, z0.d
190
+ ; CHECK-NEXT: ret
191
+ %idxZext = zext <vscale x 2 x i32 > %idx to <vscale x 2 x i64 >
192
+ %d = getelementptr i16 , i16* %base , <vscale x 2 x i64 > %idxZext
193
+ ret <vscale x 2 x i16* > %d
194
+ }
195
+
196
+ define <vscale x 2 x i32* > @scalable_of_fixed_5_i32 (i32* %base , <vscale x 2 x i32 > %idx ) {
197
+ ; CHECK-LABEL: scalable_of_fixed_5_i32:
198
+ ; CHECK: // %bb.0:
199
+ ; CHECK-NEXT: and z0.d, z0.d, #0xffffffff
200
+ ; CHECK-NEXT: mov z1.d, x0
201
+ ; CHECK-NEXT: lsl z0.d, z0.d, #2
202
+ ; CHECK-NEXT: add z0.d, z1.d, z0.d
203
+ ; CHECK-NEXT: ret
204
+ %idxZext = zext <vscale x 2 x i32 > %idx to <vscale x 2 x i64 >
205
+ %d = getelementptr i32 , i32* %base , <vscale x 2 x i64 > %idxZext
206
+ ret <vscale x 2 x i32* > %d
207
+ }
208
+
209
+
210
+ define <vscale x 2 x i64* > @scalable_of_fixed_5_i64 (i64* %base , <vscale x 2 x i32 > %idx ) {
211
+ ; CHECK-LABEL: scalable_of_fixed_5_i64:
212
+ ; CHECK: // %bb.0:
213
+ ; CHECK-NEXT: and z0.d, z0.d, #0xffffffff
214
+ ; CHECK-NEXT: mov z1.d, x0
215
+ ; CHECK-NEXT: lsl z0.d, z0.d, #3
216
+ ; CHECK-NEXT: add z0.d, z1.d, z0.d
217
+ ; CHECK-NEXT: ret
218
+ %idxZext = zext <vscale x 2 x i32 > %idx to <vscale x 2 x i64 >
219
+ %d = getelementptr i64 , i64* %base , <vscale x 2 x i64 > %idxZext
220
+ ret <vscale x 2 x i64* > %d
221
+ }
222
+
99
223
define <vscale x 2 x <vscale x 2 x i64 >*> @scalable_of_scalable_1 (<vscale x 2 x i64 >* %base ) {
100
224
; CHECK-LABEL: scalable_of_scalable_1:
101
225
; CHECK: // %bb.0:
0 commit comments