@@ -137,14 +137,12 @@ define void @bzero_32_stack() {
137
137
ret void
138
138
}
139
139
140
- ; FIXME These don't pair up because the offset isn't a multiple of 16 bits. x0, however, could be used as a base for a paired store.
141
140
define void @bzero_40_stack () {
142
141
; CHECK-LABEL: bzero_40_stack:
143
- ; CHECK: stp xzr, x30, [sp, #40]
144
- ; CHECK: movi v0.2d, #0000000000000000
145
- ; CHECK-NEXT: add x0, sp, #8
146
- ; CHECK-NEXT: stur q0, [sp, #24]
147
- ; CHECK-NEXT: stur q0, [sp, #8]
142
+ ; CHECK: movi v0.2d, #0000000000000000
143
+ ; CHECK-NEXT: mov x0, sp
144
+ ; CHECK-NEXT: str xzr, [sp, #32]
145
+ ; CHECK-NEXT: stp q0, q0, [sp]
148
146
; CHECK-NEXT: bl something
149
147
%buf = alloca [40 x i8 ], align 1
150
148
%cast = bitcast [40 x i8 ]* %buf to i8*
@@ -167,16 +165,13 @@ define void @bzero_64_stack() {
167
165
ret void
168
166
}
169
167
170
- ; FIXME These don't pair up because the offset isn't a multiple of 16 bits. x0, however, could be used as a base for a paired store.
171
168
define void @bzero_72_stack () {
172
169
; CHECK-LABEL: bzero_72_stack:
173
- ; CHECK: stp xzr, x30, [sp, #72]
174
170
; CHECK: movi v0.2d, #0000000000000000
175
- ; CHECK-NEXT: x0, sp, #8
176
- ; CHECK-NEXT: stur q0, [sp, #56]
177
- ; CHECK-NEXT: stur q0, [sp, #40]
178
- ; CHECK-NEXT: stur q0, [sp, #24]
179
- ; CHECK-NEXT: stur q0, [sp, #8]
171
+ ; CHECK-NEXT: mov x0, sp
172
+ ; CHECK-NEXT: str xzr, [sp, #64]
173
+ ; CHECK-NEXT: stp q0, q0, [sp, #32]
174
+ ; CHECK-NEXT: stp q0, q0, [sp]
180
175
; CHECK-NEXT: bl something
181
176
%buf = alloca [72 x i8 ], align 1
182
177
%cast = bitcast [72 x i8 ]* %buf to i8*
@@ -310,14 +305,11 @@ define void @memset_26_stack() {
310
305
ret void
311
306
}
312
307
313
- ; FIXME This could use FP ops.
314
308
define void @memset_32_stack () {
315
309
; CHECK-LABEL: memset_32_stack:
316
- ; CHECK: mov x8 , #-6148914691236517206
310
+ ; CHECK: movi v0.16b , #170
317
311
; CHECK-NEXT: mov x0, sp
318
- ; CHECK-NEXT: stp x8, x30, [sp, #24]
319
- ; CHECK-NEXT: stp x8, x8, [sp, #8]
320
- ; CHECK-NEXT: str x8, [sp]
312
+ ; CHECK-NEXT: stp q0, q0, [sp]
321
313
; CHECK-NEXT: bl something
322
314
%buf = alloca [32 x i8 ], align 1
323
315
%cast = bitcast [32 x i8 ]* %buf to i8*
@@ -326,14 +318,13 @@ define void @memset_32_stack() {
326
318
ret void
327
319
}
328
320
329
- ; FIXME This could use FP ops.
330
321
define void @memset_40_stack () {
331
322
; CHECK-LABEL: memset_40_stack:
332
323
; CHECK: mov x8, #-6148914691236517206
333
- ; CHECK-NEXT: add x0, sp, #8
334
- ; CHECK-NEXT: stp x8, x30, [sp, #40]
335
- ; CHECK-NEXT: stp x8, x8, [sp, #24 ]
336
- ; CHECK-NEXT: stp x8, x8 , [sp, #8 ]
324
+ ; CHECK-NEXT: movi v0.16b, #170
325
+ ; CHECK-NEXT: mov x0, sp
326
+ ; CHECK-NEXT: str x8, [sp, #32 ]
327
+ ; CHECK-NEXT: stp q0, q0 , [sp]
337
328
; CHECK-NEXT: bl something
338
329
%buf = alloca [40 x i8 ], align 1
339
330
%cast = bitcast [40 x i8 ]* %buf to i8*
@@ -342,16 +333,12 @@ define void @memset_40_stack() {
342
333
ret void
343
334
}
344
335
345
- ; FIXME This could use FP ops.
346
336
define void @memset_64_stack () {
347
337
; CHECK-LABEL: memset_64_stack:
348
- ; CHECK: mov x8 , #-6148914691236517206
338
+ ; CHECK: movi v0.16b , #170
349
339
; CHECK-NEXT: mov x0, sp
350
- ; CHECK-NEXT: stp x8, x30, [sp, #56]
351
- ; CHECK-NEXT: stp x8, x8, [sp, #40]
352
- ; CHECK-NEXT: stp x8, x8, [sp, #24]
353
- ; CHECK-NEXT: stp x8, x8, [sp, #8]
354
- ; CHECK-NEXT: str x8, [sp]
340
+ ; CHECK-NEXT: stp q0, q0, [sp, #32]
341
+ ; CHECK-NEXT: stp q0, q0, [sp]
355
342
; CHECK-NEXT: bl something
356
343
%buf = alloca [64 x i8 ], align 1
357
344
%cast = bitcast [64 x i8 ]* %buf to i8*
@@ -360,16 +347,14 @@ define void @memset_64_stack() {
360
347
ret void
361
348
}
362
349
363
- ; FIXME This could use FP ops.
364
350
define void @memset_72_stack () {
365
351
; CHECK-LABEL: memset_72_stack:
366
352
; CHECK: mov x8, #-6148914691236517206
367
- ; CHECK-NEXT: add x0, sp, #8
368
- ; CHECK-NEXT: stp x8, x30, [sp, #72]
369
- ; CHECK-NEXT: stp x8, x8, [sp, #56]
370
- ; CHECK-NEXT: stp x8, x8, [sp, #40]
371
- ; CHECK-NEXT: stp x8, x8, [sp, #24]
372
- ; CHECK-NEXT: stp x8, x8, [sp, #8]
353
+ ; CHECK-NEXT: movi v0.16b, #170
354
+ ; CHECK-NEXT: mov x0, sp
355
+ ; CHECK-NEXT: str x8, [sp, #64]
356
+ ; CHECK-NEXT: stp q0, q0, [sp, #32]
357
+ ; CHECK-NEXT: stp q0, q0, [sp]
373
358
; CHECK-NEXT: bl something
374
359
%buf = alloca [72 x i8 ], align 1
375
360
%cast = bitcast [72 x i8 ]* %buf to i8*
@@ -378,20 +363,14 @@ define void @memset_72_stack() {
378
363
ret void
379
364
}
380
365
381
- ; FIXME This could use FP ops.
382
366
define void @memset_128_stack () {
383
367
; CHECK-LABEL: memset_128_stack:
384
- ; CHECK: mov x8 , #-6148914691236517206
368
+ ; CHECK: movi v0.16b , #170
385
369
; CHECK-NEXT: mov x0, sp
386
- ; CHECK-NEXT: stp x8, x30, [sp, #120]
387
- ; CHECK-NEXT: stp x8, x8, [sp, #104]
388
- ; CHECK-NEXT: stp x8, x8, [sp, #88]
389
- ; CHECK-NEXT: stp x8, x8, [sp, #72]
390
- ; CHECK-NEXT: stp x8, x8, [sp, #56]
391
- ; CHECK-NEXT: stp x8, x8, [sp, #40]
392
- ; CHECK-NEXT: stp x8, x8, [sp, #24]
393
- ; CHECK-NEXT: stp x8, x8, [sp, #8]
394
- ; CHECK-NEXT: str x8, [sp]
370
+ ; CHECK-NEXT: stp q0, q0, [sp, #96]
371
+ ; CHECK-NEXT: stp q0, q0, [sp, #64]
372
+ ; CHECK-NEXT: stp q0, q0, [sp, #32]
373
+ ; CHECK-NEXT: stp q0, q0, [sp]
395
374
; CHECK-NEXT: bl something
396
375
%buf = alloca [128 x i8 ], align 1
397
376
%cast = bitcast [128 x i8 ]* %buf to i8*
@@ -400,27 +379,18 @@ define void @memset_128_stack() {
400
379
ret void
401
380
}
402
381
403
- ; FIXME This could use FP ops.
404
382
define void @memset_256_stack () {
405
383
; CHECK-LABEL: memset_256_stack:
406
- ; CHECK: mov x8, #-6148914691236517206
407
- ; CHECK-NEXT: mov x0, sp
408
- ; CHECK-NEXT: stp x8, x8, [sp, #240]
409
- ; CHECK-NEXT: stp x8, x8, [sp, #224]
410
- ; CHECK-NEXT: stp x8, x8, [sp, #208]
411
- ; CHECK-NEXT: stp x8, x8, [sp, #192]
412
- ; CHECK-NEXT: stp x8, x8, [sp, #176]
413
- ; CHECK-NEXT: stp x8, x8, [sp, #160]
414
- ; CHECK-NEXT: stp x8, x8, [sp, #144]
415
- ; CHECK-NEXT: stp x8, x8, [sp, #128]
416
- ; CHECK-NEXT: stp x8, x8, [sp, #112]
417
- ; CHECK-NEXT: stp x8, x8, [sp, #96]
418
- ; CHECK-NEXT: stp x8, x8, [sp, #80]
419
- ; CHECK-NEXT: stp x8, x8, [sp, #64]
420
- ; CHECK-NEXT: stp x8, x8, [sp, #48]
421
- ; CHECK-NEXT: stp x8, x8, [sp, #32]
422
- ; CHECK-NEXT: stp x8, x8, [sp, #16]
423
- ; CHECK-NEXT: stp x8, x8, [sp]
384
+ ; CHECK: movi v0.16b, #170
385
+ ; CHECK-NEXT: mov x0, sp
386
+ ; CHECK-NEXT: stp q0, q0, [sp, #224]
387
+ ; CHECK-NEXT: stp q0, q0, [sp, #192]
388
+ ; CHECK-NEXT: stp q0, q0, [sp, #160]
389
+ ; CHECK-NEXT: stp q0, q0, [sp, #128]
390
+ ; CHECK-NEXT: stp q0, q0, [sp, #96]
391
+ ; CHECK-NEXT: stp q0, q0, [sp, #64]
392
+ ; CHECK-NEXT: stp q0, q0, [sp, #32]
393
+ ; CHECK-NEXT: stp q0, q0, [sp]
424
394
; CHECK-NEXT: bl something
425
395
%buf = alloca [256 x i8 ], align 1
426
396
%cast = bitcast [256 x i8 ]* %buf to i8*
0 commit comments