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