@@ -13,7 +13,7 @@ int test_ldrex(char *addr, long long *addr64, float *addrfloat) {
13
13
// CHECK: [[INTRES:%.*]] = call i32 @llvm.arm.ldrex.p0i8(i8* %addr)
14
14
// CHECK: trunc i32 [[INTRES]] to i8
15
15
16
- // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i8(i8* %addr)
16
+ // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i8(i8* elementtype(i8) %addr)
17
17
// CHECK-ARM64: trunc i64 [[INTRES]] to i8
18
18
19
19
sum += __builtin_arm_ldrex ((short * )addr );
@@ -22,15 +22,15 @@ int test_ldrex(char *addr, long long *addr64, float *addrfloat) {
22
22
// CHECK: trunc i32 [[INTRES]] to i16
23
23
24
24
// CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16*
25
- // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i16(i16* [[ADDR16]])
25
+ // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i16(i16* elementtype(i16) [[ADDR16]])
26
26
// CHECK-ARM64: trunc i64 [[INTRES]] to i16
27
27
28
28
sum += __builtin_arm_ldrex ((int * )addr );
29
29
// CHECK: [[ADDR32:%.*]] = bitcast i8* %addr to i32*
30
30
// CHECK: call i32 @llvm.arm.ldrex.p0i32(i32* [[ADDR32]])
31
31
32
32
// CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32*
33
- // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i32(i32* [[ADDR32]])
33
+ // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i32(i32* elementtype(i32) [[ADDR32]])
34
34
// CHECK-ARM64: trunc i64 [[INTRES]] to i32
35
35
36
36
sum += __builtin_arm_ldrex ((long long * )addr );
@@ -39,21 +39,21 @@ int test_ldrex(char *addr, long long *addr64, float *addrfloat) {
39
39
// CHECK: call { i32, i32 } @llvm.arm.ldrexd(i8* [[TMP5]])
40
40
41
41
// CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64*
42
- // CHECK-ARM64: call i64 @llvm.aarch64.ldxr.p0i64(i64* [[ADDR64]])
42
+ // CHECK-ARM64: call i64 @llvm.aarch64.ldxr.p0i64(i64* elementtype(i64) [[ADDR64]])
43
43
44
44
sum += __builtin_arm_ldrex (addr64 );
45
45
// CHECK: [[ADDR64_AS8:%.*]] = bitcast i64* %addr64 to i8*
46
46
// CHECK: call { i32, i32 } @llvm.arm.ldrexd(i8* [[ADDR64_AS8]])
47
47
48
- // CHECK-ARM64: call i64 @llvm.aarch64.ldxr.p0i64(i64* %addr64)
48
+ // CHECK-ARM64: call i64 @llvm.aarch64.ldxr.p0i64(i64* elementtype(i64) %addr64)
49
49
50
50
sum += __builtin_arm_ldrex (addrfloat );
51
51
// CHECK: [[INTADDR:%.*]] = bitcast float* %addrfloat to i32*
52
52
// CHECK: [[INTRES:%.*]] = call i32 @llvm.arm.ldrex.p0i32(i32* [[INTADDR]])
53
53
// CHECK: bitcast i32 [[INTRES]] to float
54
54
55
55
// CHECK-ARM64: [[INTADDR:%.*]] = bitcast float* %addrfloat to i32*
56
- // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i32(i32* [[INTADDR]])
56
+ // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i32(i32* elementtype(i32) [[INTADDR]])
57
57
// CHECK-ARM64: [[TRUNCRES:%.*]] = trunc i64 [[INTRES]] to i32
58
58
// CHECK-ARM64: bitcast i32 [[TRUNCRES]] to float
59
59
@@ -71,7 +71,7 @@ int test_ldrex(char *addr, long long *addr64, float *addrfloat) {
71
71
72
72
// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double*
73
73
// CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64*
74
- // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i64(i64* [[TMP5]])
74
+ // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i64(i64* elementtype(i64) [[TMP5]])
75
75
// CHECK-ARM64: bitcast i64 [[INTRES]] to double
76
76
77
77
sum += * __builtin_arm_ldrex ((int * * )addr );
@@ -82,7 +82,7 @@ int test_ldrex(char *addr, long long *addr64, float *addrfloat) {
82
82
83
83
// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to i32**
84
84
// CHECK-ARM64: [[TMP5:%.*]] = bitcast i32** [[TMP4]] to i64*
85
- // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i64(i64* [[TMP5]])
85
+ // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i64(i64* elementtype(i64) [[TMP5]])
86
86
// CHECK-ARM64: inttoptr i64 [[INTRES]] to i32*
87
87
88
88
sum += __builtin_arm_ldrex ((struct Simple * * )addr )-> a ;
@@ -93,7 +93,7 @@ int test_ldrex(char *addr, long long *addr64, float *addrfloat) {
93
93
94
94
// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple**
95
95
// CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64*
96
- // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i64(i64* [[TMP5]])
96
+ // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i64(i64* elementtype(i64) [[TMP5]])
97
97
// CHECK-ARM64: inttoptr i64 [[INTRES]] to %struct.Simple*
98
98
return sum ;
99
99
}
@@ -106,7 +106,7 @@ int test_ldaex(char *addr, long long *addr64, float *addrfloat) {
106
106
// CHECK: [[INTRES:%.*]] = call i32 @llvm.arm.ldaex.p0i8(i8* %addr)
107
107
// CHECK: trunc i32 [[INTRES]] to i8
108
108
109
- // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i8(i8* %addr)
109
+ // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i8(i8* elementtype(i8) %addr)
110
110
// CHECK-ARM64: trunc i64 [[INTRES]] to i8
111
111
112
112
sum += __builtin_arm_ldaex ((short * )addr );
@@ -115,15 +115,15 @@ int test_ldaex(char *addr, long long *addr64, float *addrfloat) {
115
115
// CHECK: trunc i32 [[INTRES]] to i16
116
116
117
117
// CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16*
118
- // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i16(i16* [[ADDR16]])
118
+ // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i16(i16* elementtype(i16) [[ADDR16]])
119
119
// CHECK-ARM64: [[TRUNCRES:%.*]] = trunc i64 [[INTRES]] to i16
120
120
121
121
sum += __builtin_arm_ldaex ((int * )addr );
122
122
// CHECK: [[ADDR32:%.*]] = bitcast i8* %addr to i32*
123
123
// CHECK: call i32 @llvm.arm.ldaex.p0i32(i32* [[ADDR32]])
124
124
125
125
// CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32*
126
- // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i32(i32* [[ADDR32]])
126
+ // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i32(i32* elementtype(i32) [[ADDR32]])
127
127
// CHECK-ARM64: trunc i64 [[INTRES]] to i32
128
128
129
129
sum += __builtin_arm_ldaex ((long long * )addr );
@@ -132,21 +132,21 @@ int test_ldaex(char *addr, long long *addr64, float *addrfloat) {
132
132
// CHECK: call { i32, i32 } @llvm.arm.ldaexd(i8* [[TMP5]])
133
133
134
134
// CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64*
135
- // CHECK-ARM64: call i64 @llvm.aarch64.ldaxr.p0i64(i64* [[ADDR64]])
135
+ // CHECK-ARM64: call i64 @llvm.aarch64.ldaxr.p0i64(i64* elementtype(i64) [[ADDR64]])
136
136
137
137
sum += __builtin_arm_ldaex (addr64 );
138
138
// CHECK: [[ADDR64_AS8:%.*]] = bitcast i64* %addr64 to i8*
139
139
// CHECK: call { i32, i32 } @llvm.arm.ldaexd(i8* [[ADDR64_AS8]])
140
140
141
- // CHECK-ARM64: call i64 @llvm.aarch64.ldaxr.p0i64(i64* %addr64)
141
+ // CHECK-ARM64: call i64 @llvm.aarch64.ldaxr.p0i64(i64* elementtype(i64) %addr64)
142
142
143
143
sum += __builtin_arm_ldaex (addrfloat );
144
144
// CHECK: [[INTADDR:%.*]] = bitcast float* %addrfloat to i32*
145
145
// CHECK: [[INTRES:%.*]] = call i32 @llvm.arm.ldaex.p0i32(i32* [[INTADDR]])
146
146
// CHECK: bitcast i32 [[INTRES]] to float
147
147
148
148
// CHECK-ARM64: [[INTADDR:%.*]] = bitcast float* %addrfloat to i32*
149
- // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i32(i32* [[INTADDR]])
149
+ // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i32(i32* elementtype(i32) [[INTADDR]])
150
150
// CHECK-ARM64: [[TRUNCRES:%.*]] = trunc i64 [[INTRES]] to i32
151
151
// CHECK-ARM64: bitcast i32 [[TRUNCRES]] to float
152
152
@@ -164,7 +164,7 @@ int test_ldaex(char *addr, long long *addr64, float *addrfloat) {
164
164
165
165
// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double*
166
166
// CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64*
167
- // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* [[TMP5]])
167
+ // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* elementtype(i64) [[TMP5]])
168
168
// CHECK-ARM64: bitcast i64 [[INTRES]] to double
169
169
170
170
sum += * __builtin_arm_ldaex ((int * * )addr );
@@ -175,7 +175,7 @@ int test_ldaex(char *addr, long long *addr64, float *addrfloat) {
175
175
176
176
// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to i32**
177
177
// CHECK-ARM64: [[TMP5:%.*]] = bitcast i32** [[TMP4]] to i64*
178
- // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* [[TMP5]])
178
+ // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* elementtype(i64) [[TMP5]])
179
179
// CHECK-ARM64: inttoptr i64 [[INTRES]] to i32*
180
180
181
181
sum += __builtin_arm_ldaex ((struct Simple * * )addr )-> a ;
@@ -186,7 +186,7 @@ int test_ldaex(char *addr, long long *addr64, float *addrfloat) {
186
186
187
187
// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple**
188
188
// CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64*
189
- // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* [[TMP5]])
189
+ // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* elementtype(i64) [[TMP5]])
190
190
// CHECK-ARM64: inttoptr i64 [[INTRES]] to %struct.Simple*
191
191
return sum ;
192
192
}
@@ -199,21 +199,21 @@ int test_strex(char *addr) {
199
199
res |= __builtin_arm_strex (4 , addr );
200
200
// CHECK: call i32 @llvm.arm.strex.p0i8(i32 4, i8* %addr)
201
201
202
- // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i8(i64 4, i8* %addr)
202
+ // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i8(i64 4, i8* elementtype(i8) %addr)
203
203
204
204
res |= __builtin_arm_strex (42 , (short * )addr );
205
205
// CHECK: [[ADDR16:%.*]] = bitcast i8* %addr to i16*
206
206
// CHECK: call i32 @llvm.arm.strex.p0i16(i32 42, i16* [[ADDR16]])
207
207
208
208
// CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16*
209
- // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i16(i64 42, i16* [[ADDR16]])
209
+ // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i16(i64 42, i16* elementtype(i16) [[ADDR16]])
210
210
211
211
res |= __builtin_arm_strex (42 , (int * )addr );
212
212
// CHECK: [[ADDR32:%.*]] = bitcast i8* %addr to i32*
213
213
// CHECK: call i32 @llvm.arm.strex.p0i32(i32 42, i32* [[ADDR32]])
214
214
215
215
// CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32*
216
- // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i32(i64 42, i32* [[ADDR32]])
216
+ // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i32(i64 42, i32* elementtype(i32) [[ADDR32]])
217
217
218
218
res |= __builtin_arm_strex (42 , (long long * )addr );
219
219
// CHECK: store i64 42, i64* [[TMP:%.*]], align 8
@@ -226,7 +226,7 @@ int test_strex(char *addr) {
226
226
// CHECK: call i32 @llvm.arm.strexd(i32 [[LO]], i32 [[HI]], i8* [[TMP5]])
227
227
228
228
// CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64*
229
- // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i64(i64 42, i64* [[ADDR64]])
229
+ // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i64(i64 42, i64* elementtype(i64) [[ADDR64]])
230
230
231
231
res |= __builtin_arm_strex (2.71828f , (float * )addr );
232
232
// CHECK: [[TMP4:%.*]] = bitcast i8* %addr to float*
@@ -235,7 +235,7 @@ int test_strex(char *addr) {
235
235
236
236
// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to float*
237
237
// CHECK-ARM64: [[TMP5:%.*]] = bitcast float* [[TMP4]] to i32*
238
- // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i32(i64 1076754509, i32* [[TMP5]])
238
+ // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i32(i64 1076754509, i32* elementtype(i32) [[TMP5]])
239
239
240
240
res |= __builtin_arm_strex (3.14159 , (double * )addr );
241
241
// CHECK: store double 3.141590e+00, double* [[TMP:%.*]], align 8
@@ -249,7 +249,7 @@ int test_strex(char *addr) {
249
249
250
250
// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double*
251
251
// CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64*
252
- // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i64(i64 4614256650576692846, i64* [[TMP5]])
252
+ // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i64(i64 4614256650576692846, i64* elementtype(i64) [[TMP5]])
253
253
254
254
res |= __builtin_arm_strex (& var , (struct Simple * * )addr );
255
255
// CHECK: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple**
@@ -260,7 +260,7 @@ int test_strex(char *addr) {
260
260
// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple**
261
261
// CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64*
262
262
// CHECK-ARM64: [[INTVAL:%.*]] = ptrtoint %struct.Simple* %var to i64
263
- // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i64(i64 [[INTVAL]], i64* [[TMP5]])
263
+ // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i64(i64 [[INTVAL]], i64* elementtype(i64) [[TMP5]])
264
264
265
265
return res ;
266
266
}
@@ -273,21 +273,21 @@ int test_stlex(char *addr) {
273
273
res |= __builtin_arm_stlex (4 , addr );
274
274
// CHECK: call i32 @llvm.arm.stlex.p0i8(i32 4, i8* %addr)
275
275
276
- // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i8(i64 4, i8* %addr)
276
+ // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i8(i64 4, i8* elementtype(i8) %addr)
277
277
278
278
res |= __builtin_arm_stlex (42 , (short * )addr );
279
279
// CHECK: [[ADDR16:%.*]] = bitcast i8* %addr to i16*
280
280
// CHECK: call i32 @llvm.arm.stlex.p0i16(i32 42, i16* [[ADDR16]])
281
281
282
282
// CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16*
283
- // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i16(i64 42, i16* [[ADDR16]])
283
+ // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i16(i64 42, i16* elementtype(i16) [[ADDR16]])
284
284
285
285
res |= __builtin_arm_stlex (42 , (int * )addr );
286
286
// CHECK: [[ADDR32:%.*]] = bitcast i8* %addr to i32*
287
287
// CHECK: call i32 @llvm.arm.stlex.p0i32(i32 42, i32* [[ADDR32]])
288
288
289
289
// CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32*
290
- // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i32(i64 42, i32* [[ADDR32]])
290
+ // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i32(i64 42, i32* elementtype(i32) [[ADDR32]])
291
291
292
292
res |= __builtin_arm_stlex (42 , (long long * )addr );
293
293
// CHECK: store i64 42, i64* [[TMP:%.*]], align 8
@@ -300,7 +300,7 @@ int test_stlex(char *addr) {
300
300
// CHECK: call i32 @llvm.arm.stlexd(i32 [[LO]], i32 [[HI]], i8* [[TMP5]])
301
301
302
302
// CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64*
303
- // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i64(i64 42, i64* [[ADDR64]])
303
+ // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i64(i64 42, i64* elementtype(i64) [[ADDR64]])
304
304
305
305
res |= __builtin_arm_stlex (2.71828f , (float * )addr );
306
306
// CHECK: [[TMP4:%.*]] = bitcast i8* %addr to float*
@@ -309,7 +309,7 @@ int test_stlex(char *addr) {
309
309
310
310
// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to float*
311
311
// CHECK-ARM64: [[TMP5:%.*]] = bitcast float* [[TMP4]] to i32*
312
- // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i32(i64 1076754509, i32* [[TMP5]])
312
+ // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i32(i64 1076754509, i32* elementtype(i32) [[TMP5]])
313
313
314
314
res |= __builtin_arm_stlex (3.14159 , (double * )addr );
315
315
// CHECK: store double 3.141590e+00, double* [[TMP:%.*]], align 8
@@ -323,7 +323,7 @@ int test_stlex(char *addr) {
323
323
324
324
// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double*
325
325
// CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64*
326
- // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i64(i64 4614256650576692846, i64* [[TMP5]])
326
+ // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i64(i64 4614256650576692846, i64* elementtype(i64) [[TMP5]])
327
327
328
328
res |= __builtin_arm_stlex (& var , (struct Simple * * )addr );
329
329
// CHECK: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple**
@@ -334,7 +334,7 @@ int test_stlex(char *addr) {
334
334
// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple**
335
335
// CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64*
336
336
// CHECK-ARM64: [[INTVAL:%.*]] = ptrtoint %struct.Simple* %var to i64
337
- // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i64(i64 [[INTVAL]], i64* [[TMP5]])
337
+ // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i64(i64 [[INTVAL]], i64* elementtype(i64) [[TMP5]])
338
338
339
339
return res ;
340
340
}
0 commit comments