@@ -26,14 +26,8 @@ uint8x8_t test_vset_lane_u8(uint8_t a, uint8x8_t b) {
26
26
// CIR: {{%.*}} = cir.vec.insert {{%.*}}, {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!s8i x 8>
27
27
28
28
// LLVM: {{.*}}test_vset_lane_u8(i8{{.*}}[[A:%.*]], <8 x i8>{{.*}}[[B:%.*]])
29
- // LLVM: [[A_ADR:%.*]] = alloca i8, i64 1, align 1
30
- // LLVM: [[B_ADR:%.*]] = alloca <8 x i8>, i64 1, align 8
31
- // LLVM: store i8 [[A]], ptr [[A_ADR]], align 1
32
- // LLVM: store <8 x i8> [[B]], ptr [[B_ADR]], align 8
33
- // LLVM: [[INTRN_ARG0:%.*]] = load i8, ptr [[A_ADR]], align 1
34
- // LLVM: [[INTRN_ARG1:%.*]] = load <8 x i8>, ptr [[B_ADR]], align 8
35
- // LLVM: [[INTRN_RES:%.*]] = insertelement <8 x i8> [[INTRN_ARG1]], i8 [[INTRN_ARG0]], i32 7
36
- // LLVM: ret <8 x i8> {{%.*}}
29
+ // LLVM: [[INTRN_RES:%.*]] = insertelement <8 x i8> [[B]], i8 [[A]], i32 7
30
+ // LLVM: ret <8 x i8> [[INTRN_RES]]
37
31
38
32
uint16x4_t test_vset_lane_u16 (uint16_t a , uint16x4_t b ) {
39
33
return vset_lane_u16 (a , b , 3 );
@@ -44,14 +38,8 @@ uint16x4_t test_vset_lane_u16(uint16_t a, uint16x4_t b) {
44
38
// CIR: {{%.*}} = cir.vec.insert {{%.*}}, {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!s16i x 4>
45
39
46
40
// LLVM: {{.*}}test_vset_lane_u16(i16{{.*}}[[A:%.*]], <4 x i16>{{.*}}[[B:%.*]])
47
- // LLVM: [[A_ADR:%.*]] = alloca i16, i64 1, align 2
48
- // LLVM: [[B_ADR:%.*]] = alloca <4 x i16>, i64 1, align 8
49
- // LLVM: store i16 [[A]], ptr [[A_ADR]], align 2
50
- // LLVM: store <4 x i16> [[B]], ptr [[B_ADR]], align 8
51
- // LLVM: [[INTRN_ARG0:%.*]] = load i16, ptr [[A_ADR]], align 2
52
- // LLVM: [[INTRN_ARG1:%.*]] = load <4 x i16>, ptr [[B_ADR]], align 8
53
- // LLVM: [[INTRN_RES:%.*]] = insertelement <4 x i16> [[INTRN_ARG1]], i16 [[INTRN_ARG0]], i32 3
54
- // LLVM: ret <4 x i16> {{%.*}}
41
+ // LLVM: [[INTRN_RES:%.*]] = insertelement <4 x i16> [[B]], i16 [[A]], i32 3
42
+ // LLVM: ret <4 x i16> [[INTRN_RES]]
55
43
56
44
uint32x2_t test_vset_lane_u32 (uint32_t a , uint32x2_t b ) {
57
45
return vset_lane_u32 (a , b , 1 );
@@ -62,15 +50,8 @@ uint32x2_t test_vset_lane_u32(uint32_t a, uint32x2_t b) {
62
50
// CIR: {{%.*}} = cir.vec.insert {{%.*}}, {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!s32i x 2>
63
51
64
52
// LLVM: {{.*}}test_vset_lane_u32(i32{{.*}}[[A:%.*]], <2 x i32>{{.*}}[[B:%.*]])
65
- // LLVM: [[A_ADR:%.*]] = alloca i32, i64 1, align 4
66
- // LLVM: [[B_ADR:%.*]] = alloca <2 x i32>, i64 1, align 8
67
- // LLVM: store i32 [[A]], ptr [[A_ADR]], align 4
68
- // LLVM: store <2 x i32> [[B]], ptr [[B_ADR]], align 8
69
- // LLVM: [[INTRN_ARG0:%.*]] = load i32, ptr [[A_ADR]], align 4
70
- // LLVM: [[INTRN_ARG1:%.*]] = load <2 x i32>, ptr [[B_ADR]], align 8
71
- // LLVM: [[INTRN_RES:%.*]] = insertelement <2 x i32> [[INTRN_ARG1]], i32 [[INTRN_ARG0]], i32 1
72
- // LLVM: ret <2 x i32> {{%.*}}
73
-
53
+ // LLVM: [[INTRN_RES:%.*]] = insertelement <2 x i32> [[B]], i32 [[A]], i32 1
54
+ // LLVM: ret <2 x i32> [[INTRN_RES]]
74
55
75
56
uint64x1_t test_vset_lane_u64 (uint64_t a , uint64x1_t b ) {
76
57
return vset_lane_u64 (a , b , 0 );
@@ -81,14 +62,8 @@ uint64x1_t test_vset_lane_u64(uint64_t a, uint64x1_t b) {
81
62
// CIR: {{%.*}} = cir.vec.insert {{%.*}}, {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!s64i x 1>
82
63
83
64
// LLVM: {{.*}}test_vset_lane_u64(i64{{.*}}[[A:%.*]], <1 x i64>{{.*}}[[B:%.*]])
84
- // LLVM: [[A_ADR:%.*]] = alloca i64, i64 1, align 8
85
- // LLVM: [[B_ADR:%.*]] = alloca <1 x i64>, i64 1, align 8
86
- // LLVM: store i64 [[A]], ptr [[A_ADR]], align 8
87
- // LLVM: store <1 x i64> [[B]], ptr [[B_ADR]], align 8
88
- // LLVM: [[INTRN_ARG0:%.*]] = load i64, ptr [[A_ADR]], align 8
89
- // LLVM: [[INTRN_ARG1:%.*]] = load <1 x i64>, ptr [[B_ADR]], align 8
90
- // LLVM: [[INTRN_RES:%.*]] = insertelement <1 x i64> [[INTRN_ARG1]], i64 [[INTRN_ARG0]], i32 0
91
- // LLVM: ret <1 x i64> {{%.*}}
65
+ // LLVM: [[INTRN_RES:%.*]] = insertelement <1 x i64> [[B]], i64 [[A]], i32 0
66
+ // LLVM: ret <1 x i64> [[INTRN_RES]]
92
67
93
68
float32x2_t test_vset_lane_f32 (float32_t a , float32x2_t b ) {
94
69
return vset_lane_f32 (a , b , 1 );
@@ -99,14 +74,8 @@ float32x2_t test_vset_lane_f32(float32_t a, float32x2_t b) {
99
74
// CIR: {{%.*}} = cir.vec.insert {{%.*}}, {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!cir.float x 2>
100
75
101
76
// LLVM: {{.*}}test_vset_lane_f32(float{{.*}}[[A:%.*]], <2 x float>{{.*}}[[B:%.*]])
102
- // LLVM: [[A_ADR:%.*]] = alloca float, i64 1, align 4
103
- // LLVM: [[B_ADR:%.*]] = alloca <2 x float>, i64 1, align 8
104
- // LLVM: store float [[A]], ptr [[A_ADR]], align 4
105
- // LLVM: store <2 x float> [[B]], ptr [[B_ADR]], align 8
106
- // LLVM: [[INTRN_ARG0:%.*]] = load float, ptr [[A_ADR]], align 4
107
- // LLVM: [[INTRN_ARG1:%.*]] = load <2 x float>, ptr [[B_ADR]], align 8
108
- // LLVM: [[INTRN_RES:%.*]] = insertelement <2 x float> [[INTRN_ARG1]], float [[INTRN_ARG0]], i32 1
109
- // LLVM: ret <2 x float> {{%.*}}
77
+ // LLVM: [[INTRN_RES:%.*]] = insertelement <2 x float> [[B]], float [[A]], i32 1
78
+ // LLVM: ret <2 x float> [[INTRN_RES]]
110
79
111
80
uint8x16_t test_vsetq_lane_u8 (uint8_t a , uint8x16_t b ) {
112
81
return vsetq_lane_u8 (a , b , 15 );
@@ -117,14 +86,8 @@ uint8x16_t test_vsetq_lane_u8(uint8_t a, uint8x16_t b) {
117
86
// CIR: {{%.*}} = cir.vec.insert {{%.*}}, {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!s8i x 16>
118
87
119
88
// LLVM: {{.*}}test_vsetq_lane_u8(i8{{.*}}[[A:%.*]], <16 x i8>{{.*}}[[B:%.*]])
120
- // LLVM: [[A_ADR:%.*]] = alloca i8, i64 1, align 1
121
- // LLVM: [[B_ADR:%.*]] = alloca <16 x i8>, i64 1, align 16
122
- // LLVM: store i8 [[A]], ptr [[A_ADR]], align 1
123
- // LLVM: store <16 x i8> [[B]], ptr [[B_ADR]], align 16
124
- // LLVM: [[INTRN_ARG0:%.*]] = load i8, ptr [[A_ADR]], align 1
125
- // LLVM: [[INTRN_ARG1:%.*]] = load <16 x i8>, ptr [[B_ADR]], align 16
126
- // LLVM: [[INTRN_RES:%.*]] = insertelement <16 x i8> [[INTRN_ARG1]], i8 [[INTRN_ARG0]], i32 15
127
- // LLVM: ret <16 x i8> {{%.*}}
89
+ // LLVM: [[INTRN_RES:%.*]] = insertelement <16 x i8> [[B]], i8 [[A]], i32 15
90
+ // LLVM: ret <16 x i8> [[INTRN_RES]]
128
91
129
92
uint16x8_t test_vsetq_lane_u16 (uint16_t a , uint16x8_t b ) {
130
93
return vsetq_lane_u16 (a , b , 7 );
@@ -135,14 +98,8 @@ uint16x8_t test_vsetq_lane_u16(uint16_t a, uint16x8_t b) {
135
98
// CIR: {{%.*}} = cir.vec.insert {{%.*}}, {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!s16i x 8>
136
99
137
100
// LLVM: {{.*}}test_vsetq_lane_u16(i16{{.*}}[[A:%.*]], <8 x i16>{{.*}}[[B:%.*]])
138
- // LLVM: [[A_ADR:%.*]] = alloca i16, i64 1, align 2
139
- // LLVM: [[B_ADR:%.*]] = alloca <8 x i16>, i64 1, align 16
140
- // LLVM: store i16 [[A]], ptr [[A_ADR]], align 2
141
- // LLVM: store <8 x i16> [[B]], ptr [[B_ADR]], align 16
142
- // LLVM: [[INTRN_ARG0:%.*]] = load i16, ptr [[A_ADR]], align 2
143
- // LLVM: [[INTRN_ARG1:%.*]] = load <8 x i16>, ptr [[B_ADR]], align 16
144
- // LLVM: [[INTRN_RES:%.*]] = insertelement <8 x i16> [[INTRN_ARG1]], i16 [[INTRN_ARG0]], i32 7
145
- // LLVM: ret <8 x i16> {{%.*}}
101
+ // LLVM: [[INTRN_RES:%.*]] = insertelement <8 x i16> [[B]], i16 [[A]], i32 7
102
+ // LLVM: ret <8 x i16> [[INTRN_RES]]
146
103
147
104
uint32x4_t test_vsetq_lane_u32 (uint32_t a , uint32x4_t b ) {
148
105
return vsetq_lane_u32 (a , b , 3 );
@@ -153,14 +110,8 @@ uint32x4_t test_vsetq_lane_u32(uint32_t a, uint32x4_t b) {
153
110
// CIR: {{%.*}} = cir.vec.insert {{%.*}}, {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!s32i x 4>
154
111
155
112
// LLVM: {{.*}}test_vsetq_lane_u32(i32{{.*}}[[A:%.*]], <4 x i32>{{.*}}[[B:%.*]])
156
- // LLVM: [[A_ADR:%.*]] = alloca i32, i64 1, align 4
157
- // LLVM: [[B_ADR:%.*]] = alloca <4 x i32>, i64 1, align 16
158
- // LLVM: store i32 [[A]], ptr [[A_ADR]], align 4
159
- // LLVM: store <4 x i32> [[B]], ptr [[B_ADR]], align 16
160
- // LLVM: [[INTRN_ARG0:%.*]] = load i32, ptr [[A_ADR]], align 4
161
- // LLVM: [[INTRN_ARG1:%.*]] = load <4 x i32>, ptr [[B_ADR]], align 16
162
- // LLVM: [[INTRN_RES:%.*]] = insertelement <4 x i32> [[INTRN_ARG1]], i32 [[INTRN_ARG0]], i32 3
163
- // LLVM: ret <4 x i32> {{%.*}}
113
+ // LLVM: [[INTRN_RES:%.*]] = insertelement <4 x i32> [[B]], i32 [[A]], i32 3
114
+ // LLVM: ret <4 x i32> [[INTRN_RES]]
164
115
165
116
int64x2_t test_vsetq_lane_s64 (int64_t a , int64x2_t b ) {
166
117
return vsetq_lane_s64 (a , b , 1 );
@@ -171,14 +122,8 @@ int64x2_t test_vsetq_lane_s64(int64_t a, int64x2_t b) {
171
122
// CIR: {{%.*}} = cir.vec.insert {{%.*}}, {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!s64i x 2>
172
123
173
124
// LLVM: {{.*}}test_vsetq_lane_s64(i64{{.*}}[[A:%.*]], <2 x i64>{{.*}}[[B:%.*]])
174
- // LLVM: [[A_ADR:%.*]] = alloca i64, i64 1, align 8
175
- // LLVM: [[B_ADR:%.*]] = alloca <2 x i64>, i64 1, align 16
176
- // LLVM: store i64 [[A]], ptr [[A_ADR]], align 8
177
- // LLVM: store <2 x i64> [[B]], ptr [[B_ADR]], align 16
178
- // LLVM: [[INTRN_ARG0:%.*]] = load i64, ptr [[A_ADR]], align 8
179
- // LLVM: [[INTRN_ARG1:%.*]] = load <2 x i64>, ptr [[B_ADR]], align 16
180
- // LLVM: [[INTRN_RES:%.*]] = insertelement <2 x i64> [[INTRN_ARG1]], i64 [[INTRN_ARG0]], i32 1
181
- // LLVM: ret <2 x i64> {{%.*}}
125
+ // LLVM: [[INTRN_RES:%.*]] = insertelement <2 x i64> [[B]], i64 [[A]], i32 1
126
+ // LLVM: ret <2 x i64> [[INTRN_RES]]
182
127
183
128
float32x4_t test_vsetq_lane_f32 (float32_t a , float32x4_t b ) {
184
129
return vsetq_lane_f32 (a , b , 3 );
@@ -189,14 +134,8 @@ float32x4_t test_vsetq_lane_f32(float32_t a, float32x4_t b) {
189
134
// CIR: {{%.*}} = cir.vec.insert {{%.*}}, {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!cir.float x 4>
190
135
191
136
// LLVM: {{.*}}test_vsetq_lane_f32(float{{.*}}[[A:%.*]], <4 x float>{{.*}}[[B:%.*]])
192
- // LLVM: [[A_ADR:%.*]] = alloca float, i64 1, align 4
193
- // LLVM: [[B_ADR:%.*]] = alloca <4 x float>, i64 1, align 16
194
- // LLVM: store float [[A]], ptr [[A_ADR]], align 4
195
- // LLVM: store <4 x float> [[B]], ptr [[B_ADR]], align 16
196
- // LLVM: [[INTRN_ARG0:%.*]] = load float, ptr [[A_ADR]], align 4
197
- // LLVM: [[INTRN_ARG1:%.*]] = load <4 x float>, ptr [[B_ADR]], align 16
198
- // LLVM: [[INTRN_RES:%.*]] = insertelement <4 x float> [[INTRN_ARG1]], float [[INTRN_ARG0]], i32 3
199
- // LLVM: ret <4 x float> {{%.*}}
137
+ // LLVM: [[INTRN_RES:%.*]] = insertelement <4 x float> [[B]], float [[A]], i32 3
138
+ // LLVM: ret <4 x float> [[INTRN_RES]]
200
139
201
140
uint8_t test_vget_lane_u8 (uint8x8_t a ) {
202
141
return vget_lane_u8 (a , 7 );
@@ -207,11 +146,8 @@ uint8_t test_vget_lane_u8(uint8x8_t a) {
207
146
// CIR: {{%.*}} = cir.vec.extract {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!u8i x 8>
208
147
209
148
// LLVM: {{.*}}test_vget_lane_u8(<8 x i8>{{.*}}[[ARG:%.*]])
210
- // LLVM: [[ARG_SAVE:%.*]] = alloca <8 x i8>, i64 1, align 8
211
- // LLVM: store <8 x i8> [[ARG]], ptr [[ARG_SAVE]], align 8
212
- // LLVM: [[INTRN_ARG:%.*]] = load <8 x i8>, ptr [[ARG_SAVE]], align 8
213
- // LLVM: {{%.*}} = extractelement <8 x i8> [[INTRN_ARG]], i32 7
214
- // LLVM: ret i8 {{%.*}}
149
+ // LLVM: [[RES:%.*]] = extractelement <8 x i8> [[ARG]], i32 7
150
+ // LLVM: ret i8 [[RES]]
215
151
216
152
uint8_t test_vgetq_lane_u8 (uint8x16_t a ) {
217
153
return vgetq_lane_u8 (a , 15 );
@@ -222,11 +158,8 @@ uint8_t test_vgetq_lane_u8(uint8x16_t a) {
222
158
// CIR: {{%.*}} = cir.vec.extract {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!u8i x 16>
223
159
224
160
// LLVM: {{.*}}test_vgetq_lane_u8(<16 x i8>{{.*}}[[ARG:%.*]])
225
- // LLVM: [[ARG_SAVE:%.*]] = alloca <16 x i8>, i64 1, align 16
226
- // LLVM: store <16 x i8> [[ARG]], ptr [[ARG_SAVE]], align 16
227
- // LLVM: [[INTRN_ARG:%.*]] = load <16 x i8>, ptr [[ARG_SAVE]], align 16
228
- // LLVM: {{%.*}} = extractelement <16 x i8> [[INTRN_ARG]], i32 15
229
- // LLVM: ret i8 {{%.*}}
161
+ // LLVM: [[RES:%.*]] = extractelement <16 x i8> [[ARG]], i32 15
162
+ // LLVM: ret i8 [[RES]]
230
163
231
164
uint16_t test_vget_lane_u16 (uint16x4_t a ) {
232
165
return vget_lane_u16 (a , 3 );
@@ -237,11 +170,8 @@ uint16_t test_vget_lane_u16(uint16x4_t a) {
237
170
// CIR: {{%.*}} = cir.vec.extract {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!u16i x 4>
238
171
239
172
// LLVM: {{.*}}test_vget_lane_u16(<4 x i16>{{.*}}[[ARG:%.*]])
240
- // LLVM: [[ARG_SAVE:%.*]] = alloca <4 x i16>, i64 1, align 8
241
- // LLVM: store <4 x i16> [[ARG]], ptr [[ARG_SAVE]], align 8
242
- // LLVM: [[INTRN_ARG:%.*]] = load <4 x i16>, ptr [[ARG_SAVE]], align 8
243
- // LLVM: {{%.*}} = extractelement <4 x i16> [[INTRN_ARG]], i32 3
244
- // LLVM: ret i16 {{%.*}}
173
+ // LLVM: [[RES:%.*]] = extractelement <4 x i16> [[ARG]], i32 3
174
+ // LLVM: ret i16 [[RES]]
245
175
246
176
uint16_t test_vgetq_lane_u16 (uint16x8_t a ) {
247
177
return vgetq_lane_u16 (a , 7 );
@@ -252,11 +182,8 @@ uint16_t test_vgetq_lane_u16(uint16x8_t a) {
252
182
// CIR: {{%.*}} = cir.vec.extract {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!u16i x 8>
253
183
254
184
// LLVM: {{.*}}test_vgetq_lane_u16(<8 x i16>{{.*}}[[ARG:%.*]])
255
- // LLVM: [[ARG_SAVE:%.*]] = alloca <8 x i16>, i64 1, align 16
256
- // LLVM: store <8 x i16> [[ARG]], ptr [[ARG_SAVE]], align 16
257
- // LLVM: [[INTRN_ARG:%.*]] = load <8 x i16>, ptr [[ARG_SAVE]], align 16
258
- // LLVM: {{%.*}} = extractelement <8 x i16> [[INTRN_ARG]], i32 7
259
- // LLVM: ret i16 {{%.*}}
185
+ // LLVM: [[RES:%.*]] = extractelement <8 x i16> [[ARG]], i32 7
186
+ // LLVM: ret i16 [[RES]]
260
187
261
188
uint32_t test_vget_lane_u32 (uint32x2_t a ) {
262
189
return vget_lane_u32 (a , 1 );
@@ -267,11 +194,8 @@ uint32_t test_vget_lane_u32(uint32x2_t a) {
267
194
// CIR: {{%.*}} = cir.vec.extract {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!u32i x 2>
268
195
269
196
// LLVM: {{.*}}test_vget_lane_u32(<2 x i32>{{.*}}[[ARG:%.*]])
270
- // LLVM: [[ARG_SAVE:%.*]] = alloca <2 x i32>, i64 1, align 8
271
- // LLVM: store <2 x i32> [[ARG]], ptr [[ARG_SAVE]], align 8
272
- // LLVM: [[INTRN_ARG:%.*]] = load <2 x i32>, ptr [[ARG_SAVE]], align 8
273
- // LLVM: {{%.*}} = extractelement <2 x i32> [[INTRN_ARG]], i32 1
274
- // LLVM: ret i32 {{%.*}}
197
+ // LLVM: [[RES:%.*]] = extractelement <2 x i32> [[ARG]], i32 1
198
+ // LLVM: ret i32 [[RES]]
275
199
276
200
uint32_t test_vgetq_lane_u32 (uint32x4_t a ) {
277
201
return vgetq_lane_u32 (a , 3 );
@@ -282,11 +206,8 @@ uint32_t test_vgetq_lane_u32(uint32x4_t a) {
282
206
// CIR: {{%.*}} = cir.vec.extract {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!u32i x 4>
283
207
284
208
// LLVM: {{.*}}test_vgetq_lane_u32(<4 x i32>{{.*}}[[ARG:%.*]])
285
- // LLVM: [[ARG_SAVE:%.*]] = alloca <4 x i32>, i64 1, align 16
286
- // LLVM: store <4 x i32> [[ARG]], ptr [[ARG_SAVE]], align 16
287
- // LLVM: [[INTRN_ARG:%.*]] = load <4 x i32>, ptr [[ARG_SAVE]], align 16
288
- // LLVM: {{%.*}} = extractelement <4 x i32> [[INTRN_ARG]], i32 3
289
- // LLVM: ret i32 {{%.*}}
209
+ // LLVM: [[RES:%.*]] = extractelement <4 x i32> [[ARG]], i32 3
210
+ // LLVM: ret i32 [[RES]]
290
211
291
212
uint64_t test_vget_lane_u64 (uint64x1_t a ) {
292
213
return vget_lane_u64 (a , 0 );
@@ -296,12 +217,9 @@ uint64_t test_vget_lane_u64(uint64x1_t a) {
296
217
// CIR: [[IDX:%.*]] = cir.const #cir.int<0> : !s32i
297
218
// CIR: {{%.*}} = cir.vec.extract {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!u64i x 1>
298
219
299
- // LLVM: {{.*}}est_vget_lane_u64(<1 x i64>{{.*}}[[ARG:%.*]])
300
- // LLVM: [[ARG_SAVE:%.*]] = alloca <1 x i64>, i64 1, align 8
301
- // LLVM: store <1 x i64> [[ARG]], ptr [[ARG_SAVE]], align 8
302
- // LLVM: [[INTRN_ARG:%.*]] = load <1 x i64>, ptr [[ARG_SAVE]], align 8
303
- // LLVM: {{%.*}} = extractelement <1 x i64> [[INTRN_ARG]], i32 0
304
- // LLVM: ret i64 {{%.*}}
220
+ // LLVM: {{.*}}test_vget_lane_u64(<1 x i64>{{.*}}[[ARG:%.*]])
221
+ // LLVM: [[RES:%.*]] = extractelement <1 x i64> [[ARG]], i32 0
222
+ // LLVM: ret i64 [[RES]]
305
223
306
224
uint64_t test_vgetq_lane_u64 (uint64x2_t a ) {
307
225
return vgetq_lane_u64 (a , 1 );
@@ -312,11 +230,8 @@ uint64_t test_vgetq_lane_u64(uint64x2_t a) {
312
230
// CIR: {{%.*}} = cir.vec.extract {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!u64i x 2>
313
231
314
232
// LLVM: {{.*}}test_vgetq_lane_u64(<2 x i64>{{.*}}[[ARG:%.*]])
315
- // LLVM: [[ARG_SAVE:%.*]] = alloca <2 x i64>, i64 1, align 16
316
- // LLVM: store <2 x i64> [[ARG]], ptr [[ARG_SAVE]], align 16
317
- // LLVM: [[INTRN_ARG:%.*]] = load <2 x i64>, ptr [[ARG_SAVE]], align 16
318
- // LLVM: {{%.*}} = extractelement <2 x i64> [[INTRN_ARG]], i32 1
319
- // LLVM: ret i64 {{%.*}}
233
+ // LLVM: [[RES:%.*]] = extractelement <2 x i64> [[ARG]], i32 1
234
+ // LLVM: ret i64 [[RES]]
320
235
321
236
float32_t test_vget_lane_f32 (float32x2_t a ) {
322
237
return vget_lane_f32 (a , 1 );
@@ -327,11 +242,8 @@ float32_t test_vget_lane_f32(float32x2_t a) {
327
242
// CIR: {{%.*}} = cir.vec.extract {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!cir.float x 2>
328
243
329
244
// LLVM: {{.*}}test_vget_lane_f32(<2 x float>{{.*}}[[ARG:%.*]])
330
- // LLVM: [[ARG_SAVE:%.*]] = alloca <2 x float>, i64 1, align 8
331
- // LLVM: store <2 x float> [[ARG]], ptr [[ARG_SAVE]], align 8
332
- // LLVM: [[INTRN_ARG:%.*]] = load <2 x float>, ptr [[ARG_SAVE]], align 8
333
- // LLVM: {{%.*}} = extractelement <2 x float> [[INTRN_ARG]], i32 1
334
- // LLVM: ret float {{%.*}}
245
+ // LLVM: [[RES:%.*]] = extractelement <2 x float> [[ARG]], i32 1
246
+ // LLVM: ret float [[RES]]
335
247
336
248
float64_t test_vget_lane_f64 (float64x1_t a ) {
337
249
return vget_lane_f64 (a , 0 );
@@ -342,11 +254,8 @@ float64_t test_vget_lane_f64(float64x1_t a) {
342
254
// CIR: {{%.*}} = cir.vec.extract {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!cir.double x 1>
343
255
344
256
// LLVM: {{.*}}test_vget_lane_f64(<1 x double>{{.*}}[[ARG:%.*]])
345
- // LLVM: [[ARG_SAVE:%.*]] = alloca <1 x double>, i64 1, align 8
346
- // LLVM: store <1 x double> [[ARG]], ptr [[ARG_SAVE]], align 8
347
- // LLVM: [[INTRN_ARG:%.*]] = load <1 x double>, ptr [[ARG_SAVE]], align 8
348
- // LLVM: {{%.*}} = extractelement <1 x double> [[INTRN_ARG]], i32 0
349
- // LLVM: ret double {{%.*}}
257
+ // LLVM: [[RES:%.*]] = extractelement <1 x double> [[ARG]], i32 0
258
+ // LLVM: ret double [[RES]]
350
259
351
260
float32_t test_vgetq_lane_f32 (float32x4_t a ) {
352
261
return vgetq_lane_f32 (a , 3 );
@@ -357,11 +266,8 @@ float32_t test_vgetq_lane_f32(float32x4_t a) {
357
266
// CIR: {{%.*}} = cir.vec.extract {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!cir.float x 4>
358
267
359
268
// LLVM: {{.*}}test_vgetq_lane_f32(<4 x float>{{.*}}[[ARG:%.*]])
360
- // LLVM: [[ARG_SAVE:%.*]] = alloca <4 x float>, i64 1, align 16
361
- // LLVM: store <4 x float> [[ARG]], ptr [[ARG_SAVE]], align 16
362
- // LLVM: [[INTRN_ARG:%.*]] = load <4 x float>, ptr [[ARG_SAVE]], align 16
363
- // LLVM: {{%.*}} = extractelement <4 x float> [[INTRN_ARG]], i32 3
364
- // LLVM: ret float {{%.*}}
269
+ // LLVM: [[RES:%.*]] = extractelement <4 x float> [[ARG]], i32 3
270
+ // LLVM: ret float [[RES]]
365
271
366
272
float64_t test_vgetq_lane_f64 (float64x2_t a ) {
367
273
return vgetq_lane_f64 (a , 1 );
@@ -372,11 +278,8 @@ float64_t test_vgetq_lane_f64(float64x2_t a) {
372
278
// CIR: {{%.*}} = cir.vec.extract {{%.*}}[[[IDX]] : !s32i] : !cir.vector<!cir.double x 2>
373
279
374
280
// LLVM: {{.*}}test_vgetq_lane_f64(<2 x double>{{.*}}[[ARG:%.*]])
375
- // LLVM: [[ARG_SAVE:%.*]] = alloca <2 x double>, i64 1, align 16
376
- // LLVM: store <2 x double> [[ARG]], ptr [[ARG_SAVE]], align 16
377
- // LLVM: [[INTRN_ARG:%.*]] = load <2 x double>, ptr [[ARG_SAVE]], align 16
378
- // LLVM: {{%.*}} = extractelement <2 x double> [[INTRN_ARG]], i32 1
379
- // LLVM: ret double {{%.*}}
281
+ // LLVM: [[RES:%.*]] = extractelement <2 x double> [[ARG]], i32 1
282
+ // LLVM: ret double [[RES]]
380
283
381
284
uint8x8x2_t test_vtrn_u8 (uint8x8_t a , uint8x8_t b ) {
382
285
return vtrn_u8 (a , b );
0 commit comments